@elite.framework/ng.core 2.0.23 → 2.0.24

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.
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.core-services.mjs","sources":["../tmp-esm2022/services/lib/environment.service.js","../tmp-esm2022/services/lib/rest.service.js","../tmp-esm2022/services/lib/base.service.js","../tmp-esm2022/services/lib/generic.service.js","../tmp-esm2022/services/lib/ssr-cookie.service.js","../tmp-esm2022/services/lib/SwalService.service.js","../tmp-esm2022/services/lib/application-localization.service.js","../tmp-esm2022/services/lib/application-configuration.service.js","../tmp-esm2022/services/lib/config-state.service.js","../tmp-esm2022/services/lib/permission-checker.service.js","../tmp-esm2022/services/lib/permissions-guard.service.js","../tmp-esm2022/services/lib/logger.interface.js","../tmp-esm2022/services/lib/logger.service.js","../tmp-esm2022/services/lib/id-parser.service.js","../tmp-esm2022/services/lib/query-parser.js","../tmp-esm2022/services/lib/session-state.service.js","../tmp-esm2022/services/lib/localization.service.js","../tmp-esm2022/services/lib/local-storage-listener.service.js","../tmp-esm2022/services/lib/local-storage.service.js","../tmp-esm2022/services/lib/title-strategy.service.js","../tmp-esm2022/services/lib/utils/compare-func.token.js","../tmp-esm2022/services/lib/routes.service.js","../tmp-esm2022/services/lib/routes.handler.service.js","../tmp-esm2022/services/lib/multi-tenancy.service.js","../tmp-esm2022/services/lib/http-error-reporter.service.js","../tmp-esm2022/services/lib/subscription.service.js","../tmp-esm2022/services/lib/router-events.service.js","../tmp-esm2022/services/lib/router-wait.service.js","../tmp-esm2022/services/lib/abstract-menu.service.js","../tmp-esm2022/services/lib/nav-items.service.js","../tmp-esm2022/services/lib/user-menu.service.js","../tmp-esm2022/services/lib/utils/route-utils.js","../tmp-esm2022/services/lib/replaceable-components.service.js","../tmp-esm2022/services/lib/http-wait.service.js","../tmp-esm2022/services/lib/window.service.js","../tmp-esm2022/services/lib/utils/environment-utils.js","../tmp-esm2022/services/lib/utils/multi-tenancy-utils.js","../tmp-esm2022/services/lib/utils/initial-utils.js","../tmp-esm2022/services/elite.framework-ng.core-services.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport { map } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nconst mapToApiUrl = (key) => (apis) => ((key && apis[key]) || apis.default).url || apis.default.url;\nconst mapToIssuer = (issuer) => {\n if (!issuer) {\n return issuer;\n }\n return issuer.endsWith('/') ? issuer : issuer + '/';\n};\nexport class EnvironmentService {\n store = new InternalStore({});\n get createOnUpdateStream() {\n return this.store.sliceUpdate;\n }\n getEnvironment$() {\n return this.store.sliceState(state => state);\n }\n getEnvironment() {\n return this.store.state;\n }\n getApiUrl(key) {\n return mapToApiUrl(key)(this.store.state?.apis);\n }\n getApiUrl$(key) {\n return this.store.sliceState(state => state.apis).pipe(map(mapToApiUrl(key)));\n }\n setState(environment) {\n this.store.set(environment);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: EnvironmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: EnvironmentService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: EnvironmentService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL2Vudmlyb25tZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUVyQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FDOUQsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBRS9ELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFO0lBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFHRixNQUFNLE9BQU8sa0JBQWtCO0lBQ1osS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQWlCLENBQUMsQ0FBQztJQUU5RCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXVCO1FBQy9CLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsUUFBUSxDQUFDLFdBQXdCO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7dUdBekJVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBREwsTUFBTTs7MkZBQ25CLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcGlzLCBFbnZpcm9ubWVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgSW50ZXJuYWxTdG9yZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IG1hcFRvQXBpVXJsID0gKGtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiAoYXBpczogQXBpcykgPT5cbiAgKChrZXkgJiYgYXBpc1trZXldKSB8fCBhcGlzLmRlZmF1bHQpLnVybCB8fCBhcGlzLmRlZmF1bHQudXJsO1xuXG5jb25zdCBtYXBUb0lzc3VlciA9IChpc3N1ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIWlzc3Vlcikge1xuICAgIHJldHVybiBpc3N1ZXI7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlci5lbmRzV2l0aCgnLycpID8gaXNzdWVyIDogaXNzdWVyICsgJy8nO1xufTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gbmV3IEludGVybmFsU3RvcmUoe30gYXMgRW52aXJvbm1lbnQpO1xuXG4gIGdldCBjcmVhdGVPblVwZGF0ZVN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVVwZGF0ZTtcbiAgfVxuXG4gIGdldEVudmlyb25tZW50JCgpOiBPYnNlcnZhYmxlPEVudmlyb25tZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VTdGF0ZShzdGF0ZSA9PiBzdGF0ZSk7XG4gIH1cblxuICBnZXRFbnZpcm9ubWVudCgpOiBFbnZpcm9ubWVudCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGU7XG4gIH1cblxuICBnZXRBcGlVcmwoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbWFwVG9BcGlVcmwoa2V5KSh0aGlzLnN0b3JlLnN0YXRlPy5hcGlzKTtcbiAgfVxuXG4gIGdldEFwaVVybCQoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlLmFwaXMpLnBpcGUobWFwKG1hcFRvQXBpVXJsKGtleSkpKTtcbiAgfVxuXG4gIHNldFN0YXRlKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCkge1xuICAgIHRoaXMuc3RvcmUuc2V0KGVudmlyb25tZW50KTtcbiAgfVxuXG4gIC8vIGdldElzc3VlcigpIHtcbiAgLy8gICBjb25zdCBpc3N1ZXIgPSB0aGlzLnN0b3JlLnN0YXRlPy5vQXV0aENvbmZpZz8uaXNzdWVyO1xuXG4gIC8vICAgcmV0dXJuIG1hcFRvSXNzdWVyKGlzc3Vlcik7XG4gIC8vIH1cblxuICAvLyBnZXRJc3N1ZXIkKCkge1xuICAvLyAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGU/Lm9BdXRoQ29uZmlnPy5pc3N1ZXIpLnBpcGUobWFwKG1hcFRvSXNzdWVyKSk7XG4gIC8vIH1cblxuICAvLyBnZXRJbXBlcnNvbmF0aW9uKCkge1xuICAvLyAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlPy5vQXV0aENvbmZpZz8uaW1wZXJzb25hdGlvbiB8fCB7fTtcbiAgLy8gfVxuXG4gIC8vIGdldEltcGVyc29uYXRpb24kKCkge1xuICAvLyAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGU/Lm9BdXRoQ29uZmlnPy5pbXBlcnNvbmF0aW9uIHx8IHt9KTtcbiAgLy8gfVxufVxuIl19","import { HttpClient, HttpParams } from \"@angular/common/http\";\nimport { Injectable, Inject, inject } from \"@angular/core\";\nimport { CORE_OPTIONS } from \"@elite.framework/ng.core/tokens\";\nimport { throwError, catchError } from \"rxjs\";\nimport { EnvironmentService } from \"./environment.service\";\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common/http\";\nexport class RestService {\n options;\n http;\n environment = inject(EnvironmentService);\n constructor(options, http) {\n this.options = options;\n this.http = http;\n }\n getApiFromStore(apiName) {\n return this.environment.getApiUrl(apiName);\n }\n handleError(err) {\n // this.httpErrorReporter.reportError(err);\n return throwError(() => err);\n }\n request(request, config, api) {\n // debugger\n config = config || {};\n api = api || this.getApiFromStore(config.apiName);\n const { method, params, ...options } = request;\n const { observe = \"body\" /* Rest.Observe.Body */, skipHandleError } = config;\n const url = this.removeDuplicateSlashes(api + request.url);\n const httpClient = this.getHttpClient(config.skipAddingHeader ?? false);\n return httpClient\n .request(method, url, {\n observe,\n ...(params && {\n params: this.getParams(params, config.httpParamEncoder),\n }),\n ...options,\n })\n .pipe(catchError(err => (skipHandleError ? throwError(() => err) : this.handleError(err))));\n }\n getHttpClient(isExternal) {\n return /* isExternal ? this.externalHttp : */ this.http;\n }\n getParams(params, encoder) {\n const filteredParams = Object.entries(params).reduce((acc, [key, value]) => {\n if (isUndefinedOrEmptyString(value))\n return acc;\n if (value === null && !this.options.sendNullsAsQueryParam)\n return acc;\n acc[key] = value;\n return acc;\n }, {});\n return encoder\n ? new HttpParams({ encoder, fromObject: filteredParams })\n : new HttpParams({ fromObject: filteredParams });\n }\n removeDuplicateSlashes(url) {\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, deps: [{ token: CORE_OPTIONS }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [CORE_OPTIONS]\n }] }, { type: i1.HttpClient }] });\nexport function isUndefinedOrEmptyString(value) {\n return value === undefined || value === '';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcmVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1DLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUcsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUszRCxNQUFNLE9BQU8sV0FBVztJQUdZO0lBQ3RCO0lBSEosV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2pELFlBQ2tDLE9BQWEsRUFDbkMsSUFBZ0I7UUFETSxZQUFPLEdBQVAsT0FBTyxDQUFNO1FBQ25DLFNBQUksR0FBSixJQUFJLENBQVk7SUFHeEIsQ0FBQztJQUVLLGVBQWUsQ0FBQyxPQUEyQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQiwyQ0FBMkM7UUFDM0MsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FDTCxPQUF5QyxFQUN6QyxNQUFvQixFQUNwQixHQUFZO1FBRVosV0FBVztRQUNYLE1BQU0sR0FBRyxNQUFNLElBQUssRUFBa0IsQ0FBQztRQUN2QyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQy9DLE1BQU0sRUFBRSxPQUFPLGlDQUFvQixFQUFFLGVBQWUsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1RCxNQUFNLFVBQVUsR0FBZSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUNwRixPQUFPLFVBQVU7YUFDZCxPQUFPLENBQUksTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUN2QixPQUFPO1lBQ1AsR0FBRyxDQUFDLE1BQU0sSUFBSTtnQkFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2FBQ3hELENBQUM7WUFDRixHQUFHLE9BQU87U0FDSixDQUFDO2FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUNPLGFBQWEsQ0FBQyxVQUFtQjtRQUN2QyxPQUFPLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDMUQsQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUFtQixFQUFFLE9BQTRCO1FBQ2pFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDekUsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFDaEQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUI7Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFDdEUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNqQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFTLENBQUMsQ0FBQztRQUNkLE9BQU8sT0FBTztZQUNaLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDekQsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEdBQVc7UUFDeEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO3VHQTNEVSxXQUFXLGtCQUdaLFlBQVk7MkdBSFgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFJSSxNQUFNOzJCQUFDLFlBQVk7O0FBNER4QixNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBYztJQUNyRCxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFJlcXVlc3QsIEh0dHBQYXJhbWV0ZXJDb2RlYywgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm9vdCwgUmVzdCB9IGZyb20gXCJAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzXCI7XG5pbXBvcnQgeyAgQ09SRV9PUFRJT05TIH0gZnJvbSBcIkBlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS90b2tlbnNcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSBcIi4vZW52aXJvbm1lbnQuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVzdFNlcnZpY2Uge1xuICBwcml2YXRlIGVudmlyb25tZW50ID0gaW5qZWN0KEVudmlyb25tZW50U2VydmljZSk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQ09SRV9PUFRJT05TKSBwcm90ZWN0ZWQgb3B0aW9uczogUm9vdCxcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICAvLyBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2VydmljZSxcbiAgICAvLyBwcm90ZWN0ZWQgaHR0cEVycm9yUmVwb3J0ZXI6IEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSxcbiAgKSB7IH1cblxuICBwcm90ZWN0ZWQgZ2V0QXBpRnJvbVN0b3JlKGFwaU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuZ2V0QXBpVXJsKGFwaU5hbWUpO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIHRoaXMuaHR0cEVycm9yUmVwb3J0ZXIucmVwb3J0RXJyb3IoZXJyKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICB9XG5cbiAgcmVxdWVzdDxULCBSPihcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxUPiB8IFJlc3QuUmVxdWVzdDxUPixcbiAgICBjb25maWc/OiBSZXN0LkNvbmZpZyxcbiAgICBhcGk/OiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8Uj4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgY29uZmlnID0gY29uZmlnIHx8ICh7fSBhcyBSZXN0LkNvbmZpZyk7XG4gICAgYXBpID0gYXBpIHx8IHRoaXMuZ2V0QXBpRnJvbVN0b3JlKGNvbmZpZy5hcGlOYW1lKTtcbiAgICBjb25zdCB7IG1ldGhvZCwgcGFyYW1zLCAuLi5vcHRpb25zIH0gPSByZXF1ZXN0O1xuICAgIGNvbnN0IHsgb2JzZXJ2ZSA9IFJlc3QuT2JzZXJ2ZS5Cb2R5LCBza2lwSGFuZGxlRXJyb3IgfSA9IGNvbmZpZztcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZVNsYXNoZXMoIGFwaSArIHJlcXVlc3QudXJsKTtcblxuICAgIGNvbnN0IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQgPSB0aGlzLmdldEh0dHBDbGllbnQoY29uZmlnLnNraXBBZGRpbmdIZWFkZXIgPz8gZmFsc2UpO1xuICAgIHJldHVybiBodHRwQ2xpZW50XG4gICAgICAucmVxdWVzdDxSPihtZXRob2QsIHVybCwge1xuICAgICAgICBvYnNlcnZlLFxuICAgICAgICAuLi4ocGFyYW1zICYmIHtcbiAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0UGFyYW1zKHBhcmFtcywgY29uZmlnLmh0dHBQYXJhbUVuY29kZXIpLFxuICAgICAgICB9KSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0gYXMgYW55KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gKHNraXBIYW5kbGVFcnJvciA/IHRocm93RXJyb3IoKCkgPT4gZXJyKSA6IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSkpKTtcbiAgfVxuICBwcml2YXRlIGdldEh0dHBDbGllbnQoaXNFeHRlcm5hbDogYm9vbGVhbikge1xuICAgIHJldHVybiAvKiBpc0V4dGVybmFsID8gdGhpcy5leHRlcm5hbEh0dHAgOiAqLyB0aGlzLmh0dHA7XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtcyhwYXJhbXM6IFJlc3QuUGFyYW1zLCBlbmNvZGVyPzogSHR0cFBhcmFtZXRlckNvZGVjKTogSHR0cFBhcmFtcyB7XG4gICAgY29uc3QgZmlsdGVyZWRQYXJhbXMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZE9yRW1wdHlTdHJpbmcodmFsdWUpKSByZXR1cm4gYWNjO1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsICYmICF0aGlzLm9wdGlvbnMuc2VuZE51bGxzQXNRdWVyeVBhcmFtKSByZXR1cm4gYWNjO1xuICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgYW55KTtcbiAgICByZXR1cm4gZW5jb2RlclxuICAgICAgPyBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXIsIGZyb21PYmplY3Q6IGZpbHRlcmVkUGFyYW1zIH0pXG4gICAgICA6IG5ldyBIdHRwUGFyYW1zKHsgZnJvbU9iamVjdDogZmlsdGVyZWRQYXJhbXMgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUR1cGxpY2F0ZVNsYXNoZXModXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKTtcbiAgfVxuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZE9yRW1wdHlTdHJpbmcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xufVxuIl19","import { Injectable } from '@angular/core';\nimport { map } from 'rxjs';\nimport { RestService } from './rest.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nexport class BaseService {\n restService;\n apiName = '';\n moduleName = '';\n constructor(restService) {\n this.restService = restService;\n }\n getList = (input, endpoint) => {\n const params = Object.keys(input).reduce((acc, key) => {\n acc[key] = input[key];\n return acc;\n }, {});\n const url = endpoint ? endpoint : `/${this.moduleName}/${this.apiName}`;\n return this.restService.request({\n method: 'GET',\n url: url,\n params: params,\n }, { apiName: this.apiName })\n .pipe(map(response => response));\n };\n get = (id) => this.restService.request({\n method: 'GET',\n url: this.buildUrl(id),\n }, { apiName: this.apiName });\n create = (input) => this.restService.request({\n method: 'POST',\n url: this.buildUrl(),\n body: input,\n }, { apiName: this.apiName });\n update = (id, input) => this.restService.request({\n method: 'PUT',\n url: this.buildUrl(id),\n body: input,\n }, { apiName: this.apiName });\n patch = (id, input) => this.restService.request({\n method: 'PATCH',\n url: this.buildUrl(id),\n body: input,\n }, { apiName: this.apiName });\n delete = (id) => this.restService.request({\n method: 'DELETE',\n url: this.buildUrl(id),\n }, { apiName: this.apiName });\n buildUrl(id) {\n if (!id)\n return `/${this.moduleName}/${this.apiName}`;\n if (Array.isArray(id)) {\n // Array-based composite key: ['123', '456'] => /123/456\n return `/${this.moduleName}/${this.apiName}/${id.join('/')}`;\n }\n if (typeof id === 'object') {\n // Object-based composite key: {id:123, biId:456} => /123/456\n return `/${this.moduleName}/${this.apiName}/${Object.values(id).join('/')}`;\n }\n // Single id\n return `/${this.moduleName}/${this.apiName}/${id}`;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RestService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU03QyxNQUFNLE9BQU8sV0FBVztJQUlIO0lBSG5CLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFFYixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFlBQW1CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUc3QyxPQUFPLEdBQUcsQ0FBQyxLQUFTLEVBQUUsUUFBaUIsRUFBRyxFQUFFO1FBRTFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFTixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV6RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUE0QjtZQUN6RCxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUcsRUFBRSxHQUFHO1lBQ1IsTUFBTSxFQUFFLE1BQU07U0FDZixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM1QixJQUFJLENBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDLENBQUM7SUFFSixHQUFHLEdBQUcsQ0FBQyxFQUFzRCxFQUFFLEVBQUUsQ0FDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQVc7UUFDakMsTUFBTSxFQUFFLEtBQUs7UUFDYixHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7S0FDdkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBVztRQUNqQyxNQUFNLEVBQUUsTUFBTTtRQUNkLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ3BCLElBQUksRUFBRSxLQUFLO0tBQ1osRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLEdBQUcsQ0FBQyxFQUFzRCxFQUFFLEtBQVUsRUFBRSxFQUFFLENBQzlFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFXO1FBQ2pDLE1BQU0sRUFBRSxLQUFLO1FBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksRUFBRSxLQUFLO0tBQ1osRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUUvQixLQUFLLEdBQUcsQ0FBQyxFQUFzRCxFQUFFLEtBQVUsRUFBRSxFQUFFLENBQzlFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFXO1FBQ2pDLE1BQU0sRUFBRSxPQUFPO1FBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksRUFBRSxLQUFLO0tBQ1osRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUloQyxNQUFNLEdBQUcsQ0FBQyxFQUFzRCxFQUFFLEVBQUUsQ0FDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQVk7UUFDbEMsTUFBTSxFQUFFLFFBQVE7UUFDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0tBQ3ZCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFHeEIsUUFBUSxDQUFDLEVBQXVEO1FBQ3RFLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXRELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3RCLHdEQUF3RDtZQUN4RCxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQiw2REFBNkQ7WUFDN0QsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzlFLENBQUM7UUFFRCxZQUFZO1FBQ1osT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUNyRCxDQUFDO3VHQTdFWSxXQUFXOzJHQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRlZFJlc3VsdCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VTZXJ2aWNlIHtcclxuICBhcGlOYW1lID0gJyc7XHJcblxyXG4gIG1vZHVsZU5hbWUgPSAnJztcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlKSB7fVxyXG5cclxuXHJcbiAgICBnZXRMaXN0ID0gKGlucHV0OmFueSwgZW5kcG9pbnQ/OiBzdHJpbmcgKSA9PiB7XHJcblxyXG4gICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhpbnB1dCkucmVkdWNlKChhY2M6YW55LCBrZXkpID0+IHtcclxuICAgICAgICBhY2Nba2V5XSA9IGlucHV0W2tleV07XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwge30pO1xyXG5cclxuICAgICAgIGNvbnN0IHVybCA9IGVuZHBvaW50ID8gZW5kcG9pbnQgOiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX1gO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIFBhZ2luYXRlZFJlc3VsdDxhbnk+Pih7XHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgZ2V0ID0gKGlkOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgUmVjb3JkPHN0cmluZywgYW55PikgPT5cclxuICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBhbnk+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IHRoaXMuYnVpbGRVcmwoaWQpLFxyXG4gIH0sIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0pO1xyXG5cclxuY3JlYXRlID0gKGlucHV0OiBhbnkpID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgYW55Pih7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybCgpLFxyXG4gICAgYm9keTogaW5wdXQsXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG51cGRhdGUgPSAoaWQ6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpbnB1dDogYW55KSA9PlxyXG4gIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIGFueT4oe1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybChpZCksXHJcbiAgICBib2R5OiBpbnB1dCxcclxuICB9LCB7IGFwaU5hbWU6IHRoaXMuYXBpTmFtZSB9KTtcclxuXHJcbiBwYXRjaCA9IChpZDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4sIGlucHV0OiBhbnkpID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgYW55Pih7XHJcbiAgICBtZXRob2Q6ICdQQVRDSCcsXHJcbiAgICB1cmw6IHRoaXMuYnVpbGRVcmwoaWQpLFxyXG4gICAgYm9keTogaW5wdXQsXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG5cclxuXHJcbmRlbGV0ZSA9IChpZDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4pID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgdm9pZD4oe1xyXG4gICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybChpZCksXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG5cclxucHJpdmF0ZSBidWlsZFVybChpZD86IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICBpZiAoIWlkKSByZXR1cm4gYC8ke3RoaXMubW9kdWxlTmFtZX0vJHt0aGlzLmFwaU5hbWV9YDtcclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XHJcbiAgICAvLyBBcnJheS1iYXNlZCBjb21wb3NpdGUga2V5OiBbJzEyMycsICc0NTYnXSA9PiAvMTIzLzQ1NlxyXG4gICAgcmV0dXJuIGAvJHt0aGlzLm1vZHVsZU5hbWV9LyR7dGhpcy5hcGlOYW1lfS8ke2lkLmpvaW4oJy8nKX1gO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ29iamVjdCcpIHtcclxuICAgIC8vIE9iamVjdC1iYXNlZCBjb21wb3NpdGUga2V5OiB7aWQ6MTIzLCBiaUlkOjQ1Nn0gPT4gLzEyMy80NTZcclxuICAgIHJldHVybiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX0vJHtPYmplY3QudmFsdWVzKGlkKS5qb2luKCcvJyl9YDtcclxuICB9XHJcblxyXG4gIC8vIFNpbmdsZSBpZFxyXG4gIHJldHVybiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX0vJHtpZH1gO1xyXG59XHJcblxyXG59XHJcbiJdfQ==","// src/app/services/generic.service.ts\nimport { HttpParams } from '@angular/common/http';\n/**\n * GenericService<T, K>:\n * - T = نوع الكائن (Model)\n * - K = نوع المفتاح الأساسي (ID)، افتراضي number\n *\n * يحتوي على جميع دوال الـ CRUD القياسية للتوريث في الخدمات المتخصصة.\n */\nexport class GenericService {\n http;\n constructor(http) {\n this.http = http;\n }\n /**\n * جلب كل السجلات\n */\n getAll() {\n // ملاحظة: يمكن إضافة معالج أخطاء مركزي هنا أو عبر Interceptor\n return this.http.get(this.baseUrl);\n }\n /**\n * جلب سجل واحد بناءً على المعرف\n */\n getById(id) {\n // ملاحظة: تأكد أن الـ endpoint يدعم GET برقم المعرف\n return this.http.get(`${this.baseUrl}/${id}`);\n }\n /**\n * إنشاء سجل جديد\n */\n create(item) {\n // ملاحظة: استخدم Partial<T> للسماح ببعض الحقول الاختيارية\n return this.http.post(this.baseUrl, item);\n }\n /**\n * تحديث سجل موجود\n */\n update(id, item) {\n // ملاحظة: هنا نُعيد Observable<void> لأن API قد لا تُرجع الجسم نفسه\n return this.http.put(`${this.baseUrl}`, item);\n }\n /**\n * حذف سجل\n */\n delete(id) {\n // ملاحظة: يُفضّل استخدام Confirm قبل الحذف في الواجهة\n return this.http.delete(`${this.baseUrl}/${id}`);\n }\n /** endpoint قابل للتخصيص — يمكن للفرع override–ها */\n getPageUrl() {\n return this.baseUrl;\n }\n /**\n * جلب صفحة من البيانات مع دعم الفلاتر والفرز\n * @param pageIndex صفر-based\n * @param pageSize عدد السجلات\n * @param filters كائن Partial<T> أو Record<string,any>\n * @param sort نص الفرز، مثلاً \"eiNa:desc\"\n */\n getPage(pageIndex, pageSize, filters, sort) {\n // debugger\n let params = new HttpParams()\n .set('pageIndex', pageIndex.toString())\n .set('pageSize', pageSize.toString());\n if (filters) {\n Object.entries(filters).forEach(([key, val]) => {\n if (val != null && val !== '') {\n params = params.set(key, val.toString());\n }\n });\n }\n if (sort) {\n params = params.set('sort', sort);\n }\n // return this.http\n // .get<T[]>(this.getPageUrl(), { params, observe: 'response' })\n // .pipe(\n // map((resp: HttpResponse<T[]>) => ({\n // items: resp.body || [],\n // totalCount: Number(resp.headers.get('X-Total-Count')) || resp.body?.length || 0\n // }))\n // );\n return this.http.get(this.getPageUrl(), { params });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvZ2VuZXJpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QyxPQUFPLEVBQWMsVUFBVSxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBSzVFOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBZ0IsY0FBYztJQU9aO0lBQXRCLFlBQXNCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDO0lBRTFDOztPQUVHO0lBQ0gsTUFBTTtRQUNKLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxPQUFPLENBQUMsRUFBSztRQUNYLG9EQUFvRDtRQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFnQjtRQUVyQiwwREFBMEQ7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUVGLE1BQU0sQ0FBQyxFQUFLLEVBQUUsSUFBZ0I7UUFDN0Isb0VBQW9FO1FBQ25FLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQUs7UUFDVixzREFBc0Q7UUFDdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBSUYscURBQXFEO0lBQzFDLFVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFQTs7Ozs7O01BTUU7SUFDSCxPQUFPLENBQ0wsU0FBaUIsRUFDakIsUUFBZ0IsRUFDaEIsT0FBNkIsRUFDN0IsSUFBYTtRQUViLFdBQVc7UUFDWCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTthQUMxQixHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN0QyxHQUFHLENBQUMsVUFBVSxFQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixrRUFBa0U7UUFDbEUsV0FBVztRQUNYLDBDQUEwQztRQUMxQyxnQ0FBZ0M7UUFDaEMsd0ZBQXdGO1FBQ3hGLFVBQVU7UUFDVixPQUFPO1FBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUNqQixFQUFFLE1BQU0sRUFBRSxDQUNYLENBQUM7SUFDRixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvYXBwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZS50c1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4vY3J1ZC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYWdpbmF0ZWRSZXN1bHQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcblxuLyoqXG4gKiBHZW5lcmljU2VydmljZTxULCBLPjpcbiAqICAtIFQgPSDZhtmI2Lkg2KfZhNmD2KfYptmGIChNb2RlbClcbiAqICAtIEsgPSDZhtmI2Lkg2KfZhNmF2YHYqtin2K0g2KfZhNij2LPYp9iz2YogKElEKdiMINin2YHYqtix2KfYttmKIG51bWJlclxuICpcbiAqINmK2K3YqtmI2Yog2LnZhNmJINis2YXZiti5INiv2YjYp9mEINin2YTZgCBDUlVEINin2YTZgtmK2KfYs9mK2Kkg2YTZhNiq2YjYsdmK2Ksg2YHZiiDYp9mE2K7Yr9mF2KfYqiDYp9mE2YXYqtiu2LXYtdipLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY1NlcnZpY2U8VCwgSyA9IG51bWJlcj4gaW1wbGVtZW50cyBDcnVkU2VydmljZTxULCBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIC8qKlxuICAgKiDinI/vuI8g2LnZhNmJINmD2YQg2K7Yr9mF2Kkg2YHYsdi52YrYqSDYo9mGINiq2LnYsdmR2YEg2YfYsNinOlxuICAgKiDZhdir2KfZhDogcHJvdGVjdGVkIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vYXBpL2pvYnR5cHMnO1xuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJhc2VVcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCkge31cblxuICAvKipcbiAgICog2KzZhNioINmD2YQg2KfZhNiz2KzZhNin2KpcbiAgICovXG4gIGdldEFsbCgpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2YrZhdmD2YYg2KXYttin2YHYqSDZhdi52KfZhNisINij2K7Yt9in2KEg2YXYsdmD2LLZiiDZh9mG2Kcg2KPZiCDYudio2LEgSW50ZXJjZXB0b3JcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUW10+KHRoaXMuYmFzZVVybCk7XG4gIH1cblxuICAvKipcbiAgICog2KzZhNioINiz2KzZhCDZiNin2K3YryDYqNmG2KfYodmLINi52YTZiSDYp9mE2YXYudix2YFcbiAgICovXG5cbiAgZ2V0QnlJZChpZDogSyk6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2KrYo9mD2K8g2KPZhiDYp9mE2YAgZW5kcG9pbnQg2YrYr9i52YUgR0VUINio2LHZgtmFINin2YTZhdi52LHZgVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KGAke3RoaXMuYmFzZVVybH0vJHtpZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYpdmG2LTYp9ihINiz2KzZhCDYrNiv2YrYr1xuICAgKi9cbiAgY3JlYXRlKGl0ZW06IFBhcnRpYWw8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIC8vINmF2YTYp9it2LjYqTog2KfYs9iq2K7Yr9mFIFBhcnRpYWw8VD4g2YTZhNiz2YXYp9itINio2KjYudi2INin2YTYrdmC2YjZhCDYp9mE2KfYrtiq2YrYp9ix2YrYqVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmJhc2VVcmwsIGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqINiq2K3Yr9mK2Ksg2LPYrNmEINmF2YjYrNmI2K9cbiAgICovXG5cbiAgIHVwZGF0ZShpZDogSywgaXRlbTogUGFydGlhbDxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2YfZhtinINmG2Y/YudmK2K8gT2JzZXJ2YWJsZTx2b2lkPiDZhNij2YYgQVBJINmC2K8g2YTYpyDYqtmP2LHYrNi5INin2YTYrNiz2YUg2YbZgdiz2YdcbiAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4oYCR7dGhpcy5iYXNlVXJsfWAsIGl0ZW0pO1xuICB9XG4gIC8qKlxuICAgKiDYrdiw2YEg2LPYrNmEXG4gICAqL1xuICBkZWxldGUoaWQ6IEspOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAvLyDZhdmE2KfYrdi42Kk6INmK2Y/Zgdi22ZHZhCDYp9iz2KrYrtiv2KfZhSBDb25maXJtINmC2KjZhCDYp9mE2K3YsNmBINmB2Yog2KfZhNmI2KfYrNmH2KlcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPihgJHt0aGlzLmJhc2VVcmx9LyR7aWR9YCk7XG4gIH1cblxuXG5cbiAvKiogZW5kcG9pbnQg2YLYp9io2YQg2YTZhNiq2K7YtdmK2LUg4oCUINmK2YXZg9mGINmE2YTZgdix2Lkgb3ZlcnJpZGXigJPZh9inICovXG4gIHByb3RlY3RlZCBnZXRQYWdlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVVybDtcbiAgfVxuXG4gICAvKipcbiAgICog2KzZhNioINi12YHYrdipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDZhdi5INiv2LnZhSDYp9mE2YHZhNin2KrYsSDZiNin2YTZgdix2LJcbiAgICogQHBhcmFtIHBhZ2VJbmRleCDYtdmB2LEtYmFzZWRcbiAgICogQHBhcmFtIHBhZ2VTaXplINi52K/YryDYp9mE2LPYrNmE2KfYqlxuICAgKiBAcGFyYW0gZmlsdGVycyDZg9in2KbZhiBQYXJ0aWFsPFQ+INij2YggUmVjb3JkPHN0cmluZyxhbnk+XG4gICAqIEBwYXJhbSBzb3J0INmG2LUg2KfZhNmB2LHYstiMINmF2KvZhNin2YsgXCJlaU5hOmRlc2NcIlxuICAgKi9cbiAgZ2V0UGFnZShcbiAgICBwYWdlSW5kZXg6IG51bWJlcixcbiAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHNvcnQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWRSZXN1bHQ8VD4+IHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAuc2V0KCdwYWdlSW5kZXgnLCBwYWdlSW5kZXgudG9TdHJpbmcoKSlcbiAgICAgIC5zZXQoJ3BhZ2VTaXplJywgIHBhZ2VTaXplLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KGtleSwgdmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc29ydCcsIHNvcnQpO1xuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGlzLmh0dHBcbiAgICAvLyAgIC5nZXQ8VFtdPih0aGlzLmdldFBhZ2VVcmwoKSwgeyBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSlcbiAgICAvLyAgIC5waXBlKFxuICAgIC8vICAgICBtYXAoKHJlc3A6IEh0dHBSZXNwb25zZTxUW10+KSA9PiAoe1xuICAgIC8vICAgICAgIGl0ZW1zOiByZXNwLmJvZHkgfHwgW10sXG4gICAgLy8gICAgICAgdG90YWxDb3VudDogTnVtYmVyKHJlc3AuaGVhZGVycy5nZXQoJ1gtVG90YWwtQ291bnQnKSkgfHwgcmVzcC5ib2R5Py5sZW5ndGggfHwgMFxuICAgIC8vICAgICB9KSlcbiAgICAvLyAgICk7XG4gICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGFnaW5hdGVkUmVzdWx0PFQ+PihcbiAgICB0aGlzLmdldFBhZ2VVcmwoKSxcbiAgICB7IHBhcmFtcyB9XG4gICk7XG4gIH1cblxuXG59XG4iXX0=","import { Inject, Injectable, InjectionToken, Optional, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport * as i0 from \"@angular/core\";\n// Define the `Request` token\nexport const REQUEST = new InjectionToken('REQUEST');\nexport class SsrCookieService {\n document;\n platformId;\n request;\n documentIsAccessible;\n static initialUrl = '';\n constructor(document, \n // Get the `PLATFORM_ID` so we can check if we're in a browser.\n platformId, request) {\n this.document = document;\n this.platformId = platformId;\n this.request = request;\n this.documentIsAccessible = isPlatformBrowser(this.platformId);\n SsrCookieService.initialUrl = this.documentIsAccessible ? this.document.location.href : this.request?.url;\n }\n /**\n * Get cookie Regular Expression\n *\n * @param name Cookie name\n * @returns property RegExp\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n static getCookieRegExp(name) {\n const escapedName = name.replace(/([\\[\\]\\{\\}\\(\\)\\|\\=\\;\\+\\?\\,\\.\\*\\^\\$])/gi, '\\\\$1');\n return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\n }\n /**\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @param encodedURIComponent A value representing an encoded URI component.\n *\n * @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n static safeDecodeURIComponent(encodedURIComponent) {\n try {\n return decodeURIComponent(encodedURIComponent);\n }\n catch {\n // probably it is not uri encoded. return as is\n return encodedURIComponent;\n }\n }\n /**\n * Return `true` if {@link Document} is accessible, otherwise return `false`\n *\n * @param name Cookie name\n * @returns boolean - whether cookie with specified name exists\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n check(name) {\n name = encodeURIComponent(name);\n const regExp = SsrCookieService.getCookieRegExp(name);\n return regExp.test((this.documentIsAccessible ? this.document.cookie : this.request?.headers.cookie) ?? '');\n }\n isDocumentIsAccessible() {\n return this.documentIsAccessible;\n }\n get url() {\n return this.documentIsAccessible ? this.document.location.href : this.request?.url;\n }\n /**\n * Get cookies by name\n *\n * @param name Cookie name\n * @returns property value\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n get(name) {\n if (this.check(name)) {\n name = encodeURIComponent(name);\n const regExp = SsrCookieService.getCookieRegExp(name);\n const result = regExp.exec((this.documentIsAccessible ? this.document.cookie : this.request?.headers.cookie) ?? '');\n return result[1] ? SsrCookieService.safeDecodeURIComponent(result[1]) : '';\n }\n else {\n return '';\n }\n }\n /**\n * Get all cookies in JSON format\n *\n * @returns all the cookies in json\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n getAll() {\n const cookies = {};\n const cookieString = this.documentIsAccessible ? this.document?.cookie : this.request?.headers.cookie;\n if (cookieString && cookieString !== '') {\n cookieString.split(';').forEach((currentCookie) => {\n const [cookieName, cookieValue] = currentCookie.split('=');\n cookies[SsrCookieService.safeDecodeURIComponent(cookieName.replace(/^ /, ''))] = SsrCookieService.safeDecodeURIComponent(cookieValue);\n });\n }\n return cookies;\n }\n set(name, value, expiresOrOptions, path, domain, secure, sameSite, partitioned) {\n if (!this.documentIsAccessible) {\n return;\n }\n if (typeof expiresOrOptions === 'number' || expiresOrOptions instanceof Date || path || domain || secure || sameSite) {\n const optionsBody = {\n expires: expiresOrOptions,\n path,\n domain,\n secure,\n sameSite: sameSite ? sameSite : 'Lax',\n partitioned,\n };\n this.set(name, value, optionsBody);\n return;\n }\n let cookieString = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';\n const options = expiresOrOptions ? expiresOrOptions : {};\n if (options.expires) {\n if (typeof options.expires === 'number') {\n const dateExpires = new Date(new Date().getTime() + options.expires * 1000 * 60 * 60 * 24);\n cookieString += 'expires=' + dateExpires.toUTCString() + ';';\n }\n else {\n cookieString += 'expires=' + options.expires.toUTCString() + ';';\n }\n }\n if (options.path) {\n cookieString += 'path=' + options.path + ';';\n }\n if (options.domain) {\n cookieString += 'domain=' + options.domain + ';';\n }\n if (options.secure === false && options.sameSite === 'None') {\n options.secure = true;\n console.warn(`[ngx-cookie-service] Cookie ${name} was forced with secure flag because sameSite=None.` +\n `More details : https://github.com/stevermeister/ngx-cookie-service/issues/86#issuecomment-597720130`);\n }\n if (options.secure) {\n cookieString += 'secure;';\n }\n if (!options.sameSite) {\n options.sameSite = 'Lax';\n }\n cookieString += 'sameSite=' + options.sameSite + ';';\n if (options.partitioned) {\n cookieString += 'Partitioned;';\n }\n this.document.cookie = cookieString;\n }\n /**\n * Delete cookie by name\n *\n * @param name Cookie name\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Cookie secure flag\n * @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n delete(name, path, domain, secure, sameSite = 'Lax') {\n if (!this.documentIsAccessible) {\n return;\n }\n const expiresDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');\n this.set(name, '', { expires: expiresDate, path, domain, secure, sameSite });\n }\n /**\n * Delete all cookies\n *\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Is the Cookie secure\n * @param sameSite Is the cookie same site\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n deleteAll(path, domain, secure, sameSite = 'Lax') {\n if (!this.documentIsAccessible) {\n return;\n }\n const cookies = this.getAll();\n for (const cookieName in cookies) {\n if (cookies.hasOwnProperty(cookieName)) {\n this.delete(cookieName, path, domain, secure, sameSite);\n }\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [REQUEST]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWNvb2tpZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvc3NyLWNvb2tpZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBVSxTQUFTLENBQUMsQ0FBQztBQUs5RCxNQUFNLE9BQU8sZ0JBQWdCO0lBS0M7SUFFRztJQUNRO0lBUHRCLG9CQUFvQixDQUFVO0lBQy9DLE1BQU0sQ0FBRSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRXhCLFlBQzRCLFFBQWtCO0lBQzVDLCtEQUErRDtJQUNsQyxVQUFlLEVBQ1AsT0FBZ0I7UUFIM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUVmLGVBQVUsR0FBVixVQUFVLENBQUs7UUFDUCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBRXJELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztJQUM1RyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQVk7UUFDakMsTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FB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Q0FBQztJQUNILENBQUM7dUdBaFNVLGdCQUFnQixrQkFLakIsUUFBUSxhQUVSLFdBQVcsYUFDQyxPQUFPOzJHQVJsQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUVmLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy8gRGVmaW5lIHRoZSBgUmVxdWVzdGAgdG9rZW5cbmV4cG9ydCBjb25zdCBSRVFVRVNUID0gbmV3IEluamVjdGlvblRva2VuPFJlcXVlc3Q+KCdSRVFVRVNUJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTc3JDb29raWVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudElzQWNjZXNzaWJsZTogYm9vbGVhbjtcbiAgc3RhdGljICBpbml0aWFsVXJsID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgLy8gR2V0IHRoZSBgUExBVEZPUk1fSURgIHNvIHdlIGNhbiBjaGVjayBpZiB3ZSdyZSBpbiBhIGJyb3dzZXIuXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSRVFVRVNUKSBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3RcbiAgKSB7XG4gICAgdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gICAgU3NyQ29va2llU2VydmljZS5pbml0aWFsVXJsID0gdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA6IHRoaXMucmVxdWVzdD8udXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWUgUmVndWxhciBFeHByZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIENvb2tpZSBuYW1lXG4gICAqIEByZXR1cm5zIHByb3BlcnR5IFJlZ0V4cFxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29va2llUmVnRXhwKG5hbWU6IHN0cmluZyk6IFJlZ0V4cCB7XG4gICAgY29uc3QgZXNjYXBlZE5hbWU6IHN0cmluZyA9IG5hbWUucmVwbGFjZSgvKFtcXFtcXF1cXHtcXH1cXChcXClcXHxcXD1cXDtcXCtcXD9cXCxcXC5cXCpcXF5cXCRdKS9naSwgJ1xcXFwkMScpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJyg/Ol4nICsgZXNjYXBlZE5hbWUgKyAnfDtcXFxccyonICsgZXNjYXBlZE5hbWUgKyAnKT0oLio/KSg/Ojt8JCknLCAnZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVuZW5jb2RlZCB2ZXJzaW9uIG9mIGFuIGVuY29kZWQgY29tcG9uZW50IG9mIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpLlxuICAgKlxuICAgKiBAcGFyYW0gZW5jb2RlZFVSSUNvbXBvbmVudCBBIHZhbHVlIHJlcHJlc2VudGluZyBhbiBlbmNvZGVkIFVSSSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB1bmVuY29kZWQgdmVyc2lvbiBvZiBhbiBlbmNvZGVkIGNvbXBvbmVudCBvZiBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKS5cbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc3RhdGljIHNhZmVEZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZFVSSUNvbXBvbmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVkVVJJQ29tcG9uZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHByb2JhYmx5IGl0IGlzIG5vdCB1cmkgZW5jb2RlZC4gcmV0dXJuIGFzIGlzXG4gICAgICByZXR1cm4gZW5jb2RlZFVSSUNvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgRG9jdW1lbnR9IGlzIGFjY2Vzc2libGUsIG90aGVyd2lzZSByZXR1cm4gYGZhbHNlYFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBDb29raWUgbmFtZVxuICAgKiBAcmV0dXJucyBib29sZWFuIC0gd2hldGhlciBjb29raWUgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHNcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgY2hlY2sobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgICBjb25zdCByZWdFeHA6IFJlZ0V4cCA9IFNzckNvb2tpZVNlcnZpY2UuZ2V0Q29va2llUmVnRXhwKG5hbWUpO1xuICAgIHJldHVybiByZWdFeHAudGVzdCgodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQuY29va2llICA6IHRoaXMucmVxdWVzdD8uaGVhZGVycy5jb29raWUpID8/ICcnKTtcbiAgfVxuICBpc0RvY3VtZW50SXNBY2Nlc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlIDtcbiAgfVxuIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA6IHRoaXMucmVxdWVzdD8udXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWVzIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgQ29va2llIG5hbWVcbiAgICogQHJldHVybnMgcHJvcGVydHkgdmFsdWVcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2hlY2sobmFtZSkpIHtcbiAgICAgIG5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XG5cbiAgICAgIGNvbnN0IHJlZ0V4cDogUmVnRXhwID0gU3NyQ29va2llU2VydmljZS5nZXRDb29raWVSZWdFeHAobmFtZSk7XG4gICAgICBjb25zdCByZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheSB8YW55PSByZWdFeHAuZXhlYygodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQuY29va2llIDogdGhpcy5yZXF1ZXN0Py5oZWFkZXJzLmNvb2tpZSkgPz8gJycpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0WzFdID8gU3NyQ29va2llU2VydmljZS5zYWZlRGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdFsxXSkgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGNvb2tpZXMgaW4gSlNPTiBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybnMgYWxsIHRoZSBjb29raWVzIGluIGpzb25cbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGNvb2tpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdCBjb29raWVTdHJpbmc6IGFueSA9IHRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUgPyB0aGlzLmRvY3VtZW50Py5jb29raWUgOiB0aGlzLnJlcXVlc3Q/LmhlYWRlcnMuY29va2llO1xuXG4gICAgaWYgKGNvb2tpZVN0cmluZyAmJiBjb29raWVTdHJpbmcgIT09ICcnKSB7XG4gICAgICBjb29raWVTdHJpbmcuc3BsaXQoJzsnKS5mb3JFYWNoKChjdXJyZW50Q29va2llOmFueSkgPT4ge1xuICAgICAgICBjb25zdCBbY29va2llTmFtZSwgY29va2llVmFsdWVdID0gY3VycmVudENvb2tpZS5zcGxpdCgnPScpO1xuICAgICAgICBjb29raWVzW1NzckNvb2tpZVNlcnZpY2Uuc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWVOYW1lLnJlcGxhY2UoL14gLywgJycpKV0gPSBTc3JDb29raWVTZXJ2aWNlLnNhZmVEZWNvZGVVUklDb21wb25lbnQoY29va2llVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvb2tpZSBiYXNlZCBvbiBwcm92aWRlZCBpbmZvcm1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAgICAgQ29va2llIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlICAgIENvb2tpZSB2YWx1ZVxuICAgKiBAcGFyYW0gZXhwaXJlcyAgTnVtYmVyIG9mIGRheXMgdW50aWwgdGhlIGNvb2tpZXMgZXhwaXJlcyBvciBhbiBhY3R1YWwgYERhdGVgXG4gICAqIEBwYXJhbSBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBAcGFyYW0gZG9tYWluICAgQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlICAgU2VjdXJlIGZsYWdcbiAgICogQHBhcmFtIHNhbWVTaXRlIE9XQVNQIHNhbWUgc2l0ZSB0b2tlbiBgTGF4YCwgYE5vbmVgLCBvciBgU3RyaWN0YC4gRGVmYXVsdHMgdG8gYExheGBcbiAgICogQHBhcmFtIHBhcnRpdGlvbmVkIFBhcnRpdGlvbmVkIGZsYWdcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc2V0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGV4cGlyZXM/OiBudW1iZXIgfCBEYXRlLFxuICAgIHBhdGg/OiBzdHJpbmcsXG4gICAgZG9tYWluPzogc3RyaW5nLFxuICAgIHNlY3VyZT86IGJvb2xlYW4sXG4gICAgc2FtZVNpdGU/OiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnLFxuICAgIHBhcnRpdGlvbmVkPzogYm9vbGVhblxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgY29va2llIGJhc2VkIG9uIHByb3ZpZGVkIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIENvb2tpZSdzIHBhcmFtZXRlcnM6XG4gICAqIDxwcmU+XG4gICAqIGV4cGlyZXMgIE51bWJlciBvZiBkYXlzIHVudGlsIHRoZSBjb29raWVzIGV4cGlyZXMgb3IgYW4gYWN0dWFsIGBEYXRlYFxuICAgKiBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBkb21haW4gICBDb29raWUgZG9tYWluXG4gICAqIHNlY3VyZSBDb29raWUgc2VjdXJlIGZsYWdcbiAgICogc2FtZVNpdGUgT1dBU1Agc2FtZSBzaXRlIHRva2VuIGBMYXhgLCBgTm9uZWAsIG9yIGBTdHJpY3RgLiBEZWZhdWx0cyB0byBgTGF4YFxuICAgKiA8L3ByZT5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICAgIENvb2tpZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSAgICBDb29raWUgdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnMgIEJvZHkgd2l0aCBjb29raWUncyBwYXJhbXNcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc2V0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBleHBpcmVzPzogbnVtYmVyIHwgRGF0ZTtcbiAgICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgICBkb21haW4/OiBzdHJpbmc7XG4gICAgICBzZWN1cmU/OiBib29sZWFuO1xuICAgICAgc2FtZVNpdGU/OiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnO1xuICAgICAgcGFydGl0aW9uZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZDtcblxuICBzZXQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZXhwaXJlc09yT3B0aW9ucz86IG51bWJlciB8IERhdGUgfCBhbnksXG4gICAgcGF0aD86IHN0cmluZyxcbiAgICBkb21haW4/OiBzdHJpbmcsXG4gICAgc2VjdXJlPzogYm9vbGVhbixcbiAgICBzYW1lU2l0ZT86ICdMYXgnIHwgJ05vbmUnIHwgJ1N0cmljdCcsXG4gICAgcGFydGl0aW9uZWQ/OiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwaXJlc09yT3B0aW9ucyA9PT0gJ251bWJlcicgfHwgZXhwaXJlc09yT3B0aW9ucyBpbnN0YW5jZW9mIERhdGUgfHwgcGF0aCB8fCBkb21haW4gfHwgc2VjdXJlIHx8IHNhbWVTaXRlKSB7XG4gICAgICBjb25zdCBvcHRpb25zQm9keSA9IHtcbiAgICAgICAgZXhwaXJlczogZXhwaXJlc09yT3B0aW9ucyxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBzZWN1cmUsXG4gICAgICAgIHNhbWVTaXRlOiBzYW1lU2l0ZSA/IHNhbWVTaXRlIDogJ0xheCcsXG4gICAgICAgIHBhcnRpdGlvbmVkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXQobmFtZSwgdmFsdWUsIG9wdGlvbnNCb2R5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29va2llU3RyaW5nOiBzdHJpbmcgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgJzsnO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGV4cGlyZXNPck9wdGlvbnMgPyBleHBpcmVzT3JPcHRpb25zIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5leHBpcmVzKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgZGF0ZUV4cGlyZXM6IERhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG9wdGlvbnMuZXhwaXJlcyAqIDEwMDAgKiA2MCAqIDYwICogMjQpO1xuXG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgZGF0ZUV4cGlyZXMudG9VVENTdHJpbmcoKSArICc7JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgb3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgKyAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucGF0aCkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdwYXRoPScgKyBvcHRpb25zLnBhdGggKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZG9tYWluKSB7XG4gICAgICBjb29raWVTdHJpbmcgKz0gJ2RvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2VjdXJlID09PSBmYWxzZSAmJiBvcHRpb25zLnNhbWVTaXRlID09PSAnTm9uZScpIHtcbiAgICAgIG9wdGlvbnMuc2VjdXJlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtuZ3gtY29va2llLXNlcnZpY2VdIENvb2tpZSAke25hbWV9IHdhcyBmb3JjZWQgd2l0aCBzZWN1cmUgZmxhZyBiZWNhdXNlIHNhbWVTaXRlPU5vbmUuYCArXG4gICAgICAgICAgYE1vcmUgZGV0YWlscyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGV2ZXJtZWlzdGVyL25neC1jb29raWUtc2VydmljZS9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTU5NzcyMDEzMGBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNlY3VyZSkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdzZWN1cmU7JztcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuc2FtZVNpdGUpIHtcbiAgICAgIG9wdGlvbnMuc2FtZVNpdGUgPSAnTGF4JztcbiAgICB9XG5cbiAgICBjb29raWVTdHJpbmcgKz0gJ3NhbWVTaXRlPScgKyBvcHRpb25zLnNhbWVTaXRlICsgJzsnO1xuXG4gICAgaWYgKG9wdGlvbnMucGFydGl0aW9uZWQpIHtcbiAgICAgIGNvb2tpZVN0cmluZyArPSAnUGFydGl0aW9uZWQ7JztcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgY29va2llIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICBDb29raWUgbmFtZVxuICAgKiBAcGFyYW0gcGF0aCAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIENvb2tpZSBzZWN1cmUgZmxhZ1xuICAgKiBAcGFyYW0gc2FtZVNpdGUgQ29va2llIHNhbWVTaXRlIGZsYWcgLSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvU2V0LUNvb2tpZS9TYW1lU2l0ZVxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBkZWxldGUobmFtZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcsIHNlY3VyZT86IGJvb2xlYW4sIHNhbWVTaXRlOiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnID0gJ0xheCcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZSgnVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVQnKTtcbiAgICB0aGlzLnNldChuYW1lLCAnJywgeyBleHBpcmVzOiBleHBpcmVzRGF0ZSwgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgY29va2llc1xuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIElzIHRoZSBDb29raWUgc2VjdXJlXG4gICAqIEBwYXJhbSBzYW1lU2l0ZSBJcyB0aGUgY29va2llIHNhbWUgc2l0ZVxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBkZWxldGVBbGwocGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nLCBzZWN1cmU/OiBib29sZWFuLCBzYW1lU2l0ZTogJ0xheCcgfCAnTm9uZScgfCAnU3RyaWN0JyA9ICdMYXgnKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29va2llczogYW55ID0gdGhpcy5nZXRBbGwoKTtcblxuICAgIGZvciAoY29uc3QgY29va2llTmFtZSBpbiBjb29raWVzKSB7XG4gICAgICBpZiAoY29va2llcy5oYXNPd25Qcm9wZXJ0eShjb29raWVOYW1lKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZShjb29raWVOYW1lLCBwYXRoLCBkb21haW4sIHNlY3VyZSwgc2FtZVNpdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport Swal from 'sweetalert2';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ngx-translate/core\";\nexport class SwalService {\n translate;\n defaultClass = {\n container: 'swal2-container'\n };\n constructor(translate) {\n this.translate = translate;\n }\n t(key) {\n return this.translate.instant(key);\n }\n /** رسالة تأكيد */\n confirm(title = this.t('Confirm.Title'), text = this.t('Confirm.Text'), confirmButtonText = this.t('Confirm.Yes'), cancelButtonText = this.t('Confirm.Cancel')) {\n return Swal.fire({\n icon: 'warning',\n title,\n text,\n showCancelButton: true,\n confirmButtonText,\n cancelButtonText,\n customClass: this.defaultClass\n });\n }\n /** رسالة نجاح */\n success(title, text, timer = 2000) {\n return Swal.fire({\n icon: 'success',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n timer,\n showConfirmButton: false,\n customClass: this.defaultClass\n });\n }\n /** رسالة خطأ */\n error(title, text, footer) {\n return Swal.fire({\n icon: 'error',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n footer: footer ? this.t(footer) : undefined,\n customClass: this.defaultClass\n });\n }\n /** رسالة معلومات */\n info(title, text) {\n return Swal.fire({\n icon: 'info',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n customClass: this.defaultClass\n });\n }\n /** أي خيارات مخصصة */\n alert(options) {\n const translated = {\n ...options,\n title: options.title ? this.t(options.title) : undefined,\n text: options.text ? this.t(options.text) : undefined,\n footer: options.footer ? this.t(options.footer) : undefined,\n customClass: this.defaultClass\n };\n return Swal.fire(translated);\n }\n /** Toast */\n toast(title, icon = 'info', position = 'top-end', timer = 3000) {\n const Toast = Swal.mixin({\n toast: true,\n position,\n timer,\n showConfirmButton: false,\n customClass: this.defaultClass\n });\n Toast.fire({ icon, title: this.t(title) });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.TranslateService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dhbFNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL1N3YWxTZXJ2aWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLElBSU4sTUFBTSxhQUFhLENBQUM7OztBQUdyQixNQUFNLE9BQU8sV0FBVztJQUtGO0lBSlosWUFBWSxHQUFHO1FBQ3JCLFNBQVMsRUFBRSxpQkFBaUI7S0FDN0IsQ0FBQztJQUVGLFlBQW9CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUcsQ0FBQztJQUUzQyxDQUFDLENBQUMsR0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUNMLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUMvQixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFDN0IsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFDekMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUUzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUs7WUFDTCxJQUFJO1lBQ0osZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJB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O0lBQzdDLENBQUM7dUdBdEdVLFdBQVc7MkdBQVgsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCBTd2FsLCB7XG4gIFN3ZWV0QWxlcnRPcHRpb25zLFxuICBTd2VldEFsZXJ0UmVzdWx0LFxuICBTd2VldEFsZXJ0SWNvblxufSBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3dhbFNlcnZpY2Uge1xuICBwcml2YXRlIGRlZmF1bHRDbGFzcyA9IHtcbiAgICBjb250YWluZXI6ICdzd2FsMi1jb250YWluZXInXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgcHJpdmF0ZSB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChrZXkpO1xuICB9XG5cbiAgLyoqINix2LPYp9mE2Kkg2KrYo9mD2YrYryAqL1xuICBjb25maXJtKFxuICAgIHRpdGxlID0gdGhpcy50KCdDb25maXJtLlRpdGxlJyksXG4gICAgdGV4dCA9IHRoaXMudCgnQ29uZmlybS5UZXh0JyksXG4gICAgY29uZmlybUJ1dHRvblRleHQgPSB0aGlzLnQoJ0NvbmZpcm0uWWVzJyksXG4gICAgY2FuY2VsQnV0dG9uVGV4dCA9IHRoaXMudCgnQ29uZmlybS5DYW5jZWwnKVxuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICd3YXJuaW5nJyxcbiAgICAgIHRpdGxlLFxuICAgICAgdGV4dCxcbiAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICBjb25maXJtQnV0dG9uVGV4dCxcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQsXG4gICAgICBjdXN0b21DbGFzczogdGhpcy5kZWZhdWx0Q2xhc3NcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiDYsdiz2KfZhNipINmG2KzYp9itICovXG4gIHN1Y2Nlc3MoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIHRpbWVyID0gMjAwMFxuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiB0aGlzLnQodGl0bGUpLFxuICAgICAgdGV4dDogdGV4dCA/IHRoaXMudCh0ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVyLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gIH1cblxuICAvKiog2LHYs9in2YTYqSDYrti32KMgKi9cbiAgZXJyb3IoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIGZvb3Rlcj86IHN0cmluZ1xuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdlcnJvcicsXG4gICAgICB0aXRsZTogdGhpcy50KHRpdGxlKSxcbiAgICAgIHRleHQ6IHRleHQgPyB0aGlzLnQodGV4dCkgOiB1bmRlZmluZWQsXG4gICAgICBmb290ZXI6IGZvb3RlciA/IHRoaXMudChmb290ZXIpIDogdW5kZWZpbmVkLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gIH1cblxuICAvKiog2LHYs9in2YTYqSDZhdi52YTZiNmF2KfYqiAqL1xuICBpbmZvKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdGV4dD86IHN0cmluZ1xuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdpbmZvJyxcbiAgICAgIHRpdGxlOiB0aGlzLnQodGl0bGUpLFxuICAgICAgdGV4dDogdGV4dCA/IHRoaXMudCh0ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICAgIGN1c3RvbUNsYXNzOiB0aGlzLmRlZmF1bHRDbGFzc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqINij2Yog2K7Zitin2LHYp9iqINmF2K7Ytdi12KkgKi9cbiAgYWxlcnQoXG4gICAgb3B0aW9uczogU3dlZXRBbGVydE9wdGlvbnNcbiAgKTogUHJvbWlzZTxTd2VldEFsZXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlZDogU3dlZXRBbGVydE9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUgPyB0aGlzLnQob3B0aW9ucy50aXRsZSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgdGV4dDogb3B0aW9ucy50ZXh0ID8gdGhpcy50KG9wdGlvbnMudGV4dCBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgZm9vdGVyOiBvcHRpb25zLmZvb3RlciA/IHRoaXMudChvcHRpb25zLmZvb3RlciBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfTtcbiAgICByZXR1cm4gU3dhbC5maXJlKHRyYW5zbGF0ZWQpO1xuICB9XG5cbiAgLyoqIFRvYXN0ICovXG4gIHRvYXN0KFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgaWNvbjogU3dlZXRBbGVydEljb24gPSAnaW5mbycsXG4gICAgcG9zaXRpb246IFN3ZWV0QWxlcnRPcHRpb25zWydwb3NpdGlvbiddID0gJ3RvcC1lbmQnLFxuICAgIHRpbWVyID0gMzAwMFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBUb2FzdCA9IFN3YWwubWl4aW4oe1xuICAgICAgdG9hc3Q6IHRydWUsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIHRpbWVyLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gICAgVG9hc3QuZmlyZSh7IGljb24sIHRpdGxlOiB0aGlzLnQodGl0bGUpIH0pO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { RestService } from './rest.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nexport class ApplicationLocalizationService {\n restService;\n apiName = 'framework';\n get = (input, config) => this.restService.request({\n method: 'GET',\n url: '/api/asp-net-core/framework-application-localizations/get',\n params: { cultureName: input.cultureName, onlyDynamics: input.onlyDynamics },\n }, { apiName: this.apiName, ...config });\n constructor(restService) {\n this.restService = restService;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationLocalizationService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationLocalizationService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationLocalizationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RestService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9hcHBsaWNhdGlvbi1sb2NhbGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTTdDLE1BQU0sT0FBTyw4QkFBOEI7SUFZckI7SUFYcEIsT0FBTyxHQUFHLFdBQVcsQ0FBQztJQUd0QixHQUFHLEdBQUcsQ0FBQyxLQUF3QyxFQUFFLE1BQTZCLEVBQUUsRUFBRSxDQUNoRixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBa0M7UUFDeEQsTUFBTSxFQUFFLEtBQUs7UUFDYixHQUFHLEVBQUUsMkRBQTJEO1FBQ2hFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFO0tBQzdFLEVBQ0QsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFdkMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBRyxDQUFDO3VHQVpyQyw4QkFBOEI7MkdBQTlCLDhCQUE4QixjQUY3QixNQUFNOzsyRkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4vcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uRHRvLCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlcXVlc3REdG8sIFJlc3QgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uU2VydmljZSB7XG4gIGFwaU5hbWUgPSAnZnJhbWV3b3JrJztcblxuXG4gIGdldCA9IChpbnB1dDogQXBwbGljYXRpb25Mb2NhbGl6YXRpb25SZXF1ZXN0RHRvLCBjb25maWc/OiBQYXJ0aWFsPFJlc3QuQ29uZmlnPikgPT5cbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkR0bz4oe1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHVybDogJy9hcGkvYXNwLW5ldC1jb3JlL2ZyYW1ld29yay1hcHBsaWNhdGlvbi1sb2NhbGl6YXRpb25zL2dldCcsXG4gICAgICBwYXJhbXM6IHsgY3VsdHVyZU5hbWU6IGlucHV0LmN1bHR1cmVOYW1lLCBvbmx5RHluYW1pY3M6IGlucHV0Lm9ubHlEeW5hbWljcyB9LFxuICAgIH0sXG4gICAgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUsLi4uY29uZmlnIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlKSB7fVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { RestService } from './rest.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nexport class ApplicationConfigurationService {\n restService;\n // apiName = 'framework';\n apiName = '';\n get = (options, config) => this.restService.request({\n method: 'GET',\n url: '/api/framework/application-configuration',\n params: { includeLocalizationResources: options.includeLocalizationResources },\n }, { apiName: this.apiName, ...config });\n constructor(restService) {\n this.restService = restService;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationConfigurationService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationConfigurationService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationConfigurationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RestService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvYXBwbGljYXRpb24tY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFNN0MsTUFBTSxPQUFPLCtCQUErQjtJQWF0QjtJQVpwQix5QkFBeUI7SUFDekIsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUViLEdBQUcsR0FBRyxDQUFDLE9BQStDLEVBQUUsTUFBNkIsRUFBRSxFQUFFLENBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFtQztRQUN6RCxNQUFNLEVBQUUsS0FBSztRQUNYLEdBQUcsRUFBRSwwQ0FBMEM7UUFDakQsTUFBTSxFQUFFLEVBQUUsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLDRCQUE0QixFQUFFO0tBRS9FLEVBQ0MsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFMUMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO3VHQWJ0QywrQkFBK0I7MkdBQS9CLCtCQUErQixjQUY5QixNQUFNOzsyRkFFUCwrQkFBK0I7a0JBSDNDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8sIEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvblJlcXVlc3RPcHRpb25zLCBSZXN0IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25Db25maWd1cmF0aW9uU2VydmljZSB7XHJcbiAgLy8gYXBpTmFtZSA9ICdmcmFtZXdvcmsnO1xyXG4gIGFwaU5hbWUgPSAnJztcclxuXHJcbiAgZ2V0ID0gKG9wdGlvbnM6IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvblJlcXVlc3RPcHRpb25zLCBjb25maWc/OiBQYXJ0aWFsPFJlc3QuQ29uZmlnPikgPT5cclxuICAgIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0bz4oe1xyXG4gICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHVybDogJy9hcGkvZnJhbWV3b3JrL2FwcGxpY2F0aW9uLWNvbmZpZ3VyYXRpb24nLFxyXG4gICAgICBwYXJhbXM6IHsgaW5jbHVkZUxvY2FsaXphdGlvblJlc291cmNlczogb3B0aW9ucy5pbmNsdWRlTG9jYWxpemF0aW9uUmVzb3VyY2VzIH0sXHJcblxyXG4gICAgfSxcclxuICAgICAgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUsIC4uLmNvbmZpZyB9KTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UpIHsgfVxyXG59XHJcbiJdfQ==","import { Inject, Injectable, Optional } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { map, switchMap, take, tap } from 'rxjs/operators';\nimport { ApplicationLocalizationService } from './application-localization.service';\nimport { ApplicationConfigurationService } from './application-configuration.service';\nimport { INCUDE_LOCALIZATION_RESOURCES_TOKEN } from '@elite.framework/ng.core/tokens';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./application-configuration.service\";\nimport * as i2 from \"./application-localization.service\";\nexport class ConfigStateService {\n abpConfigService;\n applicationLocalizationService;\n includeLocalizationResources;\n updateSubject = new Subject();\n store = new InternalStore({});\n uiCultureFromAuthCodeFlow;\n setState(config) {\n this.store.set(config);\n }\n get createOnUpdateStream() {\n return this.store.sliceUpdate;\n }\n constructor(abpConfigService, applicationLocalizationService, includeLocalizationResources) {\n this.abpConfigService = abpConfigService;\n this.applicationLocalizationService = applicationLocalizationService;\n this.includeLocalizationResources = includeLocalizationResources;\n this.initUpdateStream();\n }\n initUpdateStream() {\n this.updateSubject\n .pipe(switchMap(() => this.abpConfigService.get({\n includeLocalizationResources: !!this.includeLocalizationResources,\n })))\n .pipe(switchMap(appState => this.getLocalizationAndCombineWithAppState(appState)))\n .subscribe(res => this.store.set(res));\n }\n getLocalizationAndCombineWithAppState(appState) {\n // debugger\n if (!appState.localization.currentCulture.cultureName) {\n throw new Error('culture name should defined');\n }\n const cultureName = this.uiCultureFromAuthCodeFlow ?? appState.localization.currentCulture.cultureName;\n return this.getlocalizationResource(cultureName).pipe(map(result => ({ ...appState, localization: { ...appState.localization, ...result } })), tap(() => (this.uiCultureFromAuthCodeFlow = undefined)));\n }\n getlocalizationResource(cultureName) {\n return this.applicationLocalizationService.get({\n cultureName: cultureName,\n onlyDynamics: false,\n });\n }\n refreshAppState() {\n this.updateSubject.next();\n return this.createOnUpdateStream(state => state).pipe(take(1));\n }\n refreshLocalization(lang) {\n if (this.includeLocalizationResources) {\n return this.refreshAppState().pipe(map(() => null));\n }\n return this.getlocalizationResource(lang)\n .pipe(tap(result => this.store.patch({ localization: { ...this.store.state.localization, ...result } })))\n .pipe(map(() => { return null; }));\n }\n getOne$(key) {\n return this.store.sliceState(state => state[key]);\n }\n getOne(key) {\n return this.store.state[key];\n }\n getAll$() {\n return this.store.sliceState(state => state);\n }\n getAll() {\n return this.store.state;\n }\n getDeep$(keys) {\n keys = splitKeys(keys);\n return this.store\n .sliceState(state => state)\n .pipe(map(state => {\n return keys.reduce((acc, val) => {\n if (acc) {\n return acc[val];\n }\n return undefined;\n }, state);\n }));\n }\n getDeep(keys) {\n keys = splitKeys(keys);\n return keys.reduce((acc, val) => {\n if (acc) {\n return acc[val];\n }\n return undefined;\n }, this.store.state);\n }\n getFeature(key) {\n return this.store.state.features?.values?.[key];\n }\n getFeature$(key) {\n return this.store.sliceState(state => state.features?.values?.[key]);\n }\n getFeatures(keys) {\n const { features } = this.store.state;\n if (!features)\n return null;\n return keys.reduce((acc, key) => ({ ...acc, [key]: features.values[key] }), {});\n }\n getFeatures$(keys) {\n return this.store.sliceState(({ features }) => {\n if (!features?.values)\n return null;\n return keys.reduce((acc, key) => ({ ...acc, [key]: features.values[key] }), {});\n });\n }\n isFeatureEnabled(key, features) {\n return features.values[key] === 'true';\n }\n getFeatureIsEnabled(key) {\n return this.isFeatureEnabled(key, this.store.state.features);\n }\n getFeatureIsEnabled$(key) {\n return this.store.sliceState(state => this.isFeatureEnabled(key, state.features));\n }\n getSetting(key) {\n return this.store.state.setting?.values?.[key];\n }\n getSetting$(key) {\n return this.store.sliceState(state => state.setting?.values?.[key]);\n }\n getSettings(keyword) {\n const settings = this.store.state.setting?.values || {};\n if (!keyword)\n return settings;\n const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1);\n return keysFound.reduce((acc, key) => {\n acc[key] = settings[key];\n return acc;\n }, {});\n }\n getSettings$(keyword) {\n return this.store\n .sliceState(state => state.setting?.values)\n .pipe(map((settings = {}) => {\n if (!keyword)\n return settings;\n const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1);\n return keysFound.reduce((acc, key) => {\n acc[key] = settings[key];\n return acc;\n }, {});\n }));\n }\n getGlobalFeatures() {\n return this.store.state.globalFeatures;\n }\n getGlobalFeatures$() {\n return this.store.sliceState(state => state.globalFeatures);\n }\n isGlobalFeatureEnabled(key, globalFeatures) {\n const features = globalFeatures.enabledFeatures || [];\n return features.some(f => key === f);\n }\n getGlobalFeatureIsEnabled(key) {\n return this.isGlobalFeatureEnabled(key, this.store.state.globalFeatures);\n }\n getGlobalFeatureIsEnabled$(key) {\n return this.store.sliceState(state => this.isGlobalFeatureEnabled(key, state.globalFeatures));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ConfigStateService, deps: [{ token: i1.ApplicationConfigurationService }, { token: i2.ApplicationLocalizationService }, { token: INCUDE_LOCALIZATION_RESOURCES_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ConfigStateService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ConfigStateService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.ApplicationConfigurationService }, { type: i2.ApplicationLocalizationService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [INCUDE_LOCALIZATION_RESOURCES_TOKEN]\n }] }] });\nfunction splitKeys(keys) {\n if (typeof keys === 'string') {\n keys = keys.split('.');\n }\n if (!Array.isArray(keys)) {\n throw new Error('The argument must be a dot string or an string array.');\n }\n return keys;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9jb25maWctc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR3BGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQUsvRCxNQUFNLE9BQU8sa0JBQWtCO0lBY25CO0lBQ0E7SUFHUztJQWpCWCxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMzQixLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBaUMsQ0FBQyxDQUFDO0lBRXZFLHlCQUF5QixDQUFVO0lBRTFDLFFBQVEsQ0FBQyxNQUFtQztRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsWUFDVSxnQkFBaUQsRUFDakQsOEJBQThELEVBR3JELDRCQUE0QztRQUpyRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlDO1FBQ2pE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QUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFRyYW5zZmVyU3RhdGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25Mb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi1sb2NhbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0bywgQXBwbGljYXRpb25GZWF0dXJlQ29uZmlndXJhdGlvbkR0bywgQXBwbGljYXRpb25HbG9iYWxGZWF0dXJlQ29uZmlndXJhdGlvbkR0byB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vYXBwbGljYXRpb24tY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSU5DVURFX0xPQ0FMSVpBVElPTl9SRVNPVVJDRVNfVE9LRU4gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcclxuaW1wb3J0IHsgSW50ZXJuYWxTdG9yZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS91dGlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlnU3RhdGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIHVwZGF0ZVN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZSh7fSBhcyBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8pO1xyXG5cclxuICBwdWJsaWMgdWlDdWx0dXJlRnJvbUF1dGhDb2RlRmxvdz86IHN0cmluZztcclxuXHJcbiAgc2V0U3RhdGUoY29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8pIHtcclxuICAgIHRoaXMuc3RvcmUuc2V0KGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3JlYXRlT25VcGRhdGVTdHJlYW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVVwZGF0ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFicENvbmZpZ1NlcnZpY2U6IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uTG9jYWxpemF0aW9uU2VydmljZTogQXBwbGljYXRpb25Mb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIEBJbmplY3QoSU5DVURFX0xPQ0FMSVpBVElPTl9SRVNPVVJDRVNfVE9LRU4pXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGVMb2NhbGl6YXRpb25SZXNvdXJjZXM6IGJvb2xlYW4gfCBudWxsLFxyXG4gICkge1xyXG4gICAgdGhpcy5pbml0VXBkYXRlU3RyZWFtKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRVcGRhdGVTdHJlYW0oKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN1YmplY3RcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLmFicENvbmZpZ1NlcnZpY2UuZ2V0KHtcclxuICAgICAgICAgICAgaW5jbHVkZUxvY2FsaXphdGlvblJlc291cmNlczogISF0aGlzLmluY2x1ZGVMb2NhbGl6YXRpb25SZXNvdXJjZXMsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHN3aXRjaE1hcChhcHBTdGF0ZSA9PiB0aGlzLmdldExvY2FsaXphdGlvbkFuZENvbWJpbmVXaXRoQXBwU3RhdGUoYXBwU3RhdGUpKSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4gdGhpcy5zdG9yZS5zZXQocmVzKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExvY2FsaXphdGlvbkFuZENvbWJpbmVXaXRoQXBwU3RhdGUoXHJcbiAgICBhcHBTdGF0ZTogQXBwbGljYXRpb25Db25maWd1cmF0aW9uRHRvLFxyXG4gICk6IE9ic2VydmFibGU8QXBwbGljYXRpb25Db25maWd1cmF0aW9uRHRvPiB7XHJcbiAgICAvLyBkZWJ1Z2dlclxyXG4gICAgaWYgKCFhcHBTdGF0ZS5sb2NhbGl6YXRpb24uY3VycmVudEN1bHR1cmUuY3VsdHVyZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjdWx0dXJlIG5hbWUgc2hvdWxkIGRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdWx0dXJlTmFtZSA9XHJcbiAgICAgIHRoaXMudWlDdWx0dXJlRnJvbUF1dGhDb2RlRmxvdyA/PyBhcHBTdGF0ZS5sb2NhbGl6YXRpb24uY3VycmVudEN1bHR1cmUuY3VsdHVyZU5hbWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0bG9jYWxpemF0aW9uUmVzb3VyY2UoY3VsdHVyZU5hbWUpLnBpcGUoXHJcbiAgICAgIG1hcChyZXN1bHQgPT4gKHsgLi4uYXBwU3RhdGUsIGxvY2FsaXphdGlvbjogeyAuLi5hcHBTdGF0ZS5sb2NhbGl6YXRpb24sIC4uLnJlc3VsdCB9IH0pKSxcclxuICAgICAgdGFwKCgpID0+ICh0aGlzLnVpQ3VsdHVyZUZyb21BdXRoQ29kZUZsb3cgPSB1bmRlZmluZWQpKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldGxvY2FsaXphdGlvblJlc291cmNlKGN1bHR1cmVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTG9jYWxpemF0aW9uU2VydmljZS5nZXQoe1xyXG4gICAgICBjdWx0dXJlTmFtZTogY3VsdHVyZU5hbWUsXHJcbiAgICAgIG9ubHlEeW5hbWljczogZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hBcHBTdGF0ZSgpIHtcclxuICAgIHRoaXMudXBkYXRlU3ViamVjdC5uZXh0KCk7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPblVwZGF0ZVN0cmVhbShzdGF0ZSA9PiBzdGF0ZSkucGlwZSh0YWtlKDEpKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hMb2NhbGl6YXRpb24obGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxudWxsPiB7XHJcbiAgICBpZiAodGhpcy5pbmNsdWRlTG9jYWxpemF0aW9uUmVzb3VyY2VzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hBcHBTdGF0ZSgpLnBpcGUobWFwKCgpID0+IG51bGwgYXMgYW55KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0bG9jYWxpemF0aW9uUmVzb3VyY2UobGFuZylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlc3VsdCA9PlxyXG4gICAgICAgICAgdGhpcy5zdG9yZS5wYXRjaCh7IGxvY2FsaXphdGlvbjogeyAuLi50aGlzLnN0b3JlLnN0YXRlLmxvY2FsaXphdGlvbiwgLi4ucmVzdWx0IH0gfSksXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAucGlwZShtYXAoKCkgPT4ge3JldHVybiBudWxsIGFzIGFueX0pKTtcclxuICB9XHJcblxyXG4gIGdldE9uZSQ8SyBleHRlbmRzIGtleW9mIEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0bz4oa2V5OiBLKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlW2tleV0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0T25lPEsgZXh0ZW5kcyBrZXlvZiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8+KGtleTogSykge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVba2V5XTtcclxuICB9XHJcblxyXG4gIGdldEFsbCQoKTogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8+IHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsKCk6IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0byB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZTtcclxuICB9XHJcblxyXG4gIGdldERlZXAkKGtleXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGtleXMgPSBzcGxpdEtleXMoa2V5cyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVcclxuICAgICAgLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChzdGF0ZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKGtleXMgYXMgc3RyaW5nW10pLnJlZHVjZSgoYWNjOiBhbnksIHZhbCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYWNjKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY1t2YWxdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfSwgc3RhdGUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVlcChrZXlzOiBzdHJpbmdbXSB8IHN0cmluZyk6IGFueSB7XHJcbiAgICBrZXlzID0gc3BsaXRLZXlzKGtleXMpO1xyXG5cclxuICAgIHJldHVybiAoa2V5cyBhcyBzdHJpbmdbXSkucmVkdWNlKChhY2M6IGFueSwgdmFsKSA9PiB7XHJcbiAgICAgIGlmIChhY2MpIHtcclxuICAgICAgICByZXR1cm4gYWNjW3ZhbF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9LCB0aGlzLnN0b3JlLnN0YXRlKTtcclxuICB9XHJcblxyXG4gIGdldEZlYXR1cmUoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLmZlYXR1cmVzPy52YWx1ZXM/LltrZXldO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZSQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUuZmVhdHVyZXM/LnZhbHVlcz8uW2tleV0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZXMoa2V5czogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IHsgZmVhdHVyZXMgfSA9IHRoaXMuc3RvcmUuc3RhdGU7XHJcbiAgICBpZiAoIWZlYXR1cmVzKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiAoeyAuLi5hY2MsIFtrZXldOiBmZWF0dXJlcy52YWx1ZXNba2V5XSB9KSwge30pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZXMkKGtleXM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgYW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKCh7IGZlYXR1cmVzIH0pID0+IHtcclxuICAgICAgaWYgKCFmZWF0dXJlcz8udmFsdWVzKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+ICh7IC4uLmFjYywgW2tleV06IGZlYXR1cmVzLnZhbHVlc1trZXldIH0pLCB7fSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGZWF0dXJlRW5hYmxlZChrZXk6IHN0cmluZywgZmVhdHVyZXM6IEFwcGxpY2F0aW9uRmVhdHVyZUNvbmZpZ3VyYXRpb25EdG8pIHtcclxuICAgIHJldHVybiBmZWF0dXJlcy52YWx1ZXNba2V5XSA9PT0gJ3RydWUnO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZUlzRW5hYmxlZChrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNGZWF0dXJlRW5hYmxlZChrZXksIHRoaXMuc3RvcmUuc3RhdGUuZmVhdHVyZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZUlzRW5hYmxlZCQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gdGhpcy5pc0ZlYXR1cmVFbmFibGVkKGtleSwgc3RhdGUuZmVhdHVyZXMpKTtcclxuICB9XHJcblxyXG4gIGdldFNldHRpbmcoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLnNldHRpbmc/LnZhbHVlcz8uW2tleV07XHJcbiAgfVxyXG5cclxuICBnZXRTZXR0aW5nJChrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VTdGF0ZShzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5nPy52YWx1ZXM/LltrZXldKTtcclxuICB9XHJcblxyXG4gIGdldFNldHRpbmdzKGtleXdvcmQ/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zdG9yZS5zdGF0ZS5zZXR0aW5nPy52YWx1ZXMgfHwge307XHJcblxyXG4gICAgaWYgKCFrZXl3b3JkKSByZXR1cm4gc2V0dGluZ3M7XHJcblxyXG4gICAgY29uc3Qga2V5c0ZvdW5kID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpLmZpbHRlcihrZXkgPT4ga2V5LmluZGV4T2Yoa2V5d29yZCkgPiAtMSk7XHJcblxyXG4gICAgcmV0dXJuIGtleXNGb3VuZC5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIGtleSkgPT4ge1xyXG4gICAgICAgIGFjY1trZXldID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICB9LFxyXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFNldHRpbmdzJChrZXl3b3JkPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZVxyXG4gICAgICAuc2xpY2VTdGF0ZShzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5nPy52YWx1ZXMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoc2V0dGluZ3MgPSB7fSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFrZXl3b3JkKSByZXR1cm4gc2V0dGluZ3M7XHJcblxyXG4gICAgICAgICAgY29uc3Qga2V5c0ZvdW5kID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpLmZpbHRlcihrZXkgPT4ga2V5LmluZGV4T2Yoa2V5d29yZCkgPiAtMSk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGtleXNGb3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChhY2MsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgIGFjY1trZXldID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGdldEdsb2JhbEZlYXR1cmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGUuZ2xvYmFsRmVhdHVyZXM7XHJcbiAgfVxyXG5cclxuICBnZXRHbG9iYWxGZWF0dXJlcyQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlLmdsb2JhbEZlYXR1cmVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNHbG9iYWxGZWF0dXJlRW5hYmxlZChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgZ2xvYmFsRmVhdHVyZXM6IEFwcGxpY2F0aW9uR2xvYmFsRmVhdHVyZUNvbmZpZ3VyYXRpb25EdG8sXHJcbiAgKSB7XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IGdsb2JhbEZlYXR1cmVzLmVuYWJsZWRGZWF0dXJlcyB8fCBbXTtcclxuICAgIHJldHVybiBmZWF0dXJlcy5zb21lKGYgPT4ga2V5ID09PSBmKTtcclxuICB9XHJcblxyXG4gIGdldEdsb2JhbEZlYXR1cmVJc0VuYWJsZWQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmlzR2xvYmFsRmVhdHVyZUVuYWJsZWQoa2V5LCB0aGlzLnN0b3JlLnN0YXRlLmdsb2JhbEZlYXR1cmVzKTtcclxuICB9XHJcblxyXG4gIGdldEdsb2JhbEZlYXR1cmVJc0VuYWJsZWQkKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHRoaXMuaXNHbG9iYWxGZWF0dXJlRW5hYmxlZChrZXksIHN0YXRlLmdsb2JhbEZlYXR1cmVzKSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzcGxpdEtleXMoa2V5czogc3RyaW5nW10gfCBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJykge1xyXG4gICAga2V5cyA9IGtleXMuc3BsaXQoJy4nKTtcclxuICB9XHJcblxyXG4gIGlmICghQXJyYXkuaXNBcnJheShrZXlzKSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhIGRvdCBzdHJpbmcgb3IgYW4gc3RyaW5nIGFycmF5LicpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGtleXM7XHJcbn1cclxuIl19","import { Injectable } from '@angular/core';\nimport { ConfigStateService } from './config-state.service';\nimport { map } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./config-state.service\";\nexport class PermissionCheckerService {\n configState;\n constructor(configState) {\n this.configState = configState;\n }\n isPolicyGranted(key, grantedPolicies) {\n if (!key)\n return true;\n const orRegexp = /\\|\\|/g;\n const andRegexp = /&&/g;\n // TODO: Allow combination of ANDs & ORs\n if (orRegexp.test(key)) {\n const keys = key.split('||').filter(Boolean);\n if (keys.length < 2)\n return false;\n return keys.some(k => this.getPolicy(k.trim(), grantedPolicies));\n }\n else if (andRegexp.test(key)) {\n const keys = key.split('&&').filter(Boolean);\n if (keys.length < 2)\n return false;\n return keys.every(k => this.getPolicy(k.trim(), grantedPolicies));\n }\n return this.getPolicy(key, grantedPolicies);\n }\n getGrantedPolicy$(key) {\n return this.getStream().pipe(map(grantedPolicies => this.isPolicyGranted(key, grantedPolicies)));\n }\n isGrantedAsync(permissionName) {\n if (!permissionName)\n return true;\n return this.getGrantedPolicy$(permissionName);\n }\n isGranted(permissionName) {\n if (!permissionName)\n return true;\n return this.getGrantedPolicy(permissionName);\n }\n getGrantedPolicy(key) {\n const policies = this.getSnapshot();\n return this.isPolicyGranted(key, policies);\n }\n getStream() {\n return this.configState.getAll$().pipe(map(this.mapToPolicies));\n }\n getSnapshot() {\n return this.mapToPolicies(this.configState.getAll());\n }\n mapToPolicies(applicationConfiguration) {\n return applicationConfiguration?.auth?.grantedPolicies || {};\n }\n getPolicy(key, grantedPolicies) {\n return grantedPolicies[key] || false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionCheckerService, deps: [{ token: i1.ConfigStateService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionCheckerService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionCheckerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: i1.ConfigStateService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1jaGVja2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9wZXJtaXNzaW9uLWNoZWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQU0zQixNQUFNLE9BQU8sd0JBQXdCO0lBRXZCO0lBRFosWUFDWSxXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFFekMsQ0FBQztJQUVVLGVBQWUsQ0FBQyxHQUF1QixFQUFFLGVBQXdDO1FBQzVGLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFdEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV4Qix3Q0FBd0M7UUFDeEMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0MsaUJBQWlCLENBQUMsR0FBVztRQUM3QixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQzFCLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQ25FLENBQUM7SUFDSixDQUFDO0lBQ0QsY0FBYyxDQUFDLGNBQTBCO1FBQ3JDLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNMLFNBQVMsQ0FBQyxjQUEwQjtRQUM5QixJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDSCxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ1UsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRVMsV0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFHUyxhQUFhLENBQUMsd0JBQXFEO1FBQzNFLE9BQU8sd0JBQXdCLEVBQUUsSUFBSSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVTLFNBQVMsQ0FBQyxHQUFXLEVBQUUsZUFBd0M7UUFDdkUsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3ZDLENBQUM7dUdBN0RVLHdCQUF3QjsyR0FBeEIsd0JBQXdCLGNBRnJCLE1BQU07OzJGQUVULHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Db25maWd1cmF0aW9uRHRvIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkNoZWNrZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2VcblxuXHQpIHt9XG5cbiAgICAgcHJvdGVjdGVkIGlzUG9saWN5R3JhbnRlZChrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgZ3JhbnRlZFBvbGljaWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikge1xuICAgIGlmICgha2V5KSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IG9yUmVnZXhwID0gL1xcfFxcfC9nO1xuICAgIGNvbnN0IGFuZFJlZ2V4cCA9IC8mJi9nO1xuXG4gICAgLy8gVE9ETzogQWxsb3cgY29tYmluYXRpb24gb2YgQU5EcyAmIE9Sc1xuICAgIGlmIChvclJlZ2V4cC50ZXN0KGtleSkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJ3x8JykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBrZXlzLnNvbWUoayA9PiB0aGlzLmdldFBvbGljeShrLnRyaW0oKSwgZ3JhbnRlZFBvbGljaWVzKSk7XG4gICAgfSBlbHNlIGlmIChhbmRSZWdleHAudGVzdChrZXkpKSB7XG4gICAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcmJicpLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgaWYgKGtleXMubGVuZ3RoIDwgMikgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4ga2V5cy5ldmVyeShrID0+IHRoaXMuZ2V0UG9saWN5KGsudHJpbSgpLCBncmFudGVkUG9saWNpZXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRQb2xpY3koa2V5LCBncmFudGVkUG9saWNpZXMpO1xuICB9XG4gICAgZ2V0R3JhbnRlZFBvbGljeSQoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJlYW0oKS5waXBlKFxuICAgICAgbWFwKGdyYW50ZWRQb2xpY2llcyA9PiB0aGlzLmlzUG9saWN5R3JhbnRlZChrZXksIGdyYW50ZWRQb2xpY2llcykpLFxuICAgICk7XG4gIH1cbiAgaXNHcmFudGVkQXN5bmMocGVybWlzc2lvbk5hbWU6IHN0cmluZ3xhbnkpe1xuICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEdyYW50ZWRQb2xpY3kkKHBlcm1pc3Npb25OYW1lKTtcbiAgICB9XG5pc0dyYW50ZWQocGVybWlzc2lvbk5hbWU6IHN0cmluZ3xhbnkpIDogYm9vbGVhbiB7XG4gICAgICBpZiAoIXBlcm1pc3Npb25OYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R3JhbnRlZFBvbGljeShwZXJtaXNzaW9uTmFtZSk7XG4gICAgfVxuICBnZXRHcmFudGVkUG9saWN5KGtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcG9saWNpZXMgPSB0aGlzLmdldFNuYXBzaG90KCk7XG4gICAgcmV0dXJuIHRoaXMuaXNQb2xpY3lHcmFudGVkKGtleSwgcG9saWNpZXMpO1xuICB9XG4gICBwcm90ZWN0ZWQgZ2V0U3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldEFsbCQoKS5waXBlKG1hcCh0aGlzLm1hcFRvUG9saWNpZXMpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTbmFwc2hvdCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBUb1BvbGljaWVzKHRoaXMuY29uZmlnU3RhdGUuZ2V0QWxsKCkpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgbWFwVG9Qb2xpY2llcyhhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb246IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0bykge1xuICAgIHJldHVybiBhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24/LmF1dGg/LmdyYW50ZWRQb2xpY2llcyB8fCB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQb2xpY3koa2V5OiBzdHJpbmcsIGdyYW50ZWRQb2xpY2llczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcbiAgICByZXR1cm4gZ3JhbnRlZFBvbGljaWVzW2tleV0gfHwgZmFsc2U7XG4gIH1cblxufVxuIl19","import { inject, Injectable } from '@angular/core';\nimport { Router, RouterStateSnapshot } from '@angular/router';\nimport { DEFAULT_REDIRECT_KEY } from '@elite.framework/ng.core/models';\nimport { isFunction, isPlainObject, transformStringToArray } from '@elite.framework/ng.core/utils';\nimport { PermissionCheckerService } from './permission-checker.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./permission-checker.service\";\nimport * as i2 from \"@angular/router\";\nexport const ngxPermissionsGuard = (route, state) => {\n const guard = inject(NgxPermissionsGuard);\n if (state instanceof RouterStateSnapshot) {\n return guard.hasPermissions(route, state);\n }\n return guard.hasPermissions(route);\n};\nexport class NgxPermissionsGuard {\n permissions;\n router;\n constructor(permissions, router) {\n this.permissions = permissions;\n this.router = router;\n }\n canActivate(route, state) {\n return this.hasPermissions(route, state);\n }\n canActivateChild(route, state) {\n return this.hasPermissions(route, state);\n }\n canLoad(route) {\n return this.hasPermissions(route);\n }\n canMatch(route) {\n return this.hasPermissions(route);\n }\n async hasPermissions(route, state) {\n const data = route.data?.['permissions'];\n const only = [];\n const except = [];\n if (data?.only) {\n if (isFunction(data.only)) {\n const result = data.only(route, state);\n only.push(...transformStringToArray(result));\n }\n else {\n only.push(...transformStringToArray(data.only));\n }\n }\n if (data?.except) {\n if (isFunction(data.except)) {\n const result = data.except(route, state);\n except.push(...transformStringToArray(result));\n }\n else {\n except.push(...transformStringToArray(data.except));\n }\n }\n const permissions = {\n only,\n except,\n redirectTo: data?.redirectTo\n };\n // --- rest of the guard logic ---\n // EXCEPT check\n if (permissions.except?.length) {\n for (const perm of permissions.except) {\n if (await this.permissions.isGranted(perm)) {\n this.handleRedirect(permissions, perm, route, state);\n return false;\n }\n }\n }\n // ONLY check\n if (permissions.only?.length) {\n for (const perm of permissions.only) {\n if (await this.permissions.isGrantedAsync(perm)) {\n return true;\n }\n }\n this.handleRedirect(permissions, permissions.only[0], route, state);\n return false;\n }\n return true;\n }\n handleRedirect(permissions, failedPermission, route, state) {\n const redirectTo = permissions.redirectTo;\n if (!redirectTo)\n return;\n // If redirectTo is a function\n const resolvedRedirect = isFunction(redirectTo)\n ? redirectTo(failedPermission, route, state)\n : redirectTo;\n if (typeof resolvedRedirect === 'string') {\n this.router.navigate([resolvedRedirect]); // wrap string in array\n }\n else if (Array.isArray(resolvedRedirect)) {\n this.router.navigate(resolvedRedirect); // array is fine\n }\n else if (isPlainObject(resolvedRedirect)) {\n // Object: check for failedPermission key first\n const target = resolvedRedirect[failedPermission] ?? resolvedRedirect[DEFAULT_REDIRECT_KEY];\n if (target) {\n if (typeof target === 'string') {\n this.router.navigate([target]);\n }\n else if (Array.isArray(target)) {\n this.router.navigate(target);\n }\n else if (isFunction(target)) {\n this.router.navigate([target(failedPermission, route, state)]);\n }\n }\n }\n else {\n console.warn('Unknown redirect type', resolvedRedirect);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, deps: [{ token: i1.PermissionCheckerService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.PermissionCheckerService }, { type: i2.Router }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3Blcm1pc3Npb25zLWd1YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQU1MLE1BQU0sRUFDTixtQkFBbUIsRUFFcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUl6QixPQUFPLEVBQUUsb0JBQW9CLEVBQXdFLE1BQU0saUNBQWlDLENBQUM7QUFDN0ksT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQVF4RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBb0QsQ0FDbEYsS0FBcUMsRUFDckMsS0FBeUMsRUFDekMsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxZQUFZLG1CQUFtQixFQUFFLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUdGLE1BQU0sT0FBTyxtQkFBbUI7SUFFcEI7SUFDQTtJQUZWLFlBQ1UsV0FBcUMsRUFDckMsTUFBYztRQURkLGdCQUFXLEdBQVgsV0FBVyxDQUEwQjtRQUNyQyxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ3JCLENBQUM7SUFFSixXQUFXLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUNuRSxPQUFPLElBQUks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akMsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQWUsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQ0ksQ0FBQztZQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQzt1R0FySFksbUJBQW1COzJHQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgQ2FuQWN0aXZhdGVDaGlsZEZuLFxyXG4gIENhbkFjdGl2YXRlRm4sXHJcbiAgQ2FuTWF0Y2hGbixcclxuICBSb3V0ZSxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICBVcmxTZWdtZW50XHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbmltcG9ydCB7IERFRkFVTFRfUkVESVJFQ1RfS0VZLCBFeGNlcHRGbiwgTmd4UGVybWlzc2lvbnNSb3V0ZXJEYXRhLCBPbmx5Rm4sIFJlZGlyZWN0VG8sIFJlZGlyZWN0VG9GbiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1BsYWluT2JqZWN0LCB0cmFuc2Zvcm1TdHJpbmdUb0FycmF5IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbkNoZWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLWNoZWNrZXIuc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5neFBlcm1pc3Npb25zRGF0YSB7XHJcbiAgb25seT86IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIGV4Y2VwdD86IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIHJlZGlyZWN0VG8/OiBSZWRpcmVjdFRvIHwgUmVkaXJlY3RUb0ZuIHwgYW55O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbmd4UGVybWlzc2lvbnNHdWFyZDogQ2FuQWN0aXZhdGVGbiB8IENhbkFjdGl2YXRlQ2hpbGRGbiB8IENhbk1hdGNoRm4gPSAoXHJcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBSb3V0ZSxcclxuICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCB8IFVybFNlZ21lbnRbXVxyXG4pID0+IHtcclxuICBjb25zdCBndWFyZCA9IGluamVjdChOZ3hQZXJtaXNzaW9uc0d1YXJkKTtcclxuICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcbiAgICByZXR1cm4gZ3VhcmQuaGFzUGVybWlzc2lvbnMocm91dGUsIHN0YXRlKTtcclxuICB9XHJcbiAgcmV0dXJuIGd1YXJkLmhhc1Blcm1pc3Npb25zKHJvdXRlKTtcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hQZXJtaXNzaW9uc0d1YXJkIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25DaGVja2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHt9XHJcblxyXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMocm91dGUsIHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGNhbkFjdGl2YXRlQ2hpbGQocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNQZXJtaXNzaW9ucyhyb3V0ZSwgc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgY2FuTG9hZChyb3V0ZTogUm91dGUpIHtcclxuICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb25zKHJvdXRlKTtcclxuICB9XHJcblxyXG4gIGNhbk1hdGNoKHJvdXRlOiBSb3V0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMocm91dGUpO1xyXG4gIH1cclxuXHJcbmFzeW5jIGhhc1Blcm1pc3Npb25zKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgUm91dGUsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gIGNvbnN0IGRhdGEgPSByb3V0ZS5kYXRhPy5bJ3Blcm1pc3Npb25zJ10gYXMgTmd4UGVybWlzc2lvbnNSb3V0ZXJEYXRhIHwgdW5kZWZpbmVkO1xyXG4gIGNvbnN0IG9ubHk6IHN0cmluZ1tdID0gW107XHJcbiAgY29uc3QgZXhjZXB0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBpZiAoZGF0YT8ub25seSkge1xyXG4gICAgaWYgKGlzRnVuY3Rpb248T25seUZuPihkYXRhLm9ubHkpKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEub25seShyb3V0ZSwgc3RhdGUpO1xyXG4gICAgICBvbmx5LnB1c2goLi4udHJhbnNmb3JtU3RyaW5nVG9BcnJheShyZXN1bHQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9ubHkucHVzaCguLi50cmFuc2Zvcm1TdHJpbmdUb0FycmF5KGRhdGEub25seSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGRhdGE/LmV4Y2VwdCkge1xyXG4gICAgaWYgKGlzRnVuY3Rpb248RXhjZXB0Rm4+KGRhdGEuZXhjZXB0KSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBkYXRhLmV4Y2VwdChyb3V0ZSwgc3RhdGUpO1xyXG4gICAgICBleGNlcHQucHVzaCguLi50cmFuc2Zvcm1TdHJpbmdUb0FycmF5KHJlc3VsdCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhjZXB0LnB1c2goLi4udHJhbnNmb3JtU3RyaW5nVG9BcnJheShkYXRhLmV4Y2VwdCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgcGVybWlzc2lvbnM6IE5neFBlcm1pc3Npb25zRGF0YSA9IHtcclxuICAgIG9ubHksXHJcbiAgICBleGNlcHQsXHJcbiAgICByZWRpcmVjdFRvOiBkYXRhPy5yZWRpcmVjdFRvXHJcbiAgfTtcclxuXHJcbiAgLy8gLS0tIHJlc3Qgb2YgdGhlIGd1YXJkIGxvZ2ljIC0tLVxyXG4gIC8vIEVYQ0VQVCBjaGVja1xyXG4gIGlmIChwZXJtaXNzaW9ucy5leGNlcHQ/Lmxlbmd0aCkge1xyXG4gICAgZm9yIChjb25zdCBwZXJtIG9mIHBlcm1pc3Npb25zLmV4Y2VwdCkge1xyXG4gICAgICBpZiAoYXdhaXQgdGhpcy5wZXJtaXNzaW9ucy5pc0dyYW50ZWQocGVybSkpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVJlZGlyZWN0KHBlcm1pc3Npb25zLCBwZXJtLCByb3V0ZSwgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gT05MWSBjaGVja1xyXG4gIGlmIChwZXJtaXNzaW9ucy5vbmx5Py5sZW5ndGgpIHtcclxuICAgIGZvciAoY29uc3QgcGVybSBvZiBwZXJtaXNzaW9ucy5vbmx5KSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLnBlcm1pc3Npb25zLmlzR3JhbnRlZEFzeW5jKHBlcm0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaGFuZGxlUmVkaXJlY3QocGVybWlzc2lvbnMsIHBlcm1pc3Npb25zLm9ubHlbMF0sIHJvdXRlLCBzdGF0ZSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuXHJcbnByaXZhdGUgaGFuZGxlUmVkaXJlY3QoXHJcbiAgcGVybWlzc2lvbnM6IE5neFBlcm1pc3Npb25zRGF0YSxcclxuICBmYWlsZWRQZXJtaXNzaW9uOiBzdHJpbmcsXHJcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBSb3V0ZSxcclxuICBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3RcclxuKSB7XHJcbiAgY29uc3QgcmVkaXJlY3RUbyA9IHBlcm1pc3Npb25zLnJlZGlyZWN0VG87XHJcblxyXG4gIGlmICghcmVkaXJlY3RUbykgcmV0dXJuO1xyXG5cclxuICAvLyBJZiByZWRpcmVjdFRvIGlzIGEgZnVuY3Rpb25cclxuICBjb25zdCByZXNvbHZlZFJlZGlyZWN0ID1cclxuICAgIGlzRnVuY3Rpb248UmVkaXJlY3RUb0ZuPihyZWRpcmVjdFRvKVxyXG4gICAgICA/IHJlZGlyZWN0VG8oZmFpbGVkUGVybWlzc2lvbiwgcm91dGUsIHN0YXRlKVxyXG4gICAgICA6IHJlZGlyZWN0VG87XHJcblxyXG4gIGlmICh0eXBlb2YgcmVzb2x2ZWRSZWRpcmVjdCA9PT0gJ3N0cmluZycpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZXNvbHZlZFJlZGlyZWN0XSk7IC8vIHdyYXAgc3RyaW5nIGluIGFycmF5XHJcbiAgfVxyXG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzb2x2ZWRSZWRpcmVjdCkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHJlc29sdmVkUmVkaXJlY3QpOyAvLyBhcnJheSBpcyBmaW5lXHJcbiAgfVxyXG4gIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVzb2x2ZWRSZWRpcmVjdCkpIHtcclxuICAgIC8vIE9iamVjdDogY2hlY2sgZm9yIGZhaWxlZFBlcm1pc3Npb24ga2V5IGZpcnN0XHJcbiAgICBjb25zdCB0YXJnZXQgPVxyXG4gICAgICByZXNvbHZlZFJlZGlyZWN0W2ZhaWxlZFBlcm1pc3Npb25dID8/IHJlc29sdmVkUmVkaXJlY3RbREVGQVVMVF9SRURJUkVDVF9LRVldO1xyXG5cclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RhcmdldF0pO1xyXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHRhcmdldCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbjxSZWRpcmVjdFRvRm4+KHRhcmdldCkpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGFyZ2V0KGZhaWxlZFBlcm1pc3Npb24sIHJvdXRlLCBzdGF0ZSldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIGNvbnNvbGUud2FybignVW5rbm93biByZWRpcmVjdCB0eXBlJywgcmVzb2x2ZWRSZWRpcmVjdCk7XHJcbiAgfVxyXG59XHJcblxyXG59XHJcbiJdfQ==","// logger.interface.ts\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"OFF\"] = 4] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL2xvZ2dlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBTixJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIseUNBQVMsQ0FBQTtJQUNULHVDQUFRLENBQUE7SUFDUix1Q0FBUSxDQUFBO0lBQ1IseUNBQVMsQ0FBQTtJQUNULHFDQUFPLENBQUE7QUFDVCxDQUFDLEVBTlcsUUFBUSxLQUFSLFFBQVEsUUFNbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBsb2dnZXIuaW50ZXJmYWNlLnRzXHJcbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcclxuICBERUJVRyA9IDAsXHJcbiAgSU5GTyA9IDEsXHJcbiAgV0FSTiA9IDIsXHJcbiAgRVJST1IgPSAzLFxyXG4gIE9GRiA9IDRcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyU2VydmljZSB7XHJcbiAgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XHJcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcclxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xyXG4gIHNldExvZ0xldmVsKGxldmVsOiBMb2dMZXZlbCk6IHZvaWQ7XHJcbn1cclxuIl19","// logger.service.ts\nimport { Injectable, inject } from '@angular/core';\nimport { LogLevel } from './logger.interface';\nimport { EnvironmentService } from './environment.service';\nimport * as i0 from \"@angular/core\";\n// Remove the separate LoggerConfig interface since we're using EnvironmentConfig\n// and extend EnvironmentConfig to include logger-specific properties\nexport class LoggerService {\n level = LogLevel.DEBUG;\n enableConsole = true;\n prefix = '[App]';\n timestamp = true;\n environmentService = inject(EnvironmentService);\n environment = this.environmentService?.getEnvironment();\n constructor() {\n // Use environment configuration if provided\n if (this.environment) {\n this.configureFromEnvironment(this.environment);\n }\n // Fallback: In production, default to WARN level\n if (typeof window !== 'undefined' && window.location.hostname !== 'localhost') {\n this.level = LogLevel.WARN;\n this.enableConsole = false;\n }\n }\n configureFromEnvironment(env) {\n // Map string log levels from environment to LogLevel enum\n this.level = this.mapLogLevel(env.logLevel);\n // Use production flag to determine console logging\n this.enableConsole = !env.production;\n // Set prefix from environment if available\n this.prefix = `[${env['appName'] || 'App'}]`;\n // Enable timestamp in development, disable in production for performance\n this.timestamp = !env.production;\n }\n mapLogLevel(level) {\n switch (level) {\n case 'debug': return LogLevel.DEBUG;\n case 'info': return LogLevel.INFO;\n case 'warn': return LogLevel.WARN;\n case 'error': return LogLevel.ERROR;\n case 'off': return LogLevel.OFF;\n default: return LogLevel.WARN;\n }\n }\n debug(message, ...args) {\n if (this.shouldLog(LogLevel.DEBUG)) {\n this.log('DEBUG', message, args, 'color: blue');\n }\n }\n info(message, ...args) {\n if (this.shouldLog(LogLevel.INFO)) {\n this.log('INFO', message, args, 'color: green');\n }\n }\n warn(message, ...args) {\n if (this.shouldLog(LogLevel.WARN)) {\n this.log('WARN', message, args, 'color: orange');\n }\n }\n error(message, ...args) {\n if (this.shouldLog(LogLevel.ERROR)) {\n this.log('ERROR', message, args, 'color: red');\n // Send to external services only for errors in production\n if (this.environment?.production) {\n this.sendToExternalService('ERROR', message, args);\n }\n }\n }\n setLogLevel(level) {\n this.level = level;\n }\n shouldLog(level) {\n return level >= this.level && this.enableConsole;\n }\n log(level, message, args, style) {\n if (!this.enableConsole)\n return;\n const timestamp = this.timestamp ? new Date().toISOString() : '';\n const formattedPrefix = this.prefix ? `${this.prefix}` : '';\n const logMessage = `${timestamp} ${formattedPrefix} [${level}] ${message}`;\n if (args.length > 0) {\n console.log(`%c${logMessage}`, style, ...args);\n }\n else {\n console.log(`%c${logMessage}`, style);\n }\n }\n sendToExternalService(level, message, args) {\n // Integrate with external logging services from environment\n try {\n const sentryUrl = this.environment?.externalServices?.['sentry'];\n const logRocketUrl = this.environment?.externalServices?.['logRocket'];\n // Example: Send to configured external services\n if (sentryUrl) {\n // this.sendToSentry(level, message, args);\n }\n if (logRocketUrl) {\n // this.sendToLogRocket(level, message, args);\n }\n // Send to backend if apiUrl is available\n if (this.environment?.apis.default.url) {\n // this.http.post(`${this.environment.apiUrl}/logs`, {\n // level, message, args, timestamp: new Date()\n // }).subscribe();\n }\n }\n catch (error) {\n // Don't use this.error here to avoid infinite loops\n console.error('Failed to send log to external service:', error);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9sb2dnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBb0IsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBa0IsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRzNELGlGQUFpRjtBQUNqRixxRUFBcUU7QUFLckUsTUFBTSxPQUFPLGFBQWE7SUFDaEIsS0FBSyxHQUFhLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDakMsYUFBYSxHQUFZLElBQUksQ0FBQztJQUM5QixNQUFNLEdBQVcsT0FBTyxDQUFDO0lBQ3pCLFNBQVMsR0FBWSxJQUFJLENBQUM7SUFDMUIsa0JBQWtCLEdBQXNCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ25FLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLENBQUE7SUFFL0Q7UUFDRSw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsaURBQWlEO1FBQ2pELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzlFLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixD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QUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN2QyxzREFBc0Q7Z0JBQ3RELGdEQUFnRDtnQkFDaEQsa0JBQWtCO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLG9EQUFvRDtZQUNwRCxPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO3VHQTNIVSxhQUFhOzJHQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGxvZ2dlci5zZXJ2aWNlLnRzXHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJTG9nZ2VyU2VydmljZSwgTG9nTGV2ZWwgfSBmcm9tICcuL2xvZ2dlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuL2Vudmlyb25tZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5cclxuLy8gUmVtb3ZlIHRoZSBzZXBhcmF0ZSBMb2dnZXJDb25maWcgaW50ZXJmYWNlIHNpbmNlIHdlJ3JlIHVzaW5nIEVudmlyb25tZW50Q29uZmlnXHJcbi8vIGFuZCBleHRlbmQgRW52aXJvbm1lbnRDb25maWcgdG8gaW5jbHVkZSBsb2dnZXItc3BlY2lmaWMgcHJvcGVydGllc1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIElMb2dnZXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIGxldmVsOiBMb2dMZXZlbCA9IExvZ0xldmVsLkRFQlVHO1xyXG4gIHByaXZhdGUgZW5hYmxlQ29uc29sZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBwcmVmaXg6IHN0cmluZyA9ICdbQXBwXSc7XHJcbiAgcHJpdmF0ZSB0aW1lc3RhbXA6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOkVudmlyb25tZW50U2VydmljZSA9IGluamVjdChFbnZpcm9ubWVudFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSB0aGlzLmVudmlyb25tZW50U2VydmljZT8uZ2V0RW52aXJvbm1lbnQoKVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIC8vIFVzZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkXHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUZyb21FbnZpcm9ubWVudCh0aGlzLmVudmlyb25tZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGYWxsYmFjazogSW4gcHJvZHVjdGlvbiwgZGVmYXVsdCB0byBXQVJOIGxldmVsXHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSAnbG9jYWxob3N0Jykge1xyXG4gICAgICB0aGlzLmxldmVsID0gTG9nTGV2ZWwuV0FSTjtcclxuICAgICAgdGhpcy5lbmFibGVDb25zb2xlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUZyb21FbnZpcm9ubWVudChlbnY6IEVudmlyb25tZW50KTogdm9pZCB7XHJcbiAgICAvLyBNYXAgc3RyaW5nIGxvZyBsZXZlbHMgZnJvbSBlbnZpcm9ubWVudCB0byBMb2dMZXZlbCBlbnVtXHJcbiAgICB0aGlzLmxldmVsID0gdGhpcy5tYXBMb2dMZXZlbChlbnYubG9nTGV2ZWwpO1xyXG5cclxuICAgIC8vIFVzZSBwcm9kdWN0aW9uIGZsYWcgdG8gZGV0ZXJtaW5lIGNvbnNvbGUgbG9nZ2luZ1xyXG4gICAgdGhpcy5lbmFibGVDb25zb2xlID0gIWVudi5wcm9kdWN0aW9uO1xyXG5cclxuICAgIC8vIFNldCBwcmVmaXggZnJvbSBlbnZpcm9ubWVudCBpZiBhdmFpbGFibGVcclxuICAgIHRoaXMucHJlZml4ID0gYFske2VudlsnYXBwTmFtZSddIHx8ICdBcHAnfV1gO1xyXG5cclxuICAgIC8vIEVuYWJsZSB0aW1lc3RhbXAgaW4gZGV2ZWxvcG1lbnQsIGRpc2FibGUgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZm9ybWFuY2VcclxuICAgIHRoaXMudGltZXN0YW1wID0gIWVudi5wcm9kdWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXBMb2dMZXZlbChsZXZlbDogc3RyaW5nKTogTG9nTGV2ZWwge1xyXG4gICAgc3dpdGNoIChsZXZlbCkge1xyXG4gICAgICBjYXNlICdkZWJ1Zyc6IHJldHVybiBMb2dMZXZlbC5ERUJVRztcclxuICAgICAgY2FzZSAnaW5mbyc6IHJldHVybiBMb2dMZXZlbC5JTkZPO1xyXG4gICAgICBjYXNlICd3YXJuJzogcmV0dXJuIExvZ0xldmVsLldBUk47XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuIExvZ0xldmVsLkVSUk9SO1xyXG4gICAgICBjYXNlICdvZmYnOiByZXR1cm4gTG9nTGV2ZWwuT0ZGO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gTG9nTGV2ZWwuV0FSTjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5ERUJVRykpIHtcclxuICAgICAgdGhpcy5sb2coJ0RFQlVHJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiBibHVlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5JTkZPKSkge1xyXG4gICAgICB0aGlzLmxvZygnSU5GTycsIG1lc3NhZ2UsIGFyZ3MsICdjb2xvcjogZ3JlZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2hvdWxkTG9nKExvZ0xldmVsLldBUk4pKSB7XHJcbiAgICAgIHRoaXMubG9nKCdXQVJOJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiBvcmFuZ2UnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5FUlJPUikpIHtcclxuICAgICAgdGhpcy5sb2coJ0VSUk9SJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiByZWQnKTtcclxuXHJcbiAgICAgIC8vIFNlbmQgdG8gZXh0ZXJuYWwgc2VydmljZXMgb25seSBmb3IgZXJyb3JzIGluIHByb2R1Y3Rpb25cclxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LnByb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNlbmRUb0V4dGVybmFsU2VydmljZSgnRVJST1InLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TG9nTGV2ZWwobGV2ZWw6IExvZ0xldmVsKTogdm9pZCB7XHJcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3VsZExvZyhsZXZlbDogTG9nTGV2ZWwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsZXZlbCA+PSB0aGlzLmxldmVsICYmIHRoaXMuZW5hYmxlQ29uc29sZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9nKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgYXJnczogYW55W10sIHN0eWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbmFibGVDb25zb2xlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy50aW1lc3RhbXAgPyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgOiAnJztcclxuICAgIGNvbnN0IGZvcm1hdHRlZFByZWZpeCA9IHRoaXMucHJlZml4ID8gYCR7dGhpcy5wcmVmaXh9YCA6ICcnO1xyXG5cclxuICAgIGNvbnN0IGxvZ01lc3NhZ2UgPSBgJHt0aW1lc3RhbXB9ICR7Zm9ybWF0dGVkUHJlZml4fSBbJHtsZXZlbH1dICR7bWVzc2FnZX1gO1xyXG5cclxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2coYCVjJHtsb2dNZXNzYWdlfWAsIHN0eWxlLCAuLi5hcmdzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGAlYyR7bG9nTWVzc2FnZX1gLCBzdHlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRUb0V4dGVybmFsU2VydmljZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGFyZ3M6IGFueVtdKTogdm9pZCB7XHJcbiAgICAvLyBJbnRlZ3JhdGUgd2l0aCBleHRlcm5hbCBsb2dnaW5nIHNlcnZpY2VzIGZyb20gZW52aXJvbm1lbnRcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNlbnRyeVVybCA9IHRoaXMuZW52aXJvbm1lbnQ/LmV4dGVybmFsU2VydmljZXM/Llsnc2VudHJ5J107XHJcbiAgICAgIGNvbnN0IGxvZ1JvY2tldFVybCA9IHRoaXMuZW52aXJvbm1lbnQ/LmV4dGVybmFsU2VydmljZXM/LlsnbG9nUm9ja2V0J107XHJcblxyXG4gICAgICAvLyBFeGFtcGxlOiBTZW5kIHRvIGNvbmZpZ3VyZWQgZXh0ZXJuYWwgc2VydmljZXNcclxuICAgICAgaWYgKHNlbnRyeVVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuc2VuZFRvU2VudHJ5KGxldmVsLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGxvZ1JvY2tldFVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuc2VuZFRvTG9nUm9ja2V0KGxldmVsLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2VuZCB0byBiYWNrZW5kIGlmIGFwaVVybCBpcyBhdmFpbGFibGVcclxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LmFwaXMuZGVmYXVsdC51cmwpIHtcclxuICAgICAgICAvLyB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVVybH0vbG9nc2AsIHtcclxuICAgICAgICAvLyAgIGxldmVsLCBtZXNzYWdlLCBhcmdzLCB0aW1lc3RhbXA6IG5ldyBEYXRlKClcclxuICAgICAgICAvLyB9KS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy8gRG9uJ3QgdXNlIHRoaXMuZXJyb3IgaGVyZSB0byBhdm9pZCBpbmZpbml0ZSBsb29wc1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc2VuZCBsb2cgdG8gZXh0ZXJuYWwgc2VydmljZTonLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class IdParserService {\n /**\n * Extract IDs from a model based on comma-separated field names.\n * Example: \"id,biId\" => [model.id, model.biId]\n */\n parseIds(model, idField) {\n if (!idField)\n return null;\n const fields = idField.split(',').map(f => f.trim()).filter(Boolean);\n if (fields.length === 1) {\n return model[fields[0]];\n }\n return fields.map(f => model[f]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtcGFyc2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9pZC1wYXJzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sZUFBZTtJQUMxQjs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBVSxFQUFFLE9BQWU7UUFDbEMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7dUdBZlUsZUFBZTsyR0FBZixlQUFlLGNBREYsTUFBTTs7MkZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIElkUGFyc2VyU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCBJRHMgZnJvbSBhIG1vZGVsIGJhc2VkIG9uIGNvbW1hLXNlcGFyYXRlZCBmaWVsZCBuYW1lcy5cclxuICAgKiBFeGFtcGxlOiBcImlkLGJpSWRcIiA9PiBbbW9kZWwuaWQsIG1vZGVsLmJpSWRdXHJcbiAgICovXHJcbiAgcGFyc2VJZHMobW9kZWw6IGFueSwgaWRGaWVsZDogc3RyaW5nKTogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IGFueSB7XHJcbiAgICBpZiAoIWlkRmllbGQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGZpZWxkcyA9IGlkRmllbGQuc3BsaXQoJywnKS5tYXAoZiA9PiBmLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBtb2RlbFtmaWVsZHNbMF1dO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWVsZHMubWFwKGYgPT4gbW9kZWxbZl0pO1xyXG4gIH1cclxufVxyXG4iXX0=","export class QueryParser {\n static parse(queryString) {\n const params = {\n filters: [],\n orderBy: [],\n groupBy: [],\n select: [],\n aggregates: []\n };\n if (!queryString)\n return params;\n const queryParts = queryString.split('&');\n for (const part of queryParts) {\n if (part.startsWith('$filter=')) {\n this.parseFilter(part.substring('$filter='.length), params);\n }\n else if (part.startsWith('$orderby=')) {\n this.parseOrderBy(part.substring('$orderby='.length), params);\n }\n else if (part.startsWith('$groupby=')) {\n this.parseGroupBy(part.substring('$groupby='.length), params);\n }\n else if (part.startsWith('$select=')) {\n this.parseSelect(part.substring('$select='.length), params);\n }\n else if (part.startsWith('$aggregate=')) {\n this.parseAggregate(part.substring('$aggregate='.length), params);\n }\n else if (part.startsWith('$top=')) {\n params.top = Number(part.substring('$top='.length));\n }\n else if (part.startsWith('$skip=')) {\n params.skip = Number(part.substring('$skip='.length));\n }\n else if (part.startsWith('$expand=')) {\n params.expand = part.substring('$expand='.length).split(',').map(f => f.trim());\n }\n else if (part.startsWith('$count=')) {\n params.includeCount = part.substring('$count='.length).toLowerCase() === 'true';\n }\n }\n return params;\n }\n static toString(params) {\n const parts = [];\n if (params.filters?.length) {\n const filterStr = this.buildFilterString(params.filters);\n parts.push(`$filter=${encodeURIComponent(filterStr)}`);\n }\n if (params.orderBy?.length) {\n const orderByStr = params.orderBy.map(o => `${o.field} ${o.direction}`).join(',');\n parts.push(`$orderby=${encodeURIComponent(orderByStr)}`);\n }\n if (params.groupBy?.length) {\n const groupByStr = this.buildGroupByString(params.groupBy);\n parts.push(`$groupby=${encodeURIComponent(groupByStr)}`);\n }\n if (params.select?.length) {\n const selectStr = this.buildSelectString(params.select);\n parts.push(`$select=${encodeURIComponent(selectStr)}`);\n }\n if (params.aggregates?.length) {\n const aggregateStr = this.buildAggregateString(params.aggregates);\n parts.push(`$aggregate=${encodeURIComponent(aggregateStr)}`);\n }\n if (params.top !== undefined) {\n parts.push(`$top=${params.top}`);\n }\n if (params.skip !== undefined) {\n parts.push(`$skip=${params.skip}`);\n }\n if (params.expand?.length) {\n parts.push(`$expand=${encodeURIComponent(params.expand.join(','))}`);\n }\n if (params.includeCount !== undefined) {\n parts.push(`$count=${params.includeCount}`);\n }\n return parts.join('&');\n }\n static buildFilterString(filters) {\n return filters.map((group, index) => {\n const groupStr = group.conditions\n .map(condition => {\n let val = condition.value;\n if (typeof val === 'string') {\n val = `'${val.replace(/'/g, \"''\")}'`;\n }\n else if (typeof val === 'boolean') {\n val = val ? 'true' : 'false';\n }\n return `${condition.field} ${condition.operator} ${val}`;\n })\n .join(` ${group.logicalOperator} `);\n // For the first group, no groupLogicalOperator is needed\n if (index === 0) {\n return group.conditions.length > 1 ? `(${groupStr})` : groupStr;\n }\n else {\n const joinOp = group.groupLogicalOperator || 'and';\n return group.conditions.length > 1 ? `${joinOp} (${groupStr})` : `${joinOp} ${groupStr}`;\n }\n }).join(' ');\n }\n static buildGroupByString(groupBy) {\n return groupBy\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .map(group => {\n let groupStr = group.propertyName;\n // Add display name if provided\n if (group.displayName) {\n groupStr += ` as ${group.displayName}`;\n }\n // Add metadata for UI\n const metadata = [];\n if (group.showTotal !== undefined) {\n metadata.push(`showTotal:${group.showTotal}`);\n }\n if (group.totalBackground) {\n metadata.push(`totalBg:${group.totalBackground}`);\n }\n if (group.groupHeaderBackground) {\n metadata.push(`headerBg:${group.groupHeaderBackground}`);\n }\n if (metadata.length > 0) {\n groupStr += `(${metadata.join(';')})`;\n }\n return groupStr;\n })\n .join(',');\n }\n static buildSelectString(select) {\n return select\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .map(item => {\n let selectStr = item.propertyName;\n // Add display name if provided\n if (item.displayName) {\n selectStr += ` as ${item.displayName}`;\n }\n // Add aggregate function if provided\n if (item.aggregateFunction) {\n selectStr += ` with ${item.aggregateFunction}`;\n }\n // Add visibility metadata\n const metadata = [];\n if (item.isVisible !== undefined) {\n metadata.push(`visible:${item.isVisible}`);\n }\n if (metadata.length > 0) {\n selectStr += `(${metadata.join(';')})`;\n }\n return selectStr;\n })\n .join(',');\n }\n static buildAggregateString(aggregates) {\n return aggregates\n .map(agg => {\n let aggStr = `${agg.aggregateFunction}(${agg.propertyName})`;\n if (agg.alias) {\n aggStr += ` as ${agg.alias}`;\n }\n return aggStr;\n })\n .join(',');\n }\n static parseFilter(filterString, params) {\n const decodedString = decodeURIComponent(filterString);\n const groups = [];\n // Split by top-level AND/OR operators\n const topLevelPattern = /(?:^|\\s)(and|or)\\s+(?=(?:[^()]*\\([^()]*\\))*[^()]*$)/gi;\n const segments = [];\n let lastIndex = 0;\n let match;\n while ((match = topLevelPattern.exec(decodedString)) !== null) {\n const operator = match[1];\n const segment = decodedString.substring(lastIndex, match.index).trim();\n if (segment) {\n segments.push({ condition: segment, operator });\n }\n lastIndex = match.index + match[0].length;\n }\n // Add the last segment\n const lastSegment = decodedString.substring(lastIndex).trim();\n if (lastSegment) {\n segments.push({ condition: lastSegment, operator: undefined });\n }\n // Parse each segment\n segments.forEach((segment, index) => {\n let conditions = [];\n // Check if it's a group with parentheses\n if (segment.condition.startsWith('(') && segment.condition.endsWith(')')) {\n const innerCondition = segment.condition.slice(1, -1).trim();\n conditions = this.parseConditions(innerCondition);\n }\n else {\n // Individual condition\n conditions = this.parseConditions(segment.condition);\n }\n if (conditions.length > 0) {\n const group = {\n logicalOperator: 'and',\n conditions: conditions\n };\n // For groups after the first, set the groupLogicalOperator\n if (index > 0) {\n group.groupLogicalOperator = segment.operator?.toLowerCase() || 'and';\n }\n // Detect the logical operator used within the group\n if (conditions.length === 1 && segment.condition.includes(' or ')) {\n group.logicalOperator = 'or';\n }\n else if (conditions.length > 1) {\n group.logicalOperator = segment.condition.toLowerCase().includes(' or ') ? 'or' : 'and';\n }\n groups.push(group);\n }\n });\n params.filters = groups;\n }\n static parseConditions(conditionString) {\n const conditions = [];\n // Enhanced pattern to handle more operators and complex values\n const pattern = /(\\w+(?:\\.\\w+)*)\\s+(eq|ne|gt|ge|lt|le|contains|startswith|endswith|in|notin)\\s+('[^']*'|\\[[^\\]]*\\]|\\d+|true|false|null)/gi;\n let match;\n while ((match = pattern.exec(conditionString)) !== null) {\n const [, field, operator, rawValue] = match;\n let value = rawValue.trim();\n if (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\")) {\n value = rawValue.slice(1, -1).replace(/''/g, \"'\");\n }\n else if (rawValue.startsWith('[') && rawValue.endsWith(']')) {\n // Handle array values for IN/NOT IN operators\n value = rawValue.slice(1, -1).split(',').map(v => {\n const trimmed = v.trim().replace(/^'|'$/g, '');\n return isNaN(Number(trimmed)) ? trimmed : Number(trimmed);\n });\n }\n else if (!isNaN(Number(rawValue))) {\n value = Number(rawValue);\n }\n else if (rawValue.toLowerCase() === 'true') {\n value = true;\n }\n else if (rawValue.toLowerCase() === 'false') {\n value = false;\n }\n else if (rawValue.toLowerCase() === 'null') {\n value = null;\n }\n conditions.push({\n field: field.trim(),\n operator: operator.trim().toLowerCase(),\n value\n });\n }\n return conditions;\n }\n static parseOrderBy(orderByString, params) {\n const decodedString = decodeURIComponent(orderByString);\n const clauses = decodedString.split(',');\n for (const clause of clauses) {\n const parts = clause.trim().split(/\\s+/);\n const field = parts[0];\n const direction = parts[1]?.toLowerCase() || 'asc';\n params.orderBy?.push({\n field,\n direction\n });\n }\n }\n static parseGroupBy(groupByString, params) {\n const decodedString = decodeURIComponent(groupByString);\n const groups = decodedString.split(',');\n params.groupBy = groups.map((groupStr, index) => {\n const group = {\n propertyName: '',\n order: index\n };\n // Check for metadata in parentheses\n const metadataMatch = groupStr.match(/^(.*?)\\((.*)\\)$/);\n let baseStr = groupStr;\n let metadataStr = '';\n if (metadataMatch) {\n baseStr = metadataMatch[1];\n metadataStr = metadataMatch[2];\n }\n // Check for display name alias\n const aliasMatch = baseStr.match(/^(.*?)\\s+as\\s+(.*)$/);\n if (aliasMatch) {\n group.propertyName = aliasMatch[1].trim();\n group.displayName = aliasMatch[2].trim();\n }\n else {\n group.propertyName = baseStr.trim();\n }\n // Parse metadata\n if (metadataStr) {\n const metadataParts = metadataStr.split(';');\n metadataParts.forEach(part => {\n const [key, value] = part.split(':');\n switch (key) {\n case 'showTotal':\n group.showTotal = value.toLowerCase() === 'true';\n break;\n case 'totalBg':\n group.totalBackground = value;\n break;\n case 'headerBg':\n group.groupHeaderBackground = value;\n break;\n }\n });\n }\n return group;\n });\n }\n static parseSelect(selectString, params) {\n const decodedString = decodeURIComponent(selectString);\n const items = decodedString.split(',');\n params.select = items.map((itemStr, index) => {\n const item = {\n propertyName: '',\n isVisible: true,\n order: index\n };\n // Check for metadata in parentheses\n const metadataMatch = itemStr.match(/^(.*?)\\((.*)\\)$/);\n let baseStr = itemStr;\n let metadataStr = '';\n if (metadataMatch) {\n baseStr = metadataMatch[1];\n metadataStr = metadataMatch[2];\n }\n // Check for display name alias and aggregate function\n const aliasMatch = baseStr.match(/^(.*?)(?:\\s+as\\s+(.*?))?(?:\\s+with\\s+(\\w+))?$/);\n if (aliasMatch) {\n item.propertyName = aliasMatch[1].trim();\n if (aliasMatch[2]) {\n item.displayName = aliasMatch[2].trim();\n }\n if (aliasMatch[3]) {\n item.aggregateFunction = aliasMatch[3].trim();\n }\n }\n else {\n item.propertyName = baseStr.trim();\n }\n // Parse metadata\n if (metadataStr) {\n const metadataParts = metadataStr.split(';');\n metadataParts.forEach(part => {\n const [key, value] = part.split(':');\n if (key === 'visible') {\n item.isVisible = value.toLowerCase() === 'true';\n }\n });\n }\n return item;\n });\n }\n static parseAggregate(aggregateString, params) {\n const decodedString = decodeURIComponent(aggregateString);\n const aggregates = decodedString.split(',');\n params.aggregates = aggregates.map(aggStr => {\n const agg = {\n propertyName: '',\n aggregateFunction: ''\n };\n // Match pattern: function(property) as alias\n const match = aggStr.match(/^(\\w+)\\((\\w+)\\)(?:\\s+as\\s+(\\w+))?$/);\n if (match) {\n agg.aggregateFunction = match[1];\n agg.propertyName = match[2];\n if (match[3]) {\n agg.alias = match[3];\n }\n }\n return agg;\n });\n }\n // Helper method to convert QueryParameters to ODataQueryParameters (C# equivalent)\n static toODataQueryParameters(params) {\n return {\n Filters: params.filters.map(group => ({\n LogicalOperator: group.logicalOperator,\n GroupLogicalOperator: group.groupLogicalOperator,\n Conditions: group.conditions.map(cond => ({\n Field: cond.field,\n Operator: cond.operator,\n Value: cond.value\n }))\n })),\n OrderBy: params.orderBy?.map(order => ({\n Field: order.field,\n Direction: order.direction\n })) || [],\n GroupBy: params.groupBy?.map(group => ({\n PropertyName: group.propertyName,\n DisplayName: group.displayName,\n ShowTotal: group.showTotal ?? true,\n TotalBackground: group.totalBackground,\n GroupHeaderBackground: group.groupHeaderBackground,\n Order: group.order\n })) || [],\n Select: params.select?.map(sel => ({\n PropertyName: sel.propertyName,\n DisplayName: sel.displayName,\n AggregateFunction: sel.aggregateFunction,\n IsVisible: sel.isVisible ?? true,\n Order: sel.order\n })) || [],\n Aggregates: params.aggregates?.map(agg => ({\n PropertyName: agg.propertyName,\n AggregateFunction: agg.aggregateFunction,\n Alias: agg.alias\n })) || [],\n Top: params.top,\n Skip: params.skip,\n Expand: params.expand,\n IncludeCount: params.includeCount\n };\n }\n // Helper method to create query parameters from UI model\n static fromUIModel(model) {\n const params = {\n filters: model.advancedFilters || [],\n orderBy: model.sorting || [],\n groupBy: model.grouping || [],\n select: model.columns || [],\n aggregates: model.aggregates || [],\n top: model.pagination?.top,\n skip: model.pagination?.skip,\n expand: model.expand,\n includeCount: model.pagination?.includeCount\n };\n return params;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcXVlcnktcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStDQSxNQUFNLE9BQU8sV0FBVztJQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQW1CO1FBQzlCLE1BQU0sTUFBTSxHQUFvQjtZQUM5QixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLEVBQUUsRUFBRTtZQUNWLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFFaEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEUsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNoRSxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDcEUsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO1lBQ2xGLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBdUI7UUFDckMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEYsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0QsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEUsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBc0I7UUFDckQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVO2lCQUM5QixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxHQUFHLEdBQThCLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBRXJELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZDLENBQUM7cUJBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDcEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQy9CLENBQUM7Z0JBRUQsT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUMzRCxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7WUFFdEMseURBQXlEO1lBQ3pELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoQixPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2xFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsb0JBQW9CLElBQUksS0FBSyxDQUFDO2dCQUNuRCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNGLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQXlCO1FBQ3pELE9BQU8sT0FBTzthQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDL0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUVsQywrQkFBK0I7WUFDL0IsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLFFBQVEsSUFBSSxPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1lBRUQsc0JBQXNCO1lBQ3RCLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDaEMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUVELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsUUFBUSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ3hDLENBQUM7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQXNCO1FBQ3JELE9BQU8sTUFBTTthQUNWLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDL0MsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1YsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUVsQywrQkFBK0I7WUFDL0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLFNBQVMsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1lBRUQscUNBQXFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLFNBQVMsSUFBSSxTQUFTLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pELENBQUM7WUFFRCwwQkFBMEI7WUFDMUIsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLFNBQVMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVPLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxVQUE2QjtRQUMvRCxPQUFPLFVBQVU7YUFDZCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVCxJQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUM7WUFFN0QsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFvQixFQUFFLE1BQXVCO1FBQ3RFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUM7UUFFakMsc0NBQXNDO1FBQ3RDLE1BQU0sZUFBZSxHQUFHLHVEQUF1RCxDQUFDO1FBQ2hGLE1BQU0sUUFBUSxHQUErQyxFQUFFLENBQUM7UUFFaEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksS0FBNkIsQ0FBQztRQUVsQyxPQUFPLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM5RCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXZFLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBRUQsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxDQUFDO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztZQUV2Qyx5Q0FBeUM7WUFDekMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0QsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHVCQUF1QjtnQkFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sS0FBSyxHQUFnQjtvQkFDekIsZUFBZSxFQUFFLEtBQUs7b0JBQ3RCLFVBQVUsRUFBRSxVQUFVO2lCQUN2QixDQUFDO2dCQUVGLDJEQUEyRDtnQkFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2QsS0FBSyxDQUFDLG9CQUFvQixHQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFtQixJQUFJLEtBQUssQ0FBQztnQkFDMUYsQ0FBQztnQkFFRCxvREFBb0Q7Z0JBQ3BELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDbEUsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNqQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDMUYsQ0FBQztnQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFTyxNQUFNLENBQUMsZUFBZSxDQUFDLGVBQXVCO1FBQ3BELE1BQU0sVUFBVSxHQUFzQixFQUFFLENBQUM7UUFFekMsK0RBQStEO1FBQy9ELE1BQU0sT0FBTyxHQUFHLDBIQUEwSCxDQUFDO1FBQzNJLElBQUksS0FBNkIsQ0FBQztRQUVsQyxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUU1QyxJQUFJLEtBQUssR0FBUSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFakMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlELDhDQUE4QztnQkFDOUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDL0MsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQy9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM3QyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2YsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDOUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNoQixDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM3QyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2YsQ0FBQztZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ25CLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUN2QyxLQUFLO2FBQ04sQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQXFCLEVBQUUsTUFBdUI7UUFDeEUsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sU0FBUyxHQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQXFCLElBQUksS0FBSyxDQUFDO1lBRXZFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO2dCQUNuQixLQUFLO2dCQUNMLFNBQVM7YUFDVixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZLENBQUMsYUFBcUIsRUFBRSxNQUF1QjtRQUN4RSxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBbUI7Z0JBQzVCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUM7WUFFRixvQ0FBb0M7WUFDcEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3hELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQztZQUN2QixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFFckIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBRUQsK0JBQStCO1lBQy9CLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN4RCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLEtBQUssQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMxQyxLQUFLLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUVELGlCQUFpQjtZQUNqQixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMzQixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JDLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQ1osS0FBSyxXQUFXOzRCQUNkLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQzs0QkFDakQsTUFBTTt3QkFDUixLQUFLLFNBQVM7NEJBQ1osS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7NEJBQzlCLE1BQU07d0JBQ1IsS0FBSyxVQUFVOzRCQUNiLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7NEJBQ3BDLE1BQU07b0JBQ1YsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBb0IsRUFBRSxNQUF1QjtRQUN0RSxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBaUI7Z0JBQ3pCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixTQUFTLEVBQUUsSUFBSTtnQkFDZixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUM7WUFFRixvQ0FBb0M7WUFDcEMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN0QixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFFckIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBRUQsc0RBQXNEO1lBQ3RELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNsRixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLENBQUM7WUFFRCxpQkFBaUI7WUFDakIsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDM0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO29CQUNsRCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUF1QixFQUFFLE1BQXVCO1FBQzVFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFDLE1BQU0sR0FBRyxHQUFvQjtnQkFDM0IsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLGlCQUFpQixFQUFFLEVBQUU7YUFDdEIsQ0FBQztZQUVGLDZDQUE2QztZQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDakUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixHQUFHLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxHQUFHLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDYixHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1GQUFtRjtJQUNuRixNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBdUI7UUFDbkQsT0FBTztZQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtnQkFDdEMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtnQkFDaEQsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDeEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7YUFDM0IsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtnQkFDaEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJO2dCQUNsQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7Z0JBQ3RDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQ2xELEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzthQUNuQixDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDakMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO2dCQUM5QixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7Z0JBQzVCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUI7Z0JBQ3hDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUk7Z0JBQ2hDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSzthQUNqQixDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ1QsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO2dCQUM5QixpQkFBaUIsRUFBRSxHQUFHLENBQUMsaUJBQWlCO2dCQUN4QyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7YUFDakIsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNULEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQseURBQXlEO0lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBVTtRQUMzQixNQUFNLE1BQU0sR0FBb0I7WUFDOUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxlQUFlLElBQUksRUFBRTtZQUNwQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDN0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRTtZQUMzQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ2xDLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUc7WUFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSTtZQUM1QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsWUFBWTtTQUM3QyxDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb24ge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwIHtcclxuICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnIHwgJ29yJztcclxuICBncm91cExvZ2ljYWxPcGVyYXRvcj86ICdhbmQnIHwgJ29yJztcclxuICBjb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cGluZ0NvbmZpZyB7XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgc2hvd1RvdGFsPzogYm9vbGVhbjtcclxuICB0b3RhbEJhY2tncm91bmQ/OiBzdHJpbmc7XHJcbiAgZ3JvdXBIZWFkZXJCYWNrZ3JvdW5kPzogc3RyaW5nO1xyXG4gIG9yZGVyPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdENvbmZpZyB7XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgYWdncmVnYXRlRnVuY3Rpb24/OiBzdHJpbmc7XHJcbiAgaXNWaXNpYmxlPzogYm9vbGVhbjtcclxuICBvcmRlcj86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVDb25maWcge1xyXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xyXG4gIGFnZ3JlZ2F0ZUZ1bmN0aW9uOiBzdHJpbmc7XHJcbiAgYWxpYXM/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlQYXJhbWV0ZXJzIHtcclxuICBmaWx0ZXJzOiBGaWx0ZXJHcm91cFtdO1xyXG4gIG9yZGVyQnk/OiB7IGZpZWxkOiBzdHJpbmc7IGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfVtdO1xyXG4gIGdyb3VwQnk/OiBHcm91cGluZ0NvbmZpZ1tdO1xyXG4gIHNlbGVjdD86IFNlbGVjdENvbmZpZ1tdO1xyXG4gIGFnZ3JlZ2F0ZXM/OiBBZ2dyZWdhdGVDb25maWdbXTtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgc2tpcD86IG51bWJlcjtcclxuICBleHBhbmQ/OiBzdHJpbmdbXTtcclxuICBpbmNsdWRlQ291bnQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xyXG4gIHN0YXRpYyBwYXJzZShxdWVyeVN0cmluZzogc3RyaW5nKTogUXVlcnlQYXJhbWV0ZXJzIHtcclxuICAgIGNvbnN0IHBhcmFtczogUXVlcnlQYXJhbWV0ZXJzID0ge1xyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgb3JkZXJCeTogW10sXHJcbiAgICAgIGdyb3VwQnk6IFtdLFxyXG4gICAgICBzZWxlY3Q6IFtdLFxyXG4gICAgICBhZ2dyZWdhdGVzOiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gcGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5UGFydHMgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpO1xyXG5cclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBxdWVyeVBhcnRzKSB7XHJcbiAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRmaWx0ZXI9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRmlsdGVyKHBhcnQuc3Vic3RyaW5nKCckZmlsdGVyPScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRvcmRlcmJ5PScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZU9yZGVyQnkocGFydC5zdWJzdHJpbmcoJyRvcmRlcmJ5PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRncm91cGJ5PScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUdyb3VwQnkocGFydC5zdWJzdHJpbmcoJyRncm91cGJ5PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRzZWxlY3Q9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlU2VsZWN0KHBhcnQuc3Vic3RyaW5nKCckc2VsZWN0PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRhZ2dyZWdhdGU9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlQWdncmVnYXRlKHBhcnQuc3Vic3RyaW5nKCckYWdncmVnYXRlPScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyR0b3A9JykpIHtcclxuICAgICAgICBwYXJhbXMudG9wID0gTnVtYmVyKHBhcnQuc3Vic3RyaW5nKCckdG9wPScubGVuZ3RoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydC5zdGFydHNXaXRoKCckc2tpcD0nKSkge1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gTnVtYmVyKHBhcnQuc3Vic3RyaW5nKCckc2tpcD0nLmxlbmd0aCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnQuc3RhcnRzV2l0aCgnJGV4cGFuZD0nKSkge1xyXG4gICAgICAgIHBhcmFtcy5leHBhbmQgPSBwYXJ0LnN1YnN0cmluZygnJGV4cGFuZD0nLmxlbmd0aCkuc3BsaXQoJywnKS5tYXAoZiA9PiBmLnRyaW0oKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydC5zdGFydHNXaXRoKCckY291bnQ9JykpIHtcclxuICAgICAgICBwYXJhbXMuaW5jbHVkZUNvdW50ID0gcGFydC5zdWJzdHJpbmcoJyRjb3VudD0nLmxlbmd0aCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0b1N0cmluZyhwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAocGFyYW1zLmZpbHRlcnM/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBmaWx0ZXJTdHIgPSB0aGlzLmJ1aWxkRmlsdGVyU3RyaW5nKHBhcmFtcy5maWx0ZXJzKTtcclxuICAgICAgcGFydHMucHVzaChgJGZpbHRlcj0ke2VuY29kZVVSSUNvbXBvbmVudChmaWx0ZXJTdHIpfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMub3JkZXJCeT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBwYXJhbXMub3JkZXJCeS5tYXAobyA9PiBgJHtvLmZpZWxkfSAke28uZGlyZWN0aW9ufWApLmpvaW4oJywnKTtcclxuICAgICAgcGFydHMucHVzaChgJG9yZGVyYnk9JHtlbmNvZGVVUklDb21wb25lbnQob3JkZXJCeVN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5ncm91cEJ5Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZ3JvdXBCeVN0ciA9IHRoaXMuYnVpbGRHcm91cEJ5U3RyaW5nKHBhcmFtcy5ncm91cEJ5KTtcclxuICAgICAgcGFydHMucHVzaChgJGdyb3VwYnk9JHtlbmNvZGVVUklDb21wb25lbnQoZ3JvdXBCeVN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5zZWxlY3Q/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RTdHIgPSB0aGlzLmJ1aWxkU2VsZWN0U3RyaW5nKHBhcmFtcy5zZWxlY3QpO1xyXG4gICAgICBwYXJ0cy5wdXNoKGAkc2VsZWN0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdFN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5hZ2dyZWdhdGVzPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgYWdncmVnYXRlU3RyID0gdGhpcy5idWlsZEFnZ3JlZ2F0ZVN0cmluZyhwYXJhbXMuYWdncmVnYXRlcyk7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRhZ2dyZWdhdGU9JHtlbmNvZGVVUklDb21wb25lbnQoYWdncmVnYXRlU3RyKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zLnRvcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCR0b3A9JHtwYXJhbXMudG9wfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMuc2tpcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRza2lwPSR7cGFyYW1zLnNraXB9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5leHBhbmQ/Lmxlbmd0aCkge1xyXG4gICAgICBwYXJ0cy5wdXNoKGAkZXhwYW5kPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5leHBhbmQuam9pbignLCcpKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zLmluY2x1ZGVDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRjb3VudD0ke3BhcmFtcy5pbmNsdWRlQ291bnR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyYnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkRmlsdGVyU3RyaW5nKGZpbHRlcnM6IEZpbHRlckdyb3VwW10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGZpbHRlcnMubWFwKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXBTdHIgPSBncm91cC5jb25kaXRpb25zXHJcbiAgICAgICAgLm1hcChjb25kaXRpb24gPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbDogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiA9IGNvbmRpdGlvbi52YWx1ZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsID0gYCcke3ZhbC5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwgPyAndHJ1ZScgOiAnZmFsc2UnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBgJHtjb25kaXRpb24uZmllbGR9ICR7Y29uZGl0aW9uLm9wZXJhdG9yfSAke3ZhbH1gO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmpvaW4oYCAke2dyb3VwLmxvZ2ljYWxPcGVyYXRvcn0gYCk7XHJcblxyXG4gICAgICAvLyBGb3IgdGhlIGZpcnN0IGdyb3VwLCBubyBncm91cExvZ2ljYWxPcGVyYXRvciBpcyBuZWVkZWRcclxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwLmNvbmRpdGlvbnMubGVuZ3RoID4gMSA/IGAoJHtncm91cFN0cn0pYCA6IGdyb3VwU3RyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGpvaW5PcCA9IGdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yIHx8ICdhbmQnO1xyXG4gICAgICAgIHJldHVybiBncm91cC5jb25kaXRpb25zLmxlbmd0aCA+IDEgPyBgJHtqb2luT3B9ICgke2dyb3VwU3RyfSlgIDogYCR7am9pbk9wfSAke2dyb3VwU3RyfWA7XHJcbiAgICAgIH1cclxuICAgIH0pLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkR3JvdXBCeVN0cmluZyhncm91cEJ5OiBHcm91cGluZ0NvbmZpZ1tdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBncm91cEJ5XHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciB8fCAwKSAtIChiLm9yZGVyIHx8IDApKVxyXG4gICAgICAubWFwKGdyb3VwID0+IHtcclxuICAgICAgICBsZXQgZ3JvdXBTdHIgPSBncm91cC5wcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgICAgIC8vIEFkZCBkaXNwbGF5IG5hbWUgaWYgcHJvdmlkZWRcclxuICAgICAgICBpZiAoZ3JvdXAuZGlzcGxheU5hbWUpIHtcclxuICAgICAgICAgIGdyb3VwU3RyICs9IGAgYXMgJHtncm91cC5kaXNwbGF5TmFtZX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWRkIG1ldGFkYXRhIGZvciBVSVxyXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChncm91cC5zaG93VG90YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgbWV0YWRhdGEucHVzaChgc2hvd1RvdGFsOiR7Z3JvdXAuc2hvd1RvdGFsfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZ3JvdXAudG90YWxCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICBtZXRhZGF0YS5wdXNoKGB0b3RhbEJnOiR7Z3JvdXAudG90YWxCYWNrZ3JvdW5kfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZ3JvdXAuZ3JvdXBIZWFkZXJCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICBtZXRhZGF0YS5wdXNoKGBoZWFkZXJCZzoke2dyb3VwLmdyb3VwSGVhZGVyQmFja2dyb3VuZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXRhZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBncm91cFN0ciArPSBgKCR7bWV0YWRhdGEuam9pbignOycpfSlgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyb3VwU3RyO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignLCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRTZWxlY3RTdHJpbmcoc2VsZWN0OiBTZWxlY3RDb25maWdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc2VsZWN0XHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciB8fCAwKSAtIChiLm9yZGVyIHx8IDApKVxyXG4gICAgICAubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGxldCBzZWxlY3RTdHIgPSBpdGVtLnByb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgLy8gQWRkIGRpc3BsYXkgbmFtZSBpZiBwcm92aWRlZFxyXG4gICAgICAgIGlmIChpdGVtLmRpc3BsYXlOYW1lKSB7XHJcbiAgICAgICAgICBzZWxlY3RTdHIgKz0gYCBhcyAke2l0ZW0uZGlzcGxheU5hbWV9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBhZ2dyZWdhdGUgZnVuY3Rpb24gaWYgcHJvdmlkZWRcclxuICAgICAgICBpZiAoaXRlbS5hZ2dyZWdhdGVGdW5jdGlvbikge1xyXG4gICAgICAgICAgc2VsZWN0U3RyICs9IGAgd2l0aCAke2l0ZW0uYWdncmVnYXRlRnVuY3Rpb259YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCB2aXNpYmlsaXR5IG1ldGFkYXRhXHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIG1ldGFkYXRhLnB1c2goYHZpc2libGU6JHtpdGVtLmlzVmlzaWJsZX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXRhZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBzZWxlY3RTdHIgKz0gYCgke21ldGFkYXRhLmpvaW4oJzsnKX0pYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzZWxlY3RTdHI7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBidWlsZEFnZ3JlZ2F0ZVN0cmluZyhhZ2dyZWdhdGVzOiBBZ2dyZWdhdGVDb25maWdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYWdncmVnYXRlc1xyXG4gICAgICAubWFwKGFnZyA9PiB7XHJcbiAgICAgICAgbGV0IGFnZ1N0ciA9IGAke2FnZy5hZ2dyZWdhdGVGdW5jdGlvbn0oJHthZ2cucHJvcGVydHlOYW1lfSlgO1xyXG5cclxuICAgICAgICBpZiAoYWdnLmFsaWFzKSB7XHJcbiAgICAgICAgICBhZ2dTdHIgKz0gYCBhcyAke2FnZy5hbGlhc31gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFnZ1N0cjtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJywnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlRmlsdGVyKGZpbHRlclN0cmluZzogc3RyaW5nLCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVjb2RlZFN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChmaWx0ZXJTdHJpbmcpO1xyXG4gICAgY29uc3QgZ3JvdXBzOiBGaWx0ZXJHcm91cFtdID0gW107XHJcblxyXG4gICAgLy8gU3BsaXQgYnkgdG9wLWxldmVsIEFORC9PUiBvcGVyYXRvcnNcclxuICAgIGNvbnN0IHRvcExldmVsUGF0dGVybiA9IC8oPzpefFxccykoYW5kfG9yKVxccysoPz0oPzpbXigpXSpcXChbXigpXSpcXCkpKlteKCldKiQpL2dpO1xyXG4gICAgY29uc3Qgc2VnbWVudHM6IHsgY29uZGl0aW9uOiBzdHJpbmc7IG9wZXJhdG9yPzogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIGxldCBsYXN0SW5kZXggPSAwO1xyXG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xyXG5cclxuICAgIHdoaWxlICgobWF0Y2ggPSB0b3BMZXZlbFBhdHRlcm4uZXhlYyhkZWNvZGVkU3RyaW5nKSkgIT09IG51bGwpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBtYXRjaFsxXTtcclxuICAgICAgY29uc3Qgc2VnbWVudCA9IGRlY29kZWRTdHJpbmcuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpLnRyaW0oKTtcclxuXHJcbiAgICAgIGlmIChzZWdtZW50KSB7XHJcbiAgICAgICAgc2VnbWVudHMucHVzaCh7IGNvbmRpdGlvbjogc2VnbWVudCwgb3BlcmF0b3IgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCB0aGUgbGFzdCBzZWdtZW50XHJcbiAgICBjb25zdCBsYXN0U2VnbWVudCA9IGRlY29kZWRTdHJpbmcuc3Vic3RyaW5nKGxhc3RJbmRleCkudHJpbSgpO1xyXG4gICAgaWYgKGxhc3RTZWdtZW50KSB7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goeyBjb25kaXRpb246IGxhc3RTZWdtZW50LCBvcGVyYXRvcjogdW5kZWZpbmVkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhcnNlIGVhY2ggc2VnbWVudFxyXG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgbGV0IGNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZ3JvdXAgd2l0aCBwYXJlbnRoZXNlc1xyXG4gICAgICBpZiAoc2VnbWVudC5jb25kaXRpb24uc3RhcnRzV2l0aCgnKCcpICYmIHNlZ21lbnQuY29uZGl0aW9uLmVuZHNXaXRoKCcpJykpIHtcclxuICAgICAgICBjb25zdCBpbm5lckNvbmRpdGlvbiA9IHNlZ21lbnQuY29uZGl0aW9uLnNsaWNlKDEsIC0xKS50cmltKCk7XHJcbiAgICAgICAgY29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGlubmVyQ29uZGl0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBJbmRpdmlkdWFsIGNvbmRpdGlvblxyXG4gICAgICAgIGNvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhzZWdtZW50LmNvbmRpdGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBncm91cDogRmlsdGVyR3JvdXAgPSB7XHJcbiAgICAgICAgICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9uc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIEZvciBncm91cHMgYWZ0ZXIgdGhlIGZpcnN0LCBzZXQgdGhlIGdyb3VwTG9naWNhbE9wZXJhdG9yXHJcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgPSAoc2VnbWVudC5vcGVyYXRvcj8udG9Mb3dlckNhc2UoKSBhcyAnYW5kJyB8ICdvcicpIHx8ICdhbmQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSBsb2dpY2FsIG9wZXJhdG9yIHVzZWQgd2l0aGluIHRoZSBncm91cFxyXG4gICAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMSAmJiBzZWdtZW50LmNvbmRpdGlvbi5pbmNsdWRlcygnIG9yICcpKSB7XHJcbiAgICAgICAgICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSAnb3InO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uZGl0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSBzZWdtZW50LmNvbmRpdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCcgb3IgJykgPyAnb3InIDogJ2FuZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHBhcmFtcy5maWx0ZXJzID0gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VDb25kaXRpb25zKGNvbmRpdGlvblN0cmluZzogc3RyaW5nKTogRmlsdGVyQ29uZGl0aW9uW10ge1xyXG4gICAgY29uc3QgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcclxuXHJcbiAgICAvLyBFbmhhbmNlZCBwYXR0ZXJuIHRvIGhhbmRsZSBtb3JlIG9wZXJhdG9ycyBhbmQgY29tcGxleCB2YWx1ZXNcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKFxcdysoPzpcXC5cXHcrKSopXFxzKyhlcXxuZXxndHxnZXxsdHxsZXxjb250YWluc3xzdGFydHN3aXRofGVuZHN3aXRofGlufG5vdGluKVxccysoJ1teJ10qJ3xcXFtbXlxcXV0qXFxdfFxcZCt8dHJ1ZXxmYWxzZXxudWxsKS9naTtcclxuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcclxuXHJcbiAgICB3aGlsZSAoKG1hdGNoID0gcGF0dGVybi5leGVjKGNvbmRpdGlvblN0cmluZykpICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IFssIGZpZWxkLCBvcGVyYXRvciwgcmF3VmFsdWVdID0gbWF0Y2g7XHJcblxyXG4gICAgICBsZXQgdmFsdWU6IGFueSA9IHJhd1ZhbHVlLnRyaW0oKTtcclxuXHJcbiAgICAgIGlmIChyYXdWYWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiByYXdWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcclxuICAgICAgICB2YWx1ZSA9IHJhd1ZhbHVlLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUuc3RhcnRzV2l0aCgnWycpICYmIHJhd1ZhbHVlLmVuZHNXaXRoKCddJykpIHtcclxuICAgICAgICAvLyBIYW5kbGUgYXJyYXkgdmFsdWVzIGZvciBJTi9OT1QgSU4gb3BlcmF0b3JzXHJcbiAgICAgICAgdmFsdWUgPSByYXdWYWx1ZS5zbGljZSgxLCAtMSkuc3BsaXQoJywnKS5tYXAodiA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0cmltbWVkID0gdi50cmltKCkucmVwbGFjZSgvXid8JyQvZywgJycpO1xyXG4gICAgICAgICAgcmV0dXJuIGlzTmFOKE51bWJlcih0cmltbWVkKSkgPyB0cmltbWVkIDogTnVtYmVyKHRyaW1tZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIocmF3VmFsdWUpKSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHJhd1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIGlmIChyYXdWYWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIHtcclxuICAgICAgICB2YWx1ZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgIHZhbHVlID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ251bGwnKSB7XHJcbiAgICAgICAgdmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25kaXRpb25zLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBmaWVsZC50cmltKCksXHJcbiAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHZhbHVlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb25kaXRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VPcmRlckJ5KG9yZGVyQnlTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQob3JkZXJCeVN0cmluZyk7XHJcbiAgICBjb25zdCBjbGF1c2VzID0gZGVjb2RlZFN0cmluZy5zcGxpdCgnLCcpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIGNsYXVzZXMpIHtcclxuICAgICAgY29uc3QgcGFydHMgPSBjbGF1c2UudHJpbSgpLnNwbGl0KC9cXHMrLyk7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gcGFydHNbMF07XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IChwYXJ0c1sxXT8udG9Mb3dlckNhc2UoKSBhcyAnYXNjJyB8ICdkZXNjJykgfHwgJ2FzYyc7XHJcblxyXG4gICAgICBwYXJhbXMub3JkZXJCeT8ucHVzaCh7XHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VHcm91cEJ5KGdyb3VwQnlTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoZ3JvdXBCeVN0cmluZyk7XHJcbiAgICBjb25zdCBncm91cHMgPSBkZWNvZGVkU3RyaW5nLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgcGFyYW1zLmdyb3VwQnkgPSBncm91cHMubWFwKChncm91cFN0ciwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXA6IEdyb3VwaW5nQ29uZmlnID0ge1xyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJycsXHJcbiAgICAgICAgb3JkZXI6IGluZGV4XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgbWV0YWRhdGEgaW4gcGFyZW50aGVzZXNcclxuICAgICAgY29uc3QgbWV0YWRhdGFNYXRjaCA9IGdyb3VwU3RyLm1hdGNoKC9eKC4qPylcXCgoLiopXFwpJC8pO1xyXG4gICAgICBsZXQgYmFzZVN0ciA9IGdyb3VwU3RyO1xyXG4gICAgICBsZXQgbWV0YWRhdGFTdHIgPSAnJztcclxuXHJcbiAgICAgIGlmIChtZXRhZGF0YU1hdGNoKSB7XHJcbiAgICAgICAgYmFzZVN0ciA9IG1ldGFkYXRhTWF0Y2hbMV07XHJcbiAgICAgICAgbWV0YWRhdGFTdHIgPSBtZXRhZGF0YU1hdGNoWzJdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgZGlzcGxheSBuYW1lIGFsaWFzXHJcbiAgICAgIGNvbnN0IGFsaWFzTWF0Y2ggPSBiYXNlU3RyLm1hdGNoKC9eKC4qPylcXHMrYXNcXHMrKC4qKSQvKTtcclxuICAgICAgaWYgKGFsaWFzTWF0Y2gpIHtcclxuICAgICAgICBncm91cC5wcm9wZXJ0eU5hbWUgPSBhbGlhc01hdGNoWzFdLnRyaW0oKTtcclxuICAgICAgICBncm91cC5kaXNwbGF5TmFtZSA9IGFsaWFzTWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3VwLnByb3BlcnR5TmFtZSA9IGJhc2VTdHIudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQYXJzZSBtZXRhZGF0YVxyXG4gICAgICBpZiAobWV0YWRhdGFTdHIpIHtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YVBhcnRzID0gbWV0YWRhdGFTdHIuc3BsaXQoJzsnKTtcclxuICAgICAgICBtZXRhZGF0YVBhcnRzLmZvckVhY2gocGFydCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0LnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgICAgICBjYXNlICdzaG93VG90YWwnOlxyXG4gICAgICAgICAgICAgIGdyb3VwLnNob3dUb3RhbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndG90YWxCZyc6XHJcbiAgICAgICAgICAgICAgZ3JvdXAudG90YWxCYWNrZ3JvdW5kID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hlYWRlckJnJzpcclxuICAgICAgICAgICAgICBncm91cC5ncm91cEhlYWRlckJhY2tncm91bmQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBwYXJzZVNlbGVjdChzZWxlY3RTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoc2VsZWN0U3RyaW5nKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gZGVjb2RlZFN0cmluZy5zcGxpdCgnLCcpO1xyXG5cclxuICAgIHBhcmFtcy5zZWxlY3QgPSBpdGVtcy5tYXAoKGl0ZW1TdHIsIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW06IFNlbGVjdENvbmZpZyA9IHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICcnLFxyXG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBvcmRlcjogaW5kZXhcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciBtZXRhZGF0YSBpbiBwYXJlbnRoZXNlc1xyXG4gICAgICBjb25zdCBtZXRhZGF0YU1hdGNoID0gaXRlbVN0ci5tYXRjaCgvXiguKj8pXFwoKC4qKVxcKSQvKTtcclxuICAgICAgbGV0IGJhc2VTdHIgPSBpdGVtU3RyO1xyXG4gICAgICBsZXQgbWV0YWRhdGFTdHIgPSAnJztcclxuXHJcbiAgICAgIGlmIChtZXRhZGF0YU1hdGNoKSB7XHJcbiAgICAgICAgYmFzZVN0ciA9IG1ldGFkYXRhTWF0Y2hbMV07XHJcbiAgICAgICAgbWV0YWRhdGFTdHIgPSBtZXRhZGF0YU1hdGNoWzJdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgZGlzcGxheSBuYW1lIGFsaWFzIGFuZCBhZ2dyZWdhdGUgZnVuY3Rpb25cclxuICAgICAgY29uc3QgYWxpYXNNYXRjaCA9IGJhc2VTdHIubWF0Y2goL14oLio/KSg/Olxccythc1xccysoLio/KSk/KD86XFxzK3dpdGhcXHMrKFxcdyspKT8kLyk7XHJcbiAgICAgIGlmIChhbGlhc01hdGNoKSB7XHJcbiAgICAgICAgaXRlbS5wcm9wZXJ0eU5hbWUgPSBhbGlhc01hdGNoWzFdLnRyaW0oKTtcclxuICAgICAgICBpZiAoYWxpYXNNYXRjaFsyXSkge1xyXG4gICAgICAgICAgaXRlbS5kaXNwbGF5TmFtZSA9IGFsaWFzTWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWxpYXNNYXRjaFszXSkge1xyXG4gICAgICAgICAgaXRlbS5hZ2dyZWdhdGVGdW5jdGlvbiA9IGFsaWFzTWF0Y2hbM10udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpdGVtLnByb3BlcnR5TmFtZSA9IGJhc2VTdHIudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQYXJzZSBtZXRhZGF0YVxyXG4gICAgICBpZiAobWV0YWRhdGFTdHIpIHtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YVBhcnRzID0gbWV0YWRhdGFTdHIuc3BsaXQoJzsnKTtcclxuICAgICAgICBtZXRhZGF0YVBhcnRzLmZvckVhY2gocGFydCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0LnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICAgICAgaXRlbS5pc1Zpc2libGUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUFnZ3JlZ2F0ZShhZ2dyZWdhdGVTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoYWdncmVnYXRlU3RyaW5nKTtcclxuICAgIGNvbnN0IGFnZ3JlZ2F0ZXMgPSBkZWNvZGVkU3RyaW5nLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgcGFyYW1zLmFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGVzLm1hcChhZ2dTdHIgPT4ge1xyXG4gICAgICBjb25zdCBhZ2c6IEFnZ3JlZ2F0ZUNvbmZpZyA9IHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICcnLFxyXG4gICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uOiAnJ1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gTWF0Y2ggcGF0dGVybjogZnVuY3Rpb24ocHJvcGVydHkpIGFzIGFsaWFzXHJcbiAgICAgIGNvbnN0IG1hdGNoID0gYWdnU3RyLm1hdGNoKC9eKFxcdyspXFwoKFxcdyspXFwpKD86XFxzK2FzXFxzKyhcXHcrKSk/JC8pO1xyXG4gICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICBhZ2cuYWdncmVnYXRlRnVuY3Rpb24gPSBtYXRjaFsxXTtcclxuICAgICAgICBhZ2cucHJvcGVydHlOYW1lID0gbWF0Y2hbMl07XHJcbiAgICAgICAgaWYgKG1hdGNoWzNdKSB7XHJcbiAgICAgICAgICBhZ2cuYWxpYXMgPSBtYXRjaFszXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhZ2c7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gY29udmVydCBRdWVyeVBhcmFtZXRlcnMgdG8gT0RhdGFRdWVyeVBhcmFtZXRlcnMgKEMjIGVxdWl2YWxlbnQpXHJcbiAgc3RhdGljIHRvT0RhdGFRdWVyeVBhcmFtZXRlcnMocGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgRmlsdGVyczogcGFyYW1zLmZpbHRlcnMubWFwKGdyb3VwID0+ICh7XHJcbiAgICAgICAgTG9naWNhbE9wZXJhdG9yOiBncm91cC5sb2dpY2FsT3BlcmF0b3IsXHJcbiAgICAgICAgR3JvdXBMb2dpY2FsT3BlcmF0b3I6IGdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yLFxyXG4gICAgICAgIENvbmRpdGlvbnM6IGdyb3VwLmNvbmRpdGlvbnMubWFwKGNvbmQgPT4gKHtcclxuICAgICAgICAgIEZpZWxkOiBjb25kLmZpZWxkLFxyXG4gICAgICAgICAgT3BlcmF0b3I6IGNvbmQub3BlcmF0b3IsXHJcbiAgICAgICAgICBWYWx1ZTogY29uZC52YWx1ZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICB9KSksXHJcbiAgICAgIE9yZGVyQnk6IHBhcmFtcy5vcmRlckJ5Py5tYXAob3JkZXIgPT4gKHtcclxuICAgICAgICBGaWVsZDogb3JkZXIuZmllbGQsXHJcbiAgICAgICAgRGlyZWN0aW9uOiBvcmRlci5kaXJlY3Rpb25cclxuICAgICAgfSkpIHx8IFtdLFxyXG4gICAgICBHcm91cEJ5OiBwYXJhbXMuZ3JvdXBCeT8ubWFwKGdyb3VwID0+ICh7XHJcbiAgICAgICAgUHJvcGVydHlOYW1lOiBncm91cC5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgRGlzcGxheU5hbWU6IGdyb3VwLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgIFNob3dUb3RhbDogZ3JvdXAuc2hvd1RvdGFsID8/IHRydWUsXHJcbiAgICAgICAgVG90YWxCYWNrZ3JvdW5kOiBncm91cC50b3RhbEJhY2tncm91bmQsXHJcbiAgICAgICAgR3JvdXBIZWFkZXJCYWNrZ3JvdW5kOiBncm91cC5ncm91cEhlYWRlckJhY2tncm91bmQsXHJcbiAgICAgICAgT3JkZXI6IGdyb3VwLm9yZGVyXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgU2VsZWN0OiBwYXJhbXMuc2VsZWN0Py5tYXAoc2VsID0+ICh7XHJcbiAgICAgICAgUHJvcGVydHlOYW1lOiBzZWwucHJvcGVydHlOYW1lLFxyXG4gICAgICAgIERpc3BsYXlOYW1lOiBzZWwuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgQWdncmVnYXRlRnVuY3Rpb246IHNlbC5hZ2dyZWdhdGVGdW5jdGlvbixcclxuICAgICAgICBJc1Zpc2libGU6IHNlbC5pc1Zpc2libGUgPz8gdHJ1ZSxcclxuICAgICAgICBPcmRlcjogc2VsLm9yZGVyXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgQWdncmVnYXRlczogcGFyYW1zLmFnZ3JlZ2F0ZXM/Lm1hcChhZ2cgPT4gKHtcclxuICAgICAgICBQcm9wZXJ0eU5hbWU6IGFnZy5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgQWdncmVnYXRlRnVuY3Rpb246IGFnZy5hZ2dyZWdhdGVGdW5jdGlvbixcclxuICAgICAgICBBbGlhczogYWdnLmFsaWFzXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgVG9wOiBwYXJhbXMudG9wLFxyXG4gICAgICBTa2lwOiBwYXJhbXMuc2tpcCxcclxuICAgICAgRXhwYW5kOiBwYXJhbXMuZXhwYW5kLFxyXG4gICAgICBJbmNsdWRlQ291bnQ6IHBhcmFtcy5pbmNsdWRlQ291bnRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gVUkgbW9kZWxcclxuICBzdGF0aWMgZnJvbVVJTW9kZWwobW9kZWw6IGFueSk6IFF1ZXJ5UGFyYW1ldGVycyB7XHJcbiAgICBjb25zdCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyA9IHtcclxuICAgICAgZmlsdGVyczogbW9kZWwuYWR2YW5jZWRGaWx0ZXJzIHx8IFtdLFxyXG4gICAgICBvcmRlckJ5OiBtb2RlbC5zb3J0aW5nIHx8IFtdLFxyXG4gICAgICBncm91cEJ5OiBtb2RlbC5ncm91cGluZyB8fCBbXSxcclxuICAgICAgc2VsZWN0OiBtb2RlbC5jb2x1bW5zIHx8IFtdLFxyXG4gICAgICBhZ2dyZWdhdGVzOiBtb2RlbC5hZ2dyZWdhdGVzIHx8IFtdLFxyXG4gICAgICB0b3A6IG1vZGVsLnBhZ2luYXRpb24/LnRvcCxcclxuICAgICAgc2tpcDogbW9kZWwucGFnaW5hdGlvbj8uc2tpcCxcclxuICAgICAgZXhwYW5kOiBtb2RlbC5leHBhbmQsXHJcbiAgICAgIGluY2x1ZGVDb3VudDogbW9kZWwucGFnaW5hdGlvbj8uaW5jbHVkZUNvdW50XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { filter, take } from 'rxjs/operators';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport { ConfigStateService } from './config-state.service';\nimport { SsrCookieService } from './ssr-cookie.service';\nimport compare from 'just-compare';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./config-state.service\";\nimport * as i2 from \"./ssr-cookie.service\";\nexport class SessionStateService {\n configState;\n localStorageService;\n store = new InternalStore({});\n document = inject(DOCUMENT);\n updateLocalStorage = () => {\n this.localStorageService.set('abpSession', JSON.stringify(this.store.state), { expires: new Date(new Date().getTime() + 365 * 86400000), path: '/' });\n };\n constructor(configState, localStorageService) {\n this.configState = configState;\n this.localStorageService = localStorageService;\n this.init();\n this.setInitialLanguage();\n }\n init() {\n const session = this.localStorageService.get('abpSession');\n if (session) {\n this.store.set(JSON.parse(session));\n }\n this.store.sliceUpdate(state => state).subscribe(this.updateLocalStorage);\n }\n setInitialLanguage() {\n const appLanguage = this.getLanguage();\n this.configState\n .getDeep$('localization.currentCulture.cultureName')\n .pipe(filter(cultureName => !!cultureName), take(1))\n .subscribe(lang => {\n if (lang.includes(';')) {\n lang = lang.split(';')[0];\n }\n this.setLanguage(lang);\n });\n }\n onLanguageChange$() {\n return this.store.sliceUpdate(state => state.language);\n }\n onTenantChange$() {\n return this.store.sliceUpdate(state => state.tenant);\n }\n getLanguage() {\n return this.store.state.language;\n }\n getLanguage$() {\n return this.store.sliceState(state => state.language);\n }\n getTenant() {\n return this.store.state.tenant;\n }\n getTenant$() {\n return this.store.sliceState(state => state.tenant);\n }\n setTenant(tenant) {\n if (compare(tenant, this.store.state.tenant))\n return;\n this.store.set({ ...this.store.state, tenant });\n }\n setState(session) {\n if (compare(session, this.store.state))\n return;\n this.store.set({ ...this.store.state, ...session });\n }\n setLanguage(language) {\n const currentLanguage = this.store.state.language;\n if (language !== currentLanguage) {\n this.store.patch({ language });\n }\n const currentAttribute = this.document.documentElement.getAttribute('lang');\n if (language !== currentAttribute) {\n this.document.documentElement.setAttribute('lang', language);\n }\n }\n get application() {\n return this.store.state.application;\n }\n get user() {\n return this.store.state.user;\n }\n get userId() {\n return this.user ? this.user.id : 0;\n }\n get tenant() {\n return this.store.state.tenant;\n }\n get branch() {\n return this.store.state.branch;\n }\n /* get branchName(): BranchLoginInfoDto {\n return this._branch ? this.branch.Name : '';\n\n } */\n get tenancyName() {\n return this.store.state.tenant ? this.tenant?.tenancyName : '';\n }\n get branchId() {\n // return this.branch ? this.branch.id : this.configState.Session?.branchId ? this.configState.Session.branchId:null;\n return this.branch ? this.branch.id : 0;\n }\n get tenantId() {\n return this.tenant ? this.tenant.id : 0;\n }\n getShownLoginName() {\n const userName = this.store.state.user?.userName ?? '';\n if (!this.multiTenancySide) {\n return userName;\n }\n return (this.store.state.tenant ? this.store.state.tenant.tenancyName : '.') + '\\\\' + userName;\n }\n changeTenantIfNeeded(tenantId) {\n if (this.isCurrentTenant(tenantId)) {\n return false;\n }\n // this.configState.SetTenantIdCookie(tenantId);\n location.reload();\n return true;\n }\n isCurrentTenant(tenantId) {\n let isTenant = tenantId ?? 0 > 0;\n if (!isTenant && !this.tenant) { // this is host\n return true;\n }\n if (!tenantId && this.tenant) {\n return false;\n }\n else if (tenantId && (!this.tenant || this.tenant.id !== tenantId)) {\n return false;\n }\n return true;\n }\n get impersonatorUser() {\n return this.store.state.impersonatorUser;\n }\n get impersonatorUserId() {\n return this.impersonatorUser ? this.impersonatorUser.id : 0;\n }\n get impersonatorTenant() {\n return this.store.state.impersonatorTenant;\n }\n get impersonatorTenancyName() {\n return this.impersonatorTenant ? this.impersonatorTenant?.tenancyName ?? '' : '';\n }\n get impersonatorTenantId() {\n return this.impersonatorTenant ? this.impersonatorTenant.id : 0;\n }\n get multiTenancySide() {\n // return this.configState.session?.multiTenancySide;\n return 0;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SessionStateService, deps: [{ token: i1.ConfigStateService }, { token: i2.SsrCookieService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SessionStateService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SessionStateService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.ConfigStateService }, { type: i2.SsrCookieService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvc2Vzc2lvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7Ozs7QUFLbkMsTUFBTSxPQUFPLG1CQUFtQjtJQVVwQjtJQUNBO0lBVk8sS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQW1CLENBQUMsQ0FBQztJQUM3QyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBR3ZDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUMsRUFBQyxPQUFPLEVBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDbkosQ0FBQyxDQUFDO0lBRUYsWUFDVSxXQUErQixFQUMvQixtQkFB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QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBSUQsSUFBSSxnQkFBZ0I7UUFDaEIscURBQXFEO1FBQ3JELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzt1R0E3TFEsbUJBQW1COzJHQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW50ZXJuYWxTdG9yZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS91dGlscyc7XG5pbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNzckNvb2tpZVNlcnZpY2UgfSBmcm9tICcuL3Nzci1jb29raWUuc2VydmljZSc7XG5pbXBvcnQgeyBDdXJyZW50VGVuYW50RHRvLCBTZXNzaW9uIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5pbXBvcnQgY29tcGFyZSBmcm9tICdqdXN0LWNvbXBhcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2Vzc2lvblN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZSh7fSBhcyBTZXNzaW9uLlN0YXRlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuXG4gIHByaXZhdGUgdXBkYXRlTG9jYWxTdG9yYWdlID0gKCkgPT4ge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXQoJ2FicFNlc3Npb24nLCBKU09OLnN0cmluZ2lmeSh0aGlzLnN0b3JlLnN0YXRlKSx7ZXhwaXJlczpuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDM2NSAqIDg2NDAwMDAwKSwgcGF0aDonLyd9KTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBTc3JDb29raWVTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLnNldEluaXRpYWxMYW5ndWFnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0KCdhYnBTZXNzaW9uJyk7XG4gICAgaWYgKHNlc3Npb24pIHtcbiAgICAgIHRoaXMuc3RvcmUuc2V0KEpTT04ucGFyc2Uoc2Vzc2lvbikpO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcmUuc2xpY2VVcGRhdGUoc3RhdGUgPT4gc3RhdGUpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsU3RvcmFnZSk7XG4gIH1cblxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbExhbmd1YWdlKCkge1xuICAgIGNvbnN0IGFwcExhbmd1YWdlID0gdGhpcy5nZXRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5jb25maWdTdGF0ZVxuICAgICAgLmdldERlZXAkKCdsb2NhbGl6YXRpb24uY3VycmVudEN1bHR1cmUuY3VsdHVyZU5hbWUnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihjdWx0dXJlTmFtZSA9PiAhIWN1bHR1cmVOYW1lKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUobGFuZyA9PiB7XG4gICAgICAgIGlmIChsYW5nLmluY2x1ZGVzKCc7JykpIHtcbiAgICAgICAgICBsYW5nID0gbGFuZy5zcGxpdCgnOycpWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRMYW5ndWFnZShsYW5nKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VVcGRhdGUoc3RhdGUgPT4gc3RhdGUubGFuZ3VhZ2UpO1xuICB9XG5cbiAgb25UZW5hbnRDaGFuZ2UkKCkge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlVXBkYXRlKHN0YXRlID0+IHN0YXRlLnRlbmFudCk7XG4gIH1cblxuICBnZXRMYW5ndWFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS5sYW5ndWFnZTtcbiAgfVxuXG4gIGdldExhbmd1YWdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlLmxhbmd1YWdlKTtcbiAgfVxuXG4gIGdldFRlbmFudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS50ZW5hbnQ7XG4gIH1cblxuICBnZXRUZW5hbnQkKCkge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUudGVuYW50KTtcbiAgfVxuXG4gIHNldFRlbmFudCh0ZW5hbnQ6IEN1cnJlbnRUZW5hbnREdG8gfCBudWxsKSB7XG4gICAgaWYgKGNvbXBhcmUodGVuYW50LCB0aGlzLnN0b3JlLnN0YXRlLnRlbmFudCkpIHJldHVybjtcblxuICAgIHRoaXMuc3RvcmUuc2V0KHsgLi4udGhpcy5zdG9yZS5zdGF0ZSwgdGVuYW50IH0pO1xuICB9XG4gIHNldFN0YXRlKHNlc3Npb246IFNlc3Npb24uU3RhdGUgfCBudWxsKSB7XG4gICAgaWYgKGNvbXBhcmUoc2Vzc2lvbiwgdGhpcy5zdG9yZS5zdGF0ZSkpIHJldHVybjtcblxuICAgIHRoaXMuc3RvcmUuc2V0KHsgLi4udGhpcy5zdG9yZS5zdGF0ZSwgLi4uc2Vzc2lvbiB9KTtcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UgPSB0aGlzLnN0b3JlLnN0YXRlLmxhbmd1YWdlO1xuXG4gICAgaWYgKGxhbmd1YWdlICE9PSBjdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuc3RvcmUucGF0Y2goeyBsYW5ndWFnZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50QXR0cmlidXRlID0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYW5nJyk7XG4gICAgaWYgKGxhbmd1YWdlICE9PSBjdXJyZW50QXR0cmlidXRlKSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBsYW5ndWFnZSk7XG4gICAgfVxuICB9XG5cblxuICAgIGdldCBhcHBsaWNhdGlvbigpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS5hcHBsaWNhdGlvbjtcbiAgICB9XG5cblxuXG4gICAgZ2V0IHVzZXIoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGUudXNlcjtcbiAgICB9XG5cbiAgICBnZXQgdXNlcklkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXIgPyB0aGlzLnVzZXIuaWQgOiAwO1xuICAgIH1cblxuICAgIGdldCB0ZW5hbnQoKTogYW55IHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLnRlbmFudDtcbiAgICB9XG4gICAgZ2V0IGJyYW5jaCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS5icmFuY2g7XG4gICAgfVxuICAgIC8qIGdldCBicmFuY2hOYW1lKCk6IEJyYW5jaExvZ2luSW5mb0R0byB7XG4gICAgICAgIHJldHVybiB0aGlzLl9icmFuY2ggPyB0aGlzLmJyYW5jaC5OYW1lIDogJyc7XG5cbiAgICB9ICovXG4gICAgZ2V0IHRlbmFuY3lOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGx8YW55e1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS50ZW5hbnQgPyB0aGlzLnRlbmFudD8udGVuYW5jeU5hbWUgOiAnJztcbiAgICB9XG4gICAgZ2V0IGJyYW5jaElkKCk6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICAvLyByZXR1cm4gdGhpcy5icmFuY2ggPyB0aGlzLmJyYW5jaC5pZCA6IHRoaXMuY29uZmlnU3RhdGUuU2Vzc2lvbj8uYnJhbmNoSWQgPyB0aGlzLmNvbmZpZ1N0YXRlLlNlc3Npb24uYnJhbmNoSWQ6bnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoID8gdGhpcy5icmFuY2guaWQgOiAwO1xuICAgIH1cbiAgICBnZXQgdGVuYW50SWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVuYW50ID8gdGhpcy50ZW5hbnQuaWQgOiAwO1xuICAgIH1cblxuICAgIGdldFNob3duTG9naW5OYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHVzZXJOYW1lID0gdGhpcy5zdG9yZS5zdGF0ZS51c2VyPy51c2VyTmFtZSA/PyAnJztcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpVGVuYW5jeVNpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1c2VyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAodGhpcy5zdG9yZS5zdGF0ZS50ZW5hbnQgPyB0aGlzLnN0b3JlLnN0YXRlLnRlbmFudC50ZW5hbmN5TmFtZSA6ICcuJykgKyAnXFxcXCcgKyB1c2VyTmFtZTtcbiAgICB9XG5cblxuXG5cblxuICAgIGNoYW5nZVRlbmFudElmTmVlZGVkKHRlbmFudElkPzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzQ3VycmVudFRlbmFudCh0ZW5hbnRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuY29uZmlnU3RhdGUuU2V0VGVuYW50SWRDb29raWUodGVuYW50SWQpO1xuICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0N1cnJlbnRUZW5hbnQodGVuYW50SWQ/OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGlzVGVuYW50ID0gdGVuYW50SWQgPz8gMCA+IDA7XG5cbiAgICAgICAgaWYgKCFpc1RlbmFudCAmJiAhdGhpcy50ZW5hbnQpIHsgLy8gdGhpcyBpcyBob3N0XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGVuYW50SWQgJiYgdGhpcy50ZW5hbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZW5hbnRJZCAmJiAoIXRoaXMudGVuYW50IHx8IHRoaXMudGVuYW50LmlkICE9PSB0ZW5hbnRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldCBpbXBlcnNvbmF0b3JVc2VyKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLmltcGVyc29uYXRvclVzZXI7XG4gICAgfVxuICAgIGdldCBpbXBlcnNvbmF0b3JVc2VySWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wZXJzb25hdG9yVXNlciA/IHRoaXMuaW1wZXJzb25hdG9yVXNlci5pZCA6IDA7XG4gICAgfVxuICAgIGdldCBpbXBlcnNvbmF0b3JUZW5hbnQoKTogYW55ICB8IG51bGx7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLmltcGVyc29uYXRvclRlbmFudDtcbiAgICB9XG4gICAgZ2V0IGltcGVyc29uYXRvclRlbmFuY3lOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmltcGVyc29uYXRvclRlbmFudCA/IHRoaXMuaW1wZXJzb25hdG9yVGVuYW50Py50ZW5hbmN5TmFtZSA/PyAnJyA6ICcnO1xuICAgIH1cbiAgICBnZXQgaW1wZXJzb25hdG9yVGVuYW50SWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wZXJzb25hdG9yVGVuYW50ID8gdGhpcy5pbXBlcnNvbmF0b3JUZW5hbnQuaWQgOiAwO1xuICAgIH1cblxuXG5cbiAgICBnZXQgbXVsdGlUZW5hbmN5U2lkZSgpOiBhbnkge1xuICAgICAgICAvLyByZXR1cm4gdGhpcy5jb25maWdTdGF0ZS5zZXNzaW9uPy5tdWx0aVRlbmFuY3lTaWRlO1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbn1cbiJdfQ==","import { registerLocaleData } from '@angular/common';\nimport { Injectable, Injector, isDevMode, Optional, SkipSelf } from '@angular/core';\nimport { localizations$, CORE_OPTIONS } from '@elite.framework/ng.core/tokens';\nimport { BehaviorSubject, combineLatest, from, Subject } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { ConfigStateService } from './config-state.service';\nimport { createLocalizer, createLocalizerWithFallback, interpolate } from '@elite.framework/ng.core/utils';\nimport { SessionStateService } from './session-state.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./session-state.service\";\nimport * as i2 from \"./config-state.service\";\nexport class LocalizationService {\n sessionState;\n injector;\n configState;\n latestLang = 'ar';\n _languageChange$ = new Subject();\n uiLocalizations$ = new BehaviorSubject(new Map());\n localizations$ = new BehaviorSubject(new Map());\n /**\n * Returns currently selected language\n * Even though this looks like it's redundant to return the same value as `getLanguage()`,\n * it's actually not. This could be invoked any time, and the latestLang could be different from the\n * sessionState.getLanguage() value.\n */\n get currentLanguage() {\n return this.latestLang || this.sessionState.getLanguage();\n }\n get currentLang() {\n return this.latestLang || this.sessionState.getLanguage();\n }\n get currentLang$() {\n return this.sessionState.getLanguage$();\n }\n get languageChange$() {\n return this._languageChange$.asObservable();\n }\n constructor(sessionState, injector, otherInstance, configState) {\n this.sessionState = sessionState;\n this.injector = injector;\n this.configState = configState;\n if (otherInstance)\n throw new Error('LocalizationService should have only one instance.');\n this.listenToSetLanguage();\n this.initLocalizationValues();\n this.latestLang = this.sessionState.getLanguage();\n }\n initLocalizationValues() {\n localizations$.subscribe(val => this.addLocalization(val));\n const legacyResources$ = this.configState.getDeep$('localization.values');\n const remoteLocalizations$ = this.configState.getDeep$('localization.resources');\n const currentLanguage$ = this.sessionState.getLanguage$();\n const uiLocalizations$ = combineLatest([currentLanguage$, this.uiLocalizations$]).pipe(map(([currentLang, localizations]) => localizations.get(currentLang)));\n combineLatest([legacyResources$, remoteLocalizations$, uiLocalizations$])\n .pipe(map(([legacy, resource, local]) => {\n if (!resource) {\n return null;\n }\n const remote = combineLegacyandNewResources(legacy || {}, resource);\n if (remote) {\n if (!local) {\n local = new Map();\n }\n Object.entries(remote).forEach(entry => {\n const resourceName = entry[0];\n const remoteTexts = entry[1];\n let resource = local?.get(resourceName) || {};\n resource = { ...resource, ...remoteTexts };\n local?.set(resourceName, resource);\n });\n }\n return local;\n }), filter(Boolean))\n .subscribe(val => this.localizations$.next(val));\n }\n addLocalization(localizations) {\n if (!localizations)\n return;\n const localizationMap = this.uiLocalizations$.value;\n localizations.forEach(loc => {\n const cultureMap = localizationMap.get(loc.culture) || new Map();\n loc.resources.forEach(res => {\n let resource = cultureMap.get(res.resourceName) || {};\n resource = { ...resource, ...res.texts };\n cultureMap.set(res.resourceName, resource);\n });\n localizationMap.set(loc.culture, cultureMap);\n });\n this.uiLocalizations$.next(localizationMap);\n }\n listenToSetLanguage() {\n this.sessionState\n .onLanguageChange$()\n .pipe(filter(lang => this.configState.getDeep('localization.currentCulture.cultureName') !== lang), switchMap((lang) => this.configState.refreshLocalization(lang).pipe(map(() => lang))), filter(Boolean), switchMap((lang) => from(this.registerLocale(lang).then(() => lang))))\n .subscribe((lang) => this._languageChange$.next(lang));\n }\n registerLocale(locale) {\n const { registerLocaleFn } = this.injector.get(CORE_OPTIONS);\n return registerLocaleFn(locale).then(module => {\n if (module?.default)\n registerLocaleData(module.default);\n this.latestLang = locale;\n });\n }\n /**\n * Returns an observable localized text with the given interpolation parameters in current language.\n * @param key Localizaton key to replace with localized text\n * @param interpolateParams Values to interpolate\n */\n get(key, ...interpolateParams) {\n return this.configState\n .getAll$()\n .pipe(map(state => this.getLocalization(state, key, ...interpolateParams)));\n }\n getResource(resourceName) {\n return this.localizations$.value.get(resourceName);\n }\n getResource$(resourceName) {\n return this.localizations$.pipe(map(res => res.get(resourceName)));\n }\n /**\n * Returns localized text with the given interpolation parameters in current language.\n * @param key Localization key to replace with localized text\n * @param interpolateParams Values to intepolate.\n */\n instant(key, ...interpolateParams) {\n return this.getLocalization(this.configState.getAll(), key, ...interpolateParams);\n }\n localize(resourceName, key, defaultValue) {\n return this.configState.getOne$('localization').pipe(map(createLocalizer), map((localize) => localize(resourceName, key, defaultValue)));\n }\n get defaultResourceName() {\n return this.configState.getAll().localization ? this.configState.getAll().localization.defaultResourceName : 'FrameworkLocalization';\n }\n l(key) {\n const localization = this.configState.getOne('localization');\n return createLocalizer(localization)(this.defaultResourceName ?? '', key, key);\n }\n localizeSync(resourceName, key, defaultValue) {\n const localization = this.configState.getOne('localization');\n return createLocalizer(localization)(resourceName, key, defaultValue);\n }\n localizeWithFallback(resourceNames, keys, defaultValue) {\n return this.configState.getOne$('localization').pipe(map(createLocalizerWithFallback), map((localizeWithFallback) => localizeWithFallback(resourceNames, keys, defaultValue)));\n }\n localizeWithFallbackSync(resourceNames, keys, defaultValue) {\n const localization = this.configState.getOne('localization');\n return createLocalizerWithFallback(localization)(resourceNames, keys, defaultValue);\n }\n getLocalization(state, key, ...interpolateParams) {\n let defaultValue = '';\n if (!key) {\n return defaultValue;\n }\n if (typeof key !== 'string') {\n defaultValue = key.defaultValue;\n key = key.key;\n }\n const keys = key.split('::');\n const warn = (message) => {\n if (isDevMode())\n console.warn(message);\n };\n if (keys.length < 2) {\n warn('The localization source separator (::) not found.');\n return defaultValue || key;\n }\n if (!state.localization)\n return defaultValue || keys[1];\n const sourceName = keys[0] || state.localization.defaultResourceName;\n const sourceKey = keys[1];\n if (sourceName === '_') {\n return defaultValue || sourceKey;\n }\n if (!sourceName) {\n warn('Localization source name is not specified and the defaultResourceName was not defined!');\n return defaultValue || sourceKey;\n }\n const source = this.localizations$.value.get(sourceName);\n if (!source) {\n warn('Could not find localization source: ' + sourceName);\n return defaultValue || sourceKey;\n }\n let localization = source[sourceKey];\n if (typeof localization === 'undefined') {\n return defaultValue || sourceKey;\n }\n interpolateParams = interpolateParams.filter(params => params != null);\n if (localization)\n localization = interpolate(localization, interpolateParams);\n if (typeof localization !== 'string')\n localization = '';\n return localization || defaultValue || key;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalizationService, deps: [{ token: i1.SessionStateService }, { token: i0.Injector }, { token: LocalizationService, optional: true, skipSelf: true }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalizationService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalizationService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.SessionStateService }, { type: i0.Injector }, { type: LocalizationService, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: i2.ConfigStateService }] });\nfunction recursivelyMergeBaseResources(baseResourceName, source) {\n const item = source[baseResourceName];\n if (item.baseResources.length === 0) {\n return item;\n }\n return item.baseResources.reduce((acc, baseResource) => {\n const baseItem = recursivelyMergeBaseResources(baseResource, source);\n const texts = { ...baseItem.texts, ...item.texts };\n return { ...acc, texts };\n }, item);\n}\nfunction mergeResourcesWithBaseResource(resource) {\n const entities = Object.keys(resource).map(key => {\n const newValue = recursivelyMergeBaseResources(key, resource);\n return [key, newValue];\n });\n return entities.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});\n}\nfunction combineLegacyandNewResources(legacy, resource) {\n const mergedResource = mergeResourcesWithBaseResource(resource);\n return Object.entries(mergedResource).reduce((acc, [key, value]) => {\n return { ...acc, [key]: value.texts };\n }, legacy);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9sb2NhbGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUs5RCxNQUFNLE9BQU8sbUJBQW1CO0lBZ0NwQjtJQUNBO0lBSUE7SUFwQ0gsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNqQixnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0lBRXpDLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUM1QyxJQUFJLEdBQUcsRUFBK0MsQ0FDdkQsQ0FBQztJQUVNLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEdBQUcsRUFBa0MsQ0FBQyxDQUFDO0lBRXhGOzs7OztPQUtHO0lBQ0YsSUFBSSxlQUFlO1FBQ2xCLE9B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Q0FBQyxFQUFFLEVBQUU7UUFDakUsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIGlzRGV2TW9kZSwgT3B0aW9uYWwsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvLCBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8sIExvY2FsaXphdGlvbiwgUm9vdCwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcbmltcG9ydCB7IGxvY2FsaXphdGlvbnMkLCBDT1JFX09QVElPTlMgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgY3JlYXRlTG9jYWxpemVyLCBjcmVhdGVMb2NhbGl6ZXJXaXRoRmFsbGJhY2ssIGludGVycG9sYXRlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tc3RhdGUuc2VydmljZSc7XG5cblxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExvY2FsaXphdGlvblNlcnZpY2Uge1xuIHByaXZhdGUgbGF0ZXN0TGFuZyA9ICdhcic7XG4gIHByaXZhdGUgX2xhbmd1YWdlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIHVpTG9jYWxpemF0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj4oKSxcbiAgKTtcblxuICBwcml2YXRlIGxvY2FsaXphdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudGx5IHNlbGVjdGVkIGxhbmd1YWdlXG4gICAqIEV2ZW4gdGhvdWdoIHRoaXMgbG9va3MgbGlrZSBpdCdzIHJlZHVuZGFudCB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgYGdldExhbmd1YWdlKClgLFxuICAgKiBpdCdzIGFjdHVhbGx5IG5vdC4gVGhpcyBjb3VsZCBiZSBpbnZva2VkIGFueSB0aW1lLCBhbmQgdGhlIGxhdGVzdExhbmcgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlXG4gICAqIHNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpIHZhbHVlLlxuICAgKi9cbiAgIGdldCBjdXJyZW50TGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYXRlc3RMYW5nIHx8IHRoaXMuc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnRMYW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGF0ZXN0TGFuZyB8fCB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMYW5nJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSQoKTtcbiAgfVxuXG4gIGdldCBsYW5ndWFnZUNoYW5nZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VDaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RhdGU6IFNlc3Npb25TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQE9wdGlvbmFsKClcbiAgICBAU2tpcFNlbGYoKVxuICAgIG90aGVySW5zdGFuY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxuICApIHtcbiAgICBpZiAob3RoZXJJbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGl6YXRpb25TZXJ2aWNlIHNob3VsZCBoYXZlIG9ubHkgb25lIGluc3RhbmNlLicpO1xuXG4gICAgdGhpcy5saXN0ZW5Ub1NldExhbmd1YWdlKCk7XG4gICAgdGhpcy5pbml0TG9jYWxpemF0aW9uVmFsdWVzKCk7XG4gICAgIHRoaXMubGF0ZXN0TGFuZyA9IHRoaXMuc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRMb2NhbGl6YXRpb25WYWx1ZXMoKSB7XG4gICAgbG9jYWxpemF0aW9ucyQuc3Vic2NyaWJlKHZhbCA9PiB0aGlzLmFkZExvY2FsaXphdGlvbih2YWwpKTtcblxuICAgIGNvbnN0IGxlZ2FjeVJlc291cmNlcyQgPSB0aGlzLmNvbmZpZ1N0YXRlLmdldERlZXAkKCdsb2NhbGl6YXRpb24udmFsdWVzJykgYXMgT2JzZXJ2YWJsZTxcbiAgICAgIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+XG4gICAgPjtcblxuICAgIGNvbnN0IHJlbW90ZUxvY2FsaXphdGlvbnMkID0gdGhpcy5jb25maWdTdGF0ZS5nZXREZWVwJCgnbG9jYWxpemF0aW9uLnJlc291cmNlcycpIGFzIE9ic2VydmFibGU8XG4gICAgICBSZWNvcmQ8c3RyaW5nLCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvPlxuICAgID47XG5cbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UkID0gdGhpcy5zZXNzaW9uU3RhdGUuZ2V0TGFuZ3VhZ2UkKCk7XG5cbiAgICBjb25zdCB1aUxvY2FsaXphdGlvbnMkID0gY29tYmluZUxhdGVzdChbY3VycmVudExhbmd1YWdlJCwgdGhpcy51aUxvY2FsaXphdGlvbnMkXSkucGlwZShcbiAgICAgIG1hcCgoW2N1cnJlbnRMYW5nLCBsb2NhbGl6YXRpb25zXSkgPT4gbG9jYWxpemF0aW9ucy5nZXQoY3VycmVudExhbmcpKSxcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbbGVnYWN5UmVzb3VyY2VzJCwgcmVtb3RlTG9jYWxpemF0aW9ucyQsIHVpTG9jYWxpemF0aW9ucyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW2xlZ2FjeSwgcmVzb3VyY2UsIGxvY2FsXSkgPT4ge1xuICAgICAgICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZW1vdGUgPSBjb21iaW5lTGVnYWN5YW5kTmV3UmVzb3VyY2VzKGxlZ2FjeSB8fCB7fSwgcmVzb3VyY2UpO1xuICAgICAgICAgIGlmIChyZW1vdGUpIHtcbiAgICAgICAgICAgIGlmICghbG9jYWwpIHtcbiAgICAgICAgICAgICAgbG9jYWwgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlbW90ZSkuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGVudHJ5WzBdO1xuICAgICAgICAgICAgICBjb25zdCByZW1vdGVUZXh0cyA9IGVudHJ5WzFdO1xuICAgICAgICAgICAgICBsZXQgcmVzb3VyY2UgPSBsb2NhbD8uZ2V0KHJlc291cmNlTmFtZSkgfHwge307XG4gICAgICAgICAgICAgIHJlc291cmNlID0geyAuLi5yZXNvdXJjZSwgLi4ucmVtb3RlVGV4dHMgfTtcblxuICAgICAgICAgICAgICBsb2NhbD8uc2V0KHJlc291cmNlTmFtZSwgcmVzb3VyY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGxvY2FsO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh2YWwgPT4gdGhpcy5sb2NhbGl6YXRpb25zJC5uZXh0KHZhbCkpO1xuICB9XG5cbiAgYWRkTG9jYWxpemF0aW9uKGxvY2FsaXphdGlvbnM/OiBMb2NhbGl6YXRpb25bXSkge1xuICAgIGlmICghbG9jYWxpemF0aW9ucykgcmV0dXJuO1xuXG4gICAgY29uc3QgbG9jYWxpemF0aW9uTWFwID0gdGhpcy51aUxvY2FsaXphdGlvbnMkLnZhbHVlO1xuXG4gICAgbG9jYWxpemF0aW9ucy5mb3JFYWNoKGxvYyA9PiB7XG4gICAgICBjb25zdCBjdWx0dXJlTWFwID1cbiAgICAgICAgbG9jYWxpemF0aW9uTWFwLmdldChsb2MuY3VsdHVyZSkgfHwgbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCk7XG5cbiAgICAgIGxvYy5yZXNvdXJjZXMuZm9yRWFjaChyZXMgPT4ge1xuICAgICAgICBsZXQgcmVzb3VyY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBjdWx0dXJlTWFwLmdldChyZXMucmVzb3VyY2VOYW1lKSB8fCB7fTtcblxuICAgICAgICByZXNvdXJjZSA9IHsgLi4ucmVzb3VyY2UsIC4uLnJlcy50ZXh0cyB9O1xuXG4gICAgICAgIGN1bHR1cmVNYXAuc2V0KHJlcy5yZXNvdXJjZU5hbWUsIHJlc291cmNlKTtcbiAgICAgIH0pO1xuXG4gICAgICBsb2NhbGl6YXRpb25NYXAuc2V0KGxvYy5jdWx0dXJlLCBjdWx0dXJlTWFwKTtcbiAgICB9KTtcblxuICAgIHRoaXMudWlMb2NhbGl6YXRpb25zJC5uZXh0KGxvY2FsaXphdGlvbk1hcCk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRvU2V0TGFuZ3VhZ2UoKSB7XG4gICAgdGhpcy5zZXNzaW9uU3RhdGVcbiAgICAgIC5vbkxhbmd1YWdlQ2hhbmdlJCgpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIGxhbmcgPT4gdGhpcy5jb25maWdTdGF0ZS5nZXREZWVwKCdsb2NhbGl6YXRpb24uY3VycmVudEN1bHR1cmUuY3VsdHVyZU5hbWUnKSAhPT0gbGFuZyxcbiAgICAgICAgKSxcbiAgICAgICAgc3dpdGNoTWFwKChsYW5nOmFueSkgPT4gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoTG9jYWxpemF0aW9uKGxhbmcpLnBpcGUobWFwKCgpID0+IGxhbmcpKSksXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgc3dpdGNoTWFwKChsYW5nOmFueSkgPT4gZnJvbSh0aGlzLnJlZ2lzdGVyTG9jYWxlKGxhbmcpLnRoZW4oKCkgPT4gbGFuZykpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxhbmc6YW55KSA9PiB0aGlzLl9sYW5ndWFnZUNoYW5nZSQubmV4dChsYW5nKSk7XG4gIH1cblxuICByZWdpc3RlckxvY2FsZShsb2NhbGU6IHN0cmluZykge1xuICAgIGNvbnN0IHsgcmVnaXN0ZXJMb2NhbGVGbiB9OiBSb290ID0gdGhpcy5pbmplY3Rvci5nZXQoQ09SRV9PUFRJT05TKTtcblxuICAgIHJldHVybiByZWdpc3RlckxvY2FsZUZuKGxvY2FsZSkudGhlbihtb2R1bGUgPT4ge1xuICAgICAgaWYgKG1vZHVsZT8uZGVmYXVsdCkgcmVnaXN0ZXJMb2NhbGVEYXRhKG1vZHVsZS5kZWZhdWx0KTtcbiAgICAgIHRoaXMubGF0ZXN0TGFuZyA9IGxvY2FsZTtcbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIGxvY2FsaXplZCB0ZXh0IHdpdGggdGhlIGdpdmVuIGludGVycG9sYXRpb24gcGFyYW1ldGVycyBpbiBjdXJyZW50IGxhbmd1YWdlLlxuICAgKiBAcGFyYW0ga2V5IExvY2FsaXphdG9uIGtleSB0byByZXBsYWNlIHdpdGggbG9jYWxpemVkIHRleHRcbiAgICogQHBhcmFtIGludGVycG9sYXRlUGFyYW1zIFZhbHVlcyB0byBpbnRlcnBvbGF0ZVxuICAgKi9cbiAgZ2V0KGtleTogc3RyaW5nIHwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQsIC4uLmludGVycG9sYXRlUGFyYW1zOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RhdGVcbiAgICAgIC5nZXRBbGwkKClcbiAgICAgIC5waXBlKG1hcChzdGF0ZSA9PiB0aGlzLmdldExvY2FsaXphdGlvbihzdGF0ZSwga2V5LCAuLi5pbnRlcnBvbGF0ZVBhcmFtcykpKTtcbiAgfVxuXG4gIGdldFJlc291cmNlKHJlc291cmNlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9ucyQudmFsdWUuZ2V0KHJlc291cmNlTmFtZSk7XG4gIH1cblxuICBnZXRSZXNvdXJjZSQocmVzb3VyY2VOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25zJC5waXBlKG1hcChyZXMgPT4gcmVzLmdldChyZXNvdXJjZU5hbWUpKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBsb2NhbGl6ZWQgdGV4dCB3aXRoIHRoZSBnaXZlbiBpbnRlcnBvbGF0aW9uIHBhcmFtZXRlcnMgaW4gY3VycmVudCBsYW5ndWFnZS5cbiAgICogQHBhcmFtIGtleSBMb2NhbGl6YXRpb24ga2V5IHRvIHJlcGxhY2Ugd2l0aCBsb2NhbGl6ZWQgdGV4dFxuICAgKiBAcGFyYW0gaW50ZXJwb2xhdGVQYXJhbXMgVmFsdWVzIHRvIGludGVwb2xhdGUuXG4gICAqL1xuICBpbnN0YW50KGtleTogc3RyaW5nIHwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQsIC4uLmludGVycG9sYXRlUGFyYW1zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uKHRoaXMuY29uZmlnU3RhdGUuZ2V0QWxsKCksIGtleSwgLi4uaW50ZXJwb2xhdGVQYXJhbXMpO1xuICB9XG5cbiAgbG9jYWxpemUocmVzb3VyY2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSQoJ2xvY2FsaXphdGlvbicpLnBpcGUoXG4gICAgICBtYXAoY3JlYXRlTG9jYWxpemVyKSxcbiAgICAgIG1hcCgobG9jYWxpemU6YW55KSA9PiBsb2NhbGl6ZShyZXNvdXJjZU5hbWUsIGtleSwgZGVmYXVsdFZhbHVlKSksXG4gICAgKTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0UmVzb3VyY2VOYW1lKCl7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RhdGUuZ2V0QWxsKCkubG9jYWxpemF0aW9uID8gdGhpcy5jb25maWdTdGF0ZS5nZXRBbGwoKS5sb2NhbGl6YXRpb24uZGVmYXVsdFJlc291cmNlTmFtZSA6ICdGcmFtZXdvcmtMb2NhbGl6YXRpb24nO1xuICB9XG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBsb2NhbGl6YXRpb24gPSB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSgnbG9jYWxpemF0aW9uJyk7XG4gICAgcmV0dXJuIGNyZWF0ZUxvY2FsaXplcihsb2NhbGl6YXRpb24pKHRoaXMuZGVmYXVsdFJlc291cmNlTmFtZSA/PyAnJywga2V5LCBrZXkpO1xuICB9XG4gIGxvY2FsaXplU3luYyhyZXNvdXJjZU5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbG9jYWxpemF0aW9uID0gdGhpcy5jb25maWdTdGF0ZS5nZXRPbmUoJ2xvY2FsaXphdGlvbicpO1xuICAgIHJldHVybiBjcmVhdGVMb2NhbGl6ZXIobG9jYWxpemF0aW9uKShyZXNvdXJjZU5hbWUsIGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIGxvY2FsaXplV2l0aEZhbGxiYWNrKFxuICAgIHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLFxuICAgIGtleXM6IHN0cmluZ1tdLFxuICAgIGRlZmF1bHRWYWx1ZTogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSQoJ2xvY2FsaXphdGlvbicpLnBpcGUoXG4gICAgICBtYXAoY3JlYXRlTG9jYWxpemVyV2l0aEZhbGxiYWNrKSxcbiAgICAgIG1hcCgobG9jYWxpemVXaXRoRmFsbGJhY2s6YW55KSA9PiBsb2NhbGl6ZVdpdGhGYWxsYmFjayhyZXNvdXJjZU5hbWVzLCBrZXlzLCBkZWZhdWx0VmFsdWUpKSxcbiAgICApO1xuICB9XG5cbiAgbG9jYWxpemVXaXRoRmFsbGJhY2tTeW5jKHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLCBrZXlzOiBzdHJpbmdbXSwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2FsaXphdGlvbiA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdsb2NhbGl6YXRpb24nKTtcbiAgICByZXR1cm4gY3JlYXRlTG9jYWxpemVyV2l0aEZhbGxiYWNrKGxvY2FsaXphdGlvbikocmVzb3VyY2VOYW1lcywga2V5cywgZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxpemF0aW9uKFxuICAgIHN0YXRlOiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8sXG4gICAga2V5OiBzdHJpbmcgfCBMb2NhbGl6YXRpb25XaXRoRGVmYXVsdCxcbiAgICAuLi5pbnRlcnBvbGF0ZVBhcmFtczogc3RyaW5nW11cbiAgKSB7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZSA9ICcnO1xuXG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBrZXkuZGVmYXVsdFZhbHVlO1xuICAgICAga2V5ID0ga2V5LmtleTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCc6OicpIGFzIHN0cmluZ1tdO1xuICAgIGNvbnN0IHdhcm4gPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9O1xuXG4gICAgaWYgKGtleXMubGVuZ3RoIDwgMikge1xuICAgICAgd2FybignVGhlIGxvY2FsaXphdGlvbiBzb3VyY2Ugc2VwYXJhdG9yICg6Oikgbm90IGZvdW5kLicpO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCAoa2V5IGFzIHN0cmluZyk7XG4gICAgfVxuICAgIGlmICghc3RhdGUubG9jYWxpemF0aW9uKSByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IGtleXNbMV07XG5cbiAgICBjb25zdCBzb3VyY2VOYW1lID0ga2V5c1swXSB8fCBzdGF0ZS5sb2NhbGl6YXRpb24uZGVmYXVsdFJlc291cmNlTmFtZTtcbiAgICBjb25zdCBzb3VyY2VLZXkgPSBrZXlzWzFdO1xuXG4gICAgaWYgKHNvdXJjZU5hbWUgPT09ICdfJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBzb3VyY2VLZXk7XG4gICAgfVxuXG4gICAgaWYgKCFzb3VyY2VOYW1lKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnTG9jYWxpemF0aW9uIHNvdXJjZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBkZWZhdWx0UmVzb3VyY2VOYW1lIHdhcyBub3QgZGVmaW5lZCEnLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBzb3VyY2VLZXk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5sb2NhbGl6YXRpb25zJC52YWx1ZS5nZXQoc291cmNlTmFtZSk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHdhcm4oJ0NvdWxkIG5vdCBmaW5kIGxvY2FsaXphdGlvbiBzb3VyY2U6ICcgKyBzb3VyY2VOYW1lKTtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgc291cmNlS2V5O1xuICAgIH1cblxuICAgIGxldCBsb2NhbGl6YXRpb24gPSBzb3VyY2Vbc291cmNlS2V5XTtcbiAgICBpZiAodHlwZW9mIGxvY2FsaXphdGlvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgc291cmNlS2V5O1xuICAgIH1cblxuICAgIGludGVycG9sYXRlUGFyYW1zID0gaW50ZXJwb2xhdGVQYXJhbXMuZmlsdGVyKHBhcmFtcyA9PiBwYXJhbXMgIT0gbnVsbCk7XG4gICAgaWYgKGxvY2FsaXphdGlvbikgbG9jYWxpemF0aW9uID0gaW50ZXJwb2xhdGUobG9jYWxpemF0aW9uLCBpbnRlcnBvbGF0ZVBhcmFtcyk7XG5cbiAgICBpZiAodHlwZW9mIGxvY2FsaXphdGlvbiAhPT0gJ3N0cmluZycpIGxvY2FsaXphdGlvbiA9ICcnO1xuXG4gICAgcmV0dXJuIGxvY2FsaXphdGlvbiB8fCBkZWZhdWx0VmFsdWUgfHwgKGtleSBhcyBzdHJpbmcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5TWVyZ2VCYXNlUmVzb3VyY2VzKFxuICBiYXNlUmVzb3VyY2VOYW1lOiBzdHJpbmcsXG4gIHNvdXJjZTogUmVzb3VyY2VEdG8sXG4pOiBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvIHtcbiAgY29uc3QgaXRlbSA9IHNvdXJjZVtiYXNlUmVzb3VyY2VOYW1lXTtcblxuICBpZiAoaXRlbS5iYXNlUmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW0uYmFzZVJlc291cmNlcy5yZWR1Y2UoKGFjYywgYmFzZVJlc291cmNlKSA9PiB7XG4gICAgY29uc3QgYmFzZUl0ZW0gPSByZWN1cnNpdmVseU1lcmdlQmFzZVJlc291cmNlcyhiYXNlUmVzb3VyY2UsIHNvdXJjZSk7XG4gICAgY29uc3QgdGV4dHMgPSB7IC4uLmJhc2VJdGVtLnRleHRzLCAuLi5pdGVtLnRleHRzIH07XG4gICAgcmV0dXJuIHsgLi4uYWNjLCB0ZXh0cyB9O1xuICB9LCBpdGVtKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VSZXNvdXJjZXNXaXRoQmFzZVJlc291cmNlKHJlc291cmNlOiBSZXNvdXJjZUR0byk6IFJlc291cmNlRHRvIHtcbiAgY29uc3QgZW50aXRpZXM6IEFycmF5PFtzdHJpbmcsIEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uUmVzb3VyY2VEdG9dPiA9IE9iamVjdC5rZXlzKHJlc291cmNlKS5tYXAoXG4gICAga2V5ID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVjdXJzaXZlbHlNZXJnZUJhc2VSZXNvdXJjZXMoa2V5LCByZXNvdXJjZSk7XG4gICAgICByZXR1cm4gW2tleSwgbmV3VmFsdWVdO1xuICAgIH0sXG4gICk7XG4gIHJldHVybiBlbnRpdGllcy5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoeyAuLi5hY2MsIFtrZXldOiB2YWx1ZSB9KSwge30pO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lTGVnYWN5YW5kTmV3UmVzb3VyY2VzKFxuICBsZWdhY3k6IExlZ2FjeUxhbmd1YWdlRHRvLFxuICByZXNvdXJjZTogUmVzb3VyY2VEdG8sXG4pOiBMZWdhY3lMYW5ndWFnZUR0byB7XG4gIGNvbnN0IG1lcmdlZFJlc291cmNlID0gbWVyZ2VSZXNvdXJjZXNXaXRoQmFzZVJlc291cmNlKHJlc291cmNlKTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMobWVyZ2VkUmVzb3VyY2UpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiB2YWx1ZS50ZXh0cyB9O1xuICB9LCBsZWdhY3kpO1xufVxuXG5leHBvcnQgdHlwZSBMZWdhY3lMYW5ndWFnZUR0byA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VEdG8gPSBSZWNvcmQ8c3RyaW5nLCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvPjtcbiJdfQ==","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class LocalStorageListenerService {\n window = inject(DOCUMENT).defaultView;\n constructor() {\n this.window?.addEventListener('storage', event => {\n if (event.key === 'access_token') {\n const tokenRemoved = event.newValue === null;\n const tokenAdded = event.oldValue === null && event.newValue !== null;\n if (tokenRemoved || tokenAdded) {\n this.window?.location.assign('/');\n }\n }\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageListenerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageListenerService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageListenerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1saXN0ZW5lci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvbG9jYWwtc3RvcmFnZS1saXN0ZW5lci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJbkQsTUFBTSxPQUFPLDJCQUEyQjtJQUNuQixNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUV6RDtRQUNFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQy9DLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7Z0JBQzdDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO2dCQUV0RSxJQUFJLFlBQVksSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0FkVSwyQkFBMkI7MkdBQTNCLDJCQUEyQixjQUYxQixNQUFNOzsyRkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlTGlzdGVuZXJTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChET0NVTUVOVCkuZGVmYXVsdFZpZXc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy53aW5kb3c/LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnYWNjZXNzX3Rva2VuJykge1xuICAgICAgICBjb25zdCB0b2tlblJlbW92ZWQgPSBldmVudC5uZXdWYWx1ZSA9PT0gbnVsbDtcbiAgICAgICAgY29uc3QgdG9rZW5BZGRlZCA9IGV2ZW50Lm9sZFZhbHVlID09PSBudWxsICYmIGV2ZW50Lm5ld1ZhbHVlICE9PSBudWxsO1xuXG4gICAgICAgIGlmICh0b2tlblJlbW92ZWQgfHwgdG9rZW5BZGRlZCkge1xuICAgICAgICAgIHRoaXMud2luZG93Py5sb2NhdGlvbi5hc3NpZ24oJy8nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { SsrCookieService } from './ssr-cookie.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./ssr-cookie.service\";\nexport class LocalStorageService {\n cookieService;\n constructor(cookieService) {\n this.cookieService = cookieService;\n }\n getItem(key, callback) {\n if (!this.cookieService) {\n return '';\n }\n var value = this.cookieService.get(key);\n if (callback) {\n callback();\n }\n return value;\n }\n setItem(key, value, callback) {\n if (!this.cookieService) {\n return;\n }\n if (value === null) {\n value = undefined;\n }\n this.cookieService.set(key, value, { expires: new Date(new Date().getTime() + 365 * 86400000), path: '/' });\n // debugger\n if (callback) {\n callback();\n }\n }\n removeItem(key, callback) {\n if (!this.cookieService) {\n return;\n }\n this.cookieService.delete(key);\n if (callback) {\n callback();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageService, deps: [{ token: i1.SsrCookieService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.SsrCookieService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUt4RCxNQUFNLE9BQU8sbUJBQW1CO0lBSXRCO0lBRFIsWUFDUSxhQUErQjtRQUEvQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7SUFDckMsQ0FBQztJQUdELE9BQU8sQ0FBQyxHQUFXLEVBQUUsUUFBYztRQUUvQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsQ0FBQztRQUNiLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBR0QsT0FBTyxDQUFDLEdBQVcsRUFBRSxLQUE2QixFQUFFLFFBQWM7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2pCLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDdkcsV0FBVztRQUNYLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsQ0FBQztRQUNiLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQU8sRUFBRSxRQUFjO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDO0lBQ0wsQ0FBQzt1R0FqRFEsbUJBQW1COzJHQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNzckNvb2tpZVNlcnZpY2UgfSBmcm9tICcuL3Nzci1jb29raWUuc2VydmljZSc7XG5cblxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlU2VydmljZSB7XG5cblxuICBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGNvb2tpZVNlcnZpY2U6IFNzckNvb2tpZVNlcnZpY2UsXG5cdCkge31cblxuXG4gICAgZ2V0SXRlbShrZXk6IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBhbnkge1xuXG4gICAgICAgIGlmICghdGhpcy5jb29raWVTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cblxuICAgIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBudWxsIHwgdW5kZWZpbmVkIHwgYW55LCBjYWxsYmFjaz86IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29va2llU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoa2V5LCB2YWx1ZSx7ZXhwaXJlczpuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDM2NSAqIDg2NDAwMDAwKSwgcGF0aDonLyd9KTtcbiAgICAgICAgLy8gZGVidWdnZXJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUl0ZW0oa2V5OmFueSwgY2FsbGJhY2s/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvb2tpZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29va2llU2VydmljZS5kZWxldGUoa2V5KTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cblxuXG5cblxuXG59XG4iXX0=","import { Injectable, effect, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TitleStrategy } from '@angular/router';\nimport { Title } from '@angular/platform-browser';\nimport { LocalizationService } from './localization.service';\nimport { DISABLE_PROJECT_NAME } from '@elite.framework/ng.core/tokens';\nimport * as i0 from \"@angular/core\";\nexport class FrameworkTitleStrategy extends TitleStrategy {\n title = inject(Title);\n localizationService = inject(LocalizationService);\n disableProjectName = inject(DISABLE_PROJECT_NAME, { optional: true });\n routerState;\n langugageChange = toSignal(this.localizationService.languageChange$);\n constructor() {\n super();\n effect(() => {\n if (this.langugageChange()) {\n this.updateTitle(this.routerState);\n }\n });\n }\n updateTitle(routerState) {\n this.routerState = routerState;\n const title = this.buildTitle(routerState);\n const projectName = this.localizationService.instant({\n key: '::AppName',\n defaultValue: 'MyProjectName',\n });\n if (!title) {\n return this.title.setTitle(projectName);\n }\n let localizedText = this.localizationService.instant({ key: title, defaultValue: title });\n if (!this.disableProjectName) {\n localizedText += ` | ${projectName}`;\n }\n this.title.setTitle(localizedText);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: FrameworkTitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: FrameworkTitleStrategy, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: FrameworkTitleStrategy, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtc3RyYXRlZ3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3RpdGxlLXN0cmF0ZWd5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFLdkUsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGFBQWE7SUFDcEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxrQkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMvRSxXQUFXLENBQWtDO0lBRXZELGVBQWUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXJFO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLFdBQVcsQ0FBQyxXQUFvQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7WUFDbkQsR0FBRyxFQUFFLFdBQVc7WUFDaEIsWUFBWSxFQUFFLGVBQWU7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLGFBQWEsSUFBSSxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyQyxDQUFDO3VHQXBDVSxzQkFBc0I7MkdBQXRCLHNCQUFzQixjQUZyQixNQUFNOzsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVGl0bGVTdHJhdGVneSwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4vbG9jYWxpemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRElTQUJMRV9QUk9KRUNUX05BTUUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEZyYW1ld29ya1RpdGxlU3RyYXRlZ3kgZXh0ZW5kcyBUaXRsZVN0cmF0ZWd5IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpdGxlID0gaW5qZWN0KFRpdGxlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsaXphdGlvblNlcnZpY2UgPSBpbmplY3QoTG9jYWxpemF0aW9uU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkaXNhYmxlUHJvamVjdE5hbWUgPSBpbmplY3QoRElTQUJMRV9QUk9KRUNUX05BTUUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByb3RlY3RlZCByb3V0ZXJTdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCB8IHVuZGVmaW5lZDtcblxuICBsYW5ndWdhZ2VDaGFuZ2UgPSB0b1NpZ25hbCh0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UubGFuZ3VhZ2VDaGFuZ2UkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sYW5ndWdhZ2VDaGFuZ2UoKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKHRoaXMucm91dGVyU3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgdXBkYXRlVGl0bGUocm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3R8YW55KSB7XG4gICAgdGhpcy5yb3V0ZXJTdGF0ZSA9IHJvdXRlclN0YXRlO1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5idWlsZFRpdGxlKHJvdXRlclN0YXRlKTtcblxuICAgIGNvbnN0IHByb2plY3ROYW1lID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoe1xuICAgICAga2V5OiAnOjpBcHBOYW1lJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ015UHJvamVjdE5hbWUnLFxuICAgIH0pO1xuXG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGl0bGUuc2V0VGl0bGUocHJvamVjdE5hbWUpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbGl6ZWRUZXh0ID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoeyBrZXk6IHRpdGxlLCBkZWZhdWx0VmFsdWU6IHRpdGxlIH0pO1xuICAgIGlmICghdGhpcy5kaXNhYmxlUHJvamVjdE5hbWUpIHtcbiAgICAgIGxvY2FsaXplZFRleHQgKz0gYCB8ICR7cHJvamVjdE5hbWV9YDtcbiAgICB9XG5cbiAgICB0aGlzLnRpdGxlLnNldFRpdGxlKGxvY2FsaXplZFRleHQpO1xuICB9XG59XG4iXX0=","import { InjectionToken, inject } from '@angular/core';\nimport { LocalizationService } from '../localization.service';\nexport const SORT_COMPARE_FUNC = new InjectionToken('SORT_COMPARE_FUNC');\nexport function compareFuncFactory() {\n const localizationService = inject(LocalizationService);\n const fn = (a, b) => {\n const aNumber = a.order;\n const bNumber = b.order;\n if (aNumber > bNumber)\n return 1;\n if (aNumber < bNumber)\n return -1;\n if (a.id > b.id)\n return 1;\n if (a.id < b.id)\n return -1;\n if (!Number.isInteger(aNumber))\n return 1;\n if (!Number.isInteger(bNumber))\n return -1;\n const aName = localizationService.instant(a.name);\n const bName = localizationService.instant(b.name);\n // const aName = localizationService.localize(a.name,'ERP');\n // const bName = localizationService.localize(b.name,'ERP');\n if (aName > bName)\n return 1;\n if (aName < bName)\n return -1;\n return 0;\n };\n return fn;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS1mdW5jLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvdXRpbHMvY29tcGFyZS1mdW5jLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUNqRCxtQkFBbUIsQ0FDcEIsQ0FBQztBQUVGLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQW1CLEVBQUUsQ0FBbUIsRUFBRSxFQUFFO1FBQ3RELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUU7UUFDekIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBRTtRQUV6QixJQUFJLE9BQU8sR0FBRyxPQUFPO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLEdBQUcsT0FBTztZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCw0REFBNEQ7UUFDNUQsNERBQTREO1FBQzVELElBQUksS0FBSyxHQUFHLEtBQUs7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssR0FBRyxLQUFLO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUU3QixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlSXRlbSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IFNPUlRfQ09NUEFSRV9GVU5DID0gbmV3IEluamVjdGlvblRva2VuPChhOiBTb3J0YWJsZUl0ZW0sIGI6IFNvcnRhYmxlSXRlbSkgPT4gbnVtYmVyPihcbiAgJ1NPUlRfQ09NUEFSRV9GVU5DJyxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlRnVuY0ZhY3RvcnkoKSB7XG4gIGNvbnN0IGxvY2FsaXphdGlvblNlcnZpY2UgPSBpbmplY3QoTG9jYWxpemF0aW9uU2VydmljZSk7XG4gIGNvbnN0IGZuID0gKGE6IFNvcnRhYmxlSXRlbXxhbnksIGI6IFNvcnRhYmxlSXRlbXxhbnkpID0+IHtcbiAgICBjb25zdCBhTnVtYmVyID0gYS5vcmRlciA7XG4gICAgY29uc3QgYk51bWJlciA9IGIub3JkZXIgO1xuXG4gICAgaWYgKGFOdW1iZXIgPiBiTnVtYmVyKSByZXR1cm4gMTtcbiAgICBpZiAoYU51bWJlciA8IGJOdW1iZXIpIHJldHVybiAtMTtcblxuICAgIGlmIChhLmlkID4gYi5pZCkgcmV0dXJuIDE7XG4gICAgaWYgKGEuaWQgPCBiLmlkKSByZXR1cm4gLTE7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYU51bWJlcikpIHJldHVybiAxO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihiTnVtYmVyKSkgcmV0dXJuIC0xO1xuXG4gICAgY29uc3QgYU5hbWUgPSBsb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYS5uYW1lKTtcbiAgICBjb25zdCBiTmFtZSA9IGxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChiLm5hbWUpO1xuICAgIC8vIGNvbnN0IGFOYW1lID0gbG9jYWxpemF0aW9uU2VydmljZS5sb2NhbGl6ZShhLm5hbWUsJ0VSUCcpO1xuICAgIC8vIGNvbnN0IGJOYW1lID0gbG9jYWxpemF0aW9uU2VydmljZS5sb2NhbGl6ZShiLm5hbWUsJ0VSUCcpO1xuICAgIGlmIChhTmFtZSA+IGJOYW1lKSByZXR1cm4gMTtcbiAgICBpZiAoYU5hbWUgPCBiTmFtZSkgcmV0dXJuIC0xO1xuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgcmV0dXJuIGZuO1xufVxuIl19","import { Injectable, Injector } from '@angular/core';\nimport { BaseTreeNode, createGroupMap, createTreeFromList, pushValueTo } from '@elite.framework/ng.core/utils';\nimport { BehaviorSubject, map } from 'rxjs';\nimport { PermissionCheckerService } from './permission-checker.service';\nimport { OTHERS_GROUP } from '@elite.framework/ng.core/tokens';\nimport { ConfigStateService } from './config-state.service';\nimport { SORT_COMPARE_FUNC } from './utils/compare-func.token';\nimport * as i0 from \"@angular/core\";\nexport class AbstractTreeService {\n _flat$ = new BehaviorSubject([]);\n _tree$ = new BehaviorSubject([]);\n _visible$ = new BehaviorSubject([]);\n othersGroup;\n shouldSingularizeRoutes = true;\n get flat() {\n return this._flat$.value;\n }\n get flat$() {\n return this._flat$.asObservable();\n }\n get tree() {\n return this._tree$.value;\n }\n get tree$() {\n return this._tree$.asObservable();\n }\n get visible() {\n return this._visible$.value;\n }\n get visible$() {\n return this._visible$.asObservable();\n }\n filterWith(setOrMap) {\n return this._flat$.value.filter(item => !setOrMap.has(item[this.id]));\n }\n findItemsToRemove(set) {\n return this._flat$.value.reduce((acc, item) => {\n if (!acc.has(item[this.parentId])) {\n return acc;\n }\n const childSet = new Set([item[this.id]]);\n const children = this.findItemsToRemove(childSet);\n return new Set([...acc, ...children]);\n }, set);\n }\n publish(flatItems) {\n this._flat$.next(flatItems);\n this._tree$.next(this.createTree(flatItems));\n this._visible$.next(this.createTree(flatItems.filter(item => !this.hide(item))));\n return flatItems;\n }\n createTree(items) {\n return createTreeFromList(items, item => item[this.id], item => item[this.parentId], item => BaseTreeNode.create(item));\n }\n createGroupedTree(list) {\n const map = createGroupMap(list, this.othersGroup);\n if (!map) {\n return undefined;\n }\n return Array.from(map, ([key, items]) => ({ group: key, items }));\n }\n add(items) {\n let flatItems = [];\n if (!this.shouldSingularizeRoutes) {\n flatItems = [...this.flat, ...items];\n }\n if (this.shouldSingularizeRoutes) {\n const map = new Map();\n items.forEach(item => map.set(item[this.id], item));\n flatItems = this.filterWith(map);\n map.forEach(pushValueTo(flatItems));\n }\n flatItems.sort(this.sort);\n return this.publish(flatItems);\n }\n find(predicate, tree = this.tree) {\n return tree.reduce((acc, node) => {\n if (acc) {\n return acc;\n }\n if (predicate(node)) {\n return node;\n }\n return this.find(predicate, node.children);\n }, null);\n }\n patch(identifier, props) {\n const flatItems = this._flat$.value;\n const index = flatItems.findIndex(item => item[this.id] === identifier);\n if (index < 0) {\n return false;\n }\n flatItems[index] = { ...flatItems[index], ...props };\n flatItems.sort(this.sort);\n return this.publish(flatItems);\n }\n refresh() {\n return this.add([]);\n }\n remove(identifiers) {\n const set = new Set();\n identifiers.forEach(id => set.add(id));\n const setToRemove = this.findItemsToRemove(set);\n const flatItems = this.filterWith(setToRemove);\n return this.publish(flatItems);\n }\n removeByParam(params) {\n if (!params) {\n return null;\n }\n const keys = Object.keys(params);\n if (keys.length === 0) {\n return null;\n }\n const excludedList = this.flat.filter(item => keys.every(key => item[key] === params[key]));\n if (!excludedList?.length) {\n return null;\n }\n for (const item of excludedList) {\n this.removeByParam({ [this.parentId]: item[this.id] });\n }\n const flatItems = this.flat.filter(item => !excludedList.includes(item));\n return this.publish(flatItems);\n }\n search(params, tree = this.tree) {\n const searchKeys = Object.keys(params);\n return tree.reduce((acc, node) => {\n if (acc) {\n return acc;\n }\n if (searchKeys.every(key => node[key] === params[key])) {\n return node;\n }\n return this.search(params, node.children);\n }, null);\n }\n setSingularizeStatus(singularize = true) {\n this.shouldSingularizeRoutes = singularize;\n }\n}\nexport class AbstractNavTreeService extends AbstractTreeService {\n injector;\n subscription;\n permissionService;\n compareFunc;\n id = 'name';\n parentId = 'parentName';\n hide = (item) => item.invisible || !this.isGranted(item);\n sort = (a, b) => {\n return this.compareFunc(a, b);\n };\n constructor(injector) {\n super();\n this.injector = injector;\n // TODO Merge Dynamic Nav Too!\n const configState = this.injector.get(ConfigStateService);\n this.subscription = configState\n .createOnUpdateStream((state) => state)\n .subscribe(() => this.refresh());\n this.permissionService = injector.get(PermissionCheckerService);\n this.othersGroup = injector.get(OTHERS_GROUP);\n this.compareFunc = injector.get(SORT_COMPARE_FUNC);\n }\n isGranted({ requiredPolicy }) {\n return this.permissionService.getGrantedPolicy(requiredPolicy);\n }\n hasChildren(identifier) {\n const node = this.find(item => item[this.id] === identifier);\n return Boolean(node?.children?.length);\n }\n hasInvisibleChild(identifier) {\n const node = this.find(item => item[this.id] === identifier);\n return node?.children?.some(child => child.invisible) || false;\n }\n /* istanbul ignore next */\n ngOnDestroy() {\n // this.subscription.unsubscribe();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AbstractNavTreeService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AbstractNavTreeService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AbstractNavTreeService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i0.Injector }] });\nexport class RoutesService extends AbstractNavTreeService {\n hasPathOrChild(item) {\n return Boolean(item.path) || this.hasChildren(item.name);\n }\n get groupedVisible() {\n return this.createGroupedTree(this.visible.filter(item => this.hasPathOrChild(item)));\n }\n get groupedVisible$() {\n return this.visible$.pipe(map(items => items.filter(item => this.hasPathOrChild(item))), map(visible => this.createGroupedTree(visible)));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9yb3V0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQXdCLE1BQU0sZ0NBQWdDLENBQUM7QUFDckksT0FBTyxFQUFFLGVBQWUsRUFBNEIsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFL0QsTUFBTSxPQUFnQixtQkFBbUI7SUFNL0IsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7SUFDaEQsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUVqRCxXQUFXLENBQWE7SUFDeEIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0lBRXpDLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFB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QztJQUNyQyxDQUFDO3VHQTNDbUIsc0JBQXNCOzJHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRDNDLFVBQVU7O0FBZ0RYLE1BQU0sT0FBTyxhQUFjLFNBQVEsc0JBQTZCO0lBQ3RELGNBQWMsQ0FBQyxJQUFxQjtRQUMxQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUM3RCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDaEQsQ0FBQztJQUNKLENBQUM7dUdBZFUsYUFBYTsyR0FBYixhQUFhLGNBREEsTUFBTTs7MkZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2LCBSb3V0ZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVRyZWVOb2RlLCBjcmVhdGVHcm91cE1hcCwgY3JlYXRlVHJlZUZyb21MaXN0LCBwdXNoVmFsdWVUbywgUm91dGVHcm91cCwgVHJlZU5vZGUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkNoZWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLWNoZWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPVEhFUlNfR1JPVVAgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU09SVF9DT01QQVJFX0ZVTkMgfSBmcm9tICcuL3V0aWxzL2NvbXBhcmUtZnVuYy50b2tlbic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRyZWVTZXJ2aWNlPFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueSB9PiB7XG4gIGFic3RyYWN0IGlkOiBzdHJpbmc7XG4gIGFic3RyYWN0IHBhcmVudElkOiBzdHJpbmc7XG4gIGFic3RyYWN0IGhpZGU6IChpdGVtOiBUKSA9PiBib29sZWFuO1xuICBhYnN0cmFjdCBzb3J0OiAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xuXG4gIHByaXZhdGUgX2ZsYXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcbiAgcHJpdmF0ZSBfdHJlZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRyZWVOb2RlPFQ+W10+KFtdKTtcbiAgcHJpdmF0ZSBfdmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRyZWVOb2RlPFQ+W10+KFtdKTtcblxuICBwcm90ZWN0ZWQgb3RoZXJzR3JvdXA6IHN0cmluZ3xhbnk7XG4gIHByb3RlY3RlZCBzaG91bGRTaW5ndWxhcml6ZVJvdXRlcyA9IHRydWU7XG5cbiAgZ2V0IGZsYXQoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmxhdCQudmFsdWU7XG4gIH1cblxuICBnZXQgZmxhdCQoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5fZmxhdCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdHJlZSgpOiBUcmVlTm9kZTxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJlZSQudmFsdWU7XG4gIH1cblxuICBnZXQgdHJlZSQoKTogT2JzZXJ2YWJsZTxUcmVlTm9kZTxUPltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHZpc2libGUoKTogVHJlZU5vZGU8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGUkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZpc2libGUkKCk6IE9ic2VydmFibGU8VHJlZU5vZGU8VD5bXT4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyV2l0aChzZXRPck1hcDogU2V0PHN0cmluZz4gfCBNYXA8c3RyaW5nLCBUPik6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZsYXQkLnZhbHVlLmZpbHRlcihpdGVtID0+ICFzZXRPck1hcC5oYXMoaXRlbVt0aGlzLmlkXSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSXRlbXNUb1JlbW92ZShzZXQ6IFNldDxzdHJpbmc+KTogU2V0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9mbGF0JC52YWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFhY2MuaGFzKGl0ZW1bdGhpcy5wYXJlbnRJZF0pKSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoaWxkU2V0ID0gbmV3IFNldChbaXRlbVt0aGlzLmlkXV0pO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmZpbmRJdGVtc1RvUmVtb3ZlKGNoaWxkU2V0KTtcbiAgICAgIHJldHVybiBuZXcgU2V0KFsuLi5hY2MsIC4uLmNoaWxkcmVuXSk7XG4gICAgfSwgc2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaChmbGF0SXRlbXM6IFRbXSk6IFRbXSB7XG4gICAgdGhpcy5fZmxhdCQubmV4dChmbGF0SXRlbXMpO1xuICAgIHRoaXMuX3RyZWUkLm5leHQodGhpcy5jcmVhdGVUcmVlKGZsYXRJdGVtcykpO1xuICAgIHRoaXMuX3Zpc2libGUkLm5leHQodGhpcy5jcmVhdGVUcmVlKGZsYXRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhdGhpcy5oaWRlKGl0ZW0pKSkpO1xuICAgIHJldHVybiBmbGF0SXRlbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlVHJlZShpdGVtczogVFtdKTogVHJlZU5vZGU8VD5bXSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRyZWVGcm9tTGlzdDxULCBUcmVlTm9kZTxUPj4oXG4gICAgICBpdGVtcyxcbiAgICAgIGl0ZW0gPT4gaXRlbVt0aGlzLmlkXSxcbiAgICAgIGl0ZW0gPT4gaXRlbVt0aGlzLnBhcmVudElkXSxcbiAgICAgIGl0ZW0gPT4gQmFzZVRyZWVOb2RlLmNyZWF0ZShpdGVtKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUdyb3VwZWRUcmVlKGxpc3Q6IFRyZWVOb2RlPFQ+W10pOiBSb3V0ZUdyb3VwPFQ+W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1hcCA9IGNyZWF0ZUdyb3VwTWFwPFQ+KGxpc3QsIHRoaXMub3RoZXJzR3JvdXApO1xuICAgIGlmICghbWFwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKG1hcCwgKFtrZXksIGl0ZW1zXSkgPT4gKHsgZ3JvdXA6IGtleSwgaXRlbXMgfSkpO1xuICB9XG5cbiAgYWRkKGl0ZW1zOiBUW10pOiBUW10ge1xuICAgIGxldCBmbGF0SXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLnNob3VsZFNpbmd1bGFyaXplUm91dGVzKSB7XG4gICAgICBmbGF0SXRlbXMgPSBbLi4udGhpcy5mbGF0LCAuLi5pdGVtc107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2luZ3VsYXJpemVSb3V0ZXMpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUPigpO1xuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IG1hcC5zZXQoaXRlbVt0aGlzLmlkXSwgaXRlbSkpO1xuICAgICAgZmxhdEl0ZW1zID0gdGhpcy5maWx0ZXJXaXRoKG1hcCk7XG4gICAgICBtYXAuZm9yRWFjaChwdXNoVmFsdWVUbyhmbGF0SXRlbXMpKTtcbiAgICB9XG5cbiAgICBmbGF0SXRlbXMuc29ydCh0aGlzLnNvcnQpO1xuXG4gICAgcmV0dXJuIHRoaXMucHVibGlzaChmbGF0SXRlbXMpO1xuICB9XG5cbiAgZmluZChwcmVkaWNhdGU6IChpdGVtOiBUcmVlTm9kZTxUPikgPT4gYm9vbGVhbiwgdHJlZSA9IHRoaXMudHJlZSk6IFRyZWVOb2RlPFQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRyZWUucmVkdWNlPFRyZWVOb2RlPFQ+IHwgbnVsbD4oKGFjYywgbm9kZSkgPT4ge1xuICAgICAgaWYgKGFjYykge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5maW5kKHByZWRpY2F0ZSwgbm9kZS5jaGlsZHJlbik7XG4gICAgfSwgbnVsbCk7XG4gIH1cblxuICBwYXRjaChpZGVudGlmaWVyOiBzdHJpbmcsIHByb3BzOiBQYXJ0aWFsPFQ+KTogVFtdIHwgZmFsc2Uge1xuICAgIGNvbnN0IGZsYXRJdGVtcyA9IHRoaXMuX2ZsYXQkLnZhbHVlO1xuICAgIGNvbnN0IGluZGV4ID0gZmxhdEl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdGhpcy5pZF0gPT09IGlkZW50aWZpZXIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmbGF0SXRlbXNbaW5kZXhdID0geyAuLi5mbGF0SXRlbXNbaW5kZXhdLCAuLi5wcm9wcyB9O1xuXG4gICAgZmxhdEl0ZW1zLnNvcnQodGhpcy5zb3J0KTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaXNoKGZsYXRJdGVtcyk7XG4gIH1cblxuICByZWZyZXNoKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkKFtdKTtcbiAgfVxuXG4gIHJlbW92ZShpZGVudGlmaWVyczogc3RyaW5nW10pOiBUW10ge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlkZW50aWZpZXJzLmZvckVhY2goaWQgPT4gc2V0LmFkZChpZCkpO1xuXG4gICAgY29uc3Qgc2V0VG9SZW1vdmUgPSB0aGlzLmZpbmRJdGVtc1RvUmVtb3ZlKHNldCk7XG4gICAgY29uc3QgZmxhdEl0ZW1zID0gdGhpcy5maWx0ZXJXaXRoKHNldFRvUmVtb3ZlKTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaXNoKGZsYXRJdGVtcyk7XG4gIH1cblxuICByZW1vdmVCeVBhcmFtKHBhcmFtczogUGFydGlhbDxUPik6IFRbXSB8IG51bGwge1xuICAgIGlmICghcGFyYW1zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKSBhcyBBcnJheTxrZXlvZiBQYXJ0aWFsPFQ+PjtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4Y2x1ZGVkTGlzdCA9IHRoaXMuZmxhdC5maWx0ZXIoaXRlbSA9PiBrZXlzLmV2ZXJ5KGtleSA9PiBpdGVtW2tleV0gPT09IHBhcmFtc1trZXldKSk7XG4gICAgaWYgKCFleGNsdWRlZExpc3Q/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGV4Y2x1ZGVkTGlzdCkge1xuICAgICAgdGhpcy5yZW1vdmVCeVBhcmFtKHsgW3RoaXMucGFyZW50SWRdOiBpdGVtW3RoaXMuaWRdIH0gYXMgUGFydGlhbDxUPik7XG4gICAgfVxuXG4gICAgY29uc3QgZmxhdEl0ZW1zID0gdGhpcy5mbGF0LmZpbHRlcihpdGVtID0+ICFleGNsdWRlZExpc3QuaW5jbHVkZXMoaXRlbSkpO1xuICAgIHJldHVybiB0aGlzLnB1Ymxpc2goZmxhdEl0ZW1zKTtcbiAgfVxuXG4gIHNlYXJjaChwYXJhbXM6IFBhcnRpYWw8VD4sIHRyZWUgPSB0aGlzLnRyZWUpOiBUcmVlTm9kZTxUPiB8IG51bGwge1xuICAgIGNvbnN0IHNlYXJjaEtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpIGFzIEFycmF5PGtleW9mIFBhcnRpYWw8VD4+O1xuXG4gICAgcmV0dXJuIHRyZWUucmVkdWNlPFRyZWVOb2RlPFQ+IHwgbnVsbD4oKGFjYywgbm9kZSkgPT4ge1xuICAgICAgaWYgKGFjYykge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VhcmNoS2V5cy5ldmVyeShrZXkgPT4gbm9kZVtrZXldID09PSBwYXJhbXNba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaChwYXJhbXMsIG5vZGUuY2hpbGRyZW4pO1xuICAgIH0sIG51bGwpO1xuICB9XG5cbiAgc2V0U2luZ3VsYXJpemVTdGF0dXMoc2luZ3VsYXJpemUgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5zaG91bGRTaW5ndWxhcml6ZVJvdXRlcyA9IHNpbmd1bGFyaXplO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdlRyZWVTZXJ2aWNlPFQgZXh0ZW5kcyBOYXY+XG4gIGV4dGVuZHMgQWJzdHJhY3RUcmVlU2VydmljZTxUPlxuICBpbXBsZW1lbnRzIE9uRGVzdHJveVxue1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uQ2hlY2tlclNlcnZpY2U7XG4gIHByaXZhdGUgY29tcGFyZUZ1bmM7XG4gIHJlYWRvbmx5IGlkID0gJ25hbWUnO1xuICByZWFkb25seSBwYXJlbnRJZCA9ICdwYXJlbnROYW1lJztcbiAgcmVhZG9ubHkgaGlkZSA9IChpdGVtOiBUKSA9PiBpdGVtLmludmlzaWJsZSB8fCAhdGhpcy5pc0dyYW50ZWQoaXRlbSk7XG4gIHJlYWRvbmx5IHNvcnQgPSAoYTogVCwgYjogVCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmVGdW5jKGEsIGIpO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFRPRE8gTWVyZ2UgRHluYW1pYyBOYXYgVG9vIVxuICAgIGNvbnN0IGNvbmZpZ1N0YXRlID0gdGhpcy5pbmplY3Rvci5nZXQoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGNvbmZpZ1N0YXRlXG4gICAgICAuY3JlYXRlT25VcGRhdGVTdHJlYW0oKHN0YXRlOmFueSkgPT4gc3RhdGUpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaCgpKTtcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25DaGVja2VyU2VydmljZSk7XG4gICAgdGhpcy5vdGhlcnNHcm91cCA9IGluamVjdG9yLmdldChPVEhFUlNfR1JPVVApO1xuICAgIHRoaXMuY29tcGFyZUZ1bmMgPSBpbmplY3Rvci5nZXQoU09SVF9DT01QQVJFX0ZVTkMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzR3JhbnRlZCh7IHJlcXVpcmVkUG9saWN5IH06IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRHcmFudGVkUG9saWN5KHJlcXVpcmVkUG9saWN5KTtcbiAgfVxuXG4gIGhhc0NoaWxkcmVuKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMuaWRdID09PSBpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gQm9vbGVhbihub2RlPy5jaGlsZHJlbj8ubGVuZ3RoKTtcbiAgfVxuXG4gIGhhc0ludmlzaWJsZUNoaWxkKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMuaWRdID09PSBpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gbm9kZT8uY2hpbGRyZW4/LnNvbWUoY2hpbGQgPT4gY2hpbGQuaW52aXNpYmxlKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXNTZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3ROYXZUcmVlU2VydmljZTxSb3V0ZT4ge1xuICBwcml2YXRlIGhhc1BhdGhPckNoaWxkKGl0ZW06IFRyZWVOb2RlPFJvdXRlPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKGl0ZW0ucGF0aCkgfHwgdGhpcy5oYXNDaGlsZHJlbihpdGVtLm5hbWUpO1xuICB9XG5cbiAgZ2V0IGdyb3VwZWRWaXNpYmxlKCk6IFJvdXRlR3JvdXA8Um91dGU+W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUdyb3VwZWRUcmVlKHRoaXMudmlzaWJsZS5maWx0ZXIoaXRlbSA9PiB0aGlzLmhhc1BhdGhPckNoaWxkKGl0ZW0pKSk7XG4gIH1cblxuICBnZXQgZ3JvdXBlZFZpc2libGUkKCk6IE9ic2VydmFibGU8Um91dGVHcm91cDxSb3V0ZT5bXSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGUkLnBpcGUoXG4gICAgICBtYXAoaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gdGhpcy5oYXNQYXRoT3JDaGlsZChpdGVtKSkpLFxuICAgICAgbWFwKHZpc2libGUgPT4gdGhpcy5jcmVhdGVHcm91cGVkVHJlZSh2aXNpYmxlKSksXG4gICAgKTtcbiAgfVxufVxuIl19","import { Injectable, Optional } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { RoutesService } from './routes.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./routes.service\";\nimport * as i2 from \"@angular/router\";\nexport class RoutesHandler {\n routes;\n router;\n constructor(routes, router) {\n this.routes = routes;\n this.router = router;\n this.addRoutes();\n }\n addRoutes() {\n this.router?.config?.forEach(({ path = '', data }) => {\n const routes = data?.routes;\n if (!routes)\n return;\n if (Array.isArray(routes)) {\n this.routes.add(routes);\n }\n else {\n const routesFlatten = flatRoutes([{ path, ...routes }], { path: '' });\n this.routes.add(routesFlatten);\n }\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesHandler, deps: [{ token: i1.RoutesService }, { token: i2.Router, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesHandler, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesHandler, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RoutesService }, { type: i2.Router, decorators: [{\n type: Optional\n }] }] });\nfunction flatRoutes(routes, parent) {\n if (!routes)\n return [];\n return routes.reduce((acc, route) => {\n const { children, ...current } = {\n ...route,\n parentName: parent.name,\n path: (parent.path + '/' + route.path).replace(/\\/\\//g, '/'),\n };\n acc.push(current, ...flatRoutes(children, current));\n return acc;\n }, []);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmhhbmRsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3JvdXRlcy5oYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFHLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU1qRCxNQUFNLE9BQU8sYUFBYTtJQUVkO0lBQ1k7SUFGdEIsWUFDVSxNQUFxQixFQUNULE1BQWM7UUFEMUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNULFdBQU0sR0FBTixNQUFNLENBQVE7UUFFbEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxTQUFTO1FBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQWEsRUFBRSxFQUFFO1lBQy9FLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVwQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3VHQXBCVSxhQUFhOzJHQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSUksUUFBUTs7QUFvQmIsU0FBUyxVQUFVLENBQUMsTUFBa0IsRUFBRSxNQUFXO0lBQ2pELElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFdkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2xDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRztZQUMvQixHQUFHLEtBQUs7WUFDUixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDdkIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO1NBQzdELENBQUM7UUFFRixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVwRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFjLENBQUMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ICBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUm91dGVzU2VydmljZSB9IGZyb20gJy4vcm91dGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlc0hhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlczogUm91dGVzU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICApIHtcbiAgICB0aGlzLmFkZFJvdXRlcygpO1xuICB9XG5cbiAgYWRkUm91dGVzKCkge1xuICAgICh0aGlzLnJvdXRlcj8uY29uZmlnIGFzIFJvdXRlRGF0YVtdKT8uZm9yRWFjaCgoeyBwYXRoID0gJycsIGRhdGEgfTogUm91dGVEYXRhKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZXMgPSBkYXRhPy5yb3V0ZXM7XG4gICAgICBpZiAoIXJvdXRlcykgcmV0dXJuO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZXMpKSB7XG4gICAgICAgIHRoaXMucm91dGVzLmFkZChyb3V0ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm91dGVzRmxhdHRlbiA9IGZsYXRSb3V0ZXMoW3sgcGF0aCwgLi4ucm91dGVzIH1dLCB7IHBhdGg6ICcnIH0pO1xuICAgICAgICB0aGlzLnJvdXRlcy5hZGQocm91dGVzRmxhdHRlbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdFJvdXRlcyhyb3V0ZXM6IFJvdXRlRGVmW10sIHBhcmVudDogYW55KSB7XG4gIGlmICghcm91dGVzKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIHJvdXRlcy5yZWR1Y2UoKGFjYywgcm91dGUpID0+IHtcbiAgICBjb25zdCB7IGNoaWxkcmVuLCAuLi5jdXJyZW50IH0gPSB7XG4gICAgICAuLi5yb3V0ZSxcbiAgICAgIHBhcmVudE5hbWU6IHBhcmVudC5uYW1lLFxuICAgICAgcGF0aDogKHBhcmVudC5wYXRoICsgJy8nICsgcm91dGUucGF0aCkucmVwbGFjZSgvXFwvXFwvL2csICcvJyksXG4gICAgfTtcblxuICAgIGFjYy5wdXNoKGN1cnJlbnQsIC4uLmZsYXRSb3V0ZXMoY2hpbGRyZW4sIGN1cnJlbnQpKTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzICBSb3V0ZVtdKTtcbn1cblxudHlwZSBSb3V0ZURlZiA9IFJvdXRlICYgeyBjaGlsZHJlbjogUm91dGVEZWZbXSB9O1xudHlwZSBSb3V0ZURhdGEgPSBSb3V0ZSAmIHsgZGF0YTogeyByb3V0ZXM6IFJvdXRlRGVmIHwgQXJyYXk8Um91dGVEZWY+IH0gfTtcbiJdfQ==","import { Inject, Injectable } from '@angular/core';\nimport { TENANT_KEY } from '@elite.framework/ng.core/tokens';\nimport { map, switchMap } from 'rxjs';\nimport { ConfigStateService } from './config-state.service';\nimport { RestService } from './rest.service';\nimport { SessionStateService } from './session-state.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nimport * as i2 from \"./session-state.service\";\nimport * as i3 from \"./config-state.service\";\nexport class MultiTenancyService {\n restService;\n sessionState;\n configStateService;\n tenantKey;\n get isEnabled() {\n // return this.framework.multiTenancy.isEnabled;\n return true;\n }\n domainTenant = null;\n isTenantBoxVisible = true;\n apiName = 'framework';\n setTenantToState = (tenant) => {\n this.sessionState.setTenant({ id: tenant.id, name: tenant.name, /* isAvailable: true */ });\n return this.configStateService.refreshAppState().pipe(map(_ => tenant));\n };\n constructor(restService, sessionState, configStateService, tenantKey) {\n this.restService = restService;\n this.sessionState = sessionState;\n this.configStateService = configStateService;\n this.tenantKey = tenantKey;\n }\n setTenantByName(tenantName) {\n return this\n .findTenantByName(tenantName)\n .pipe(switchMap(this.setTenantToState));\n }\n setTenantById(tenantId) {\n return this\n .findTenantById(tenantId)\n .pipe(switchMap(this.setTenantToState));\n }\n findTenantById = (id, config) => this.restService.request({\n method: 'GET',\n url: `/api/framework/multi-tenancy/tenants/by-id/${id}`,\n }, { apiName: this.apiName, ...config });\n findTenantByName = (name, config) => this.restService.request({\n method: 'GET',\n url: `/api/framework/multi-tenancy/tenants/by-name/${name}`,\n }, { apiName: this.apiName, ...config });\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: MultiTenancyService, deps: [{ token: i1.RestService }, { token: i2.SessionStateService }, { token: i3.ConfigStateService }, { token: TENANT_KEY }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: MultiTenancyService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: MultiTenancyService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.SessionStateService }, { type: i3.ConfigStateService }, { type: undefined, decorators: [{\n type: Inject,\n args: [TENANT_KEY]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvbXVsdGktdGVuYW5jeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBSzlELE1BQU0sT0FBTyxtQkFBbUI7SUFrQnBCO0lBQ0E7SUFDQTtJQUNtQjtJQW5CM0IsSUFBSSxTQUFTO1FBQ1gsZ0RBQWdEO1FBQ2hELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNILFlBQVksR0FBOEIsSUFBSSxDQUFDO0lBRS9DLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUUxQixPQUFPLEdBQUcsV0FBVyxDQUFDO0lBRWQsZ0JBQWdCLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUU7UUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQyxDQUFDO0lBRUYsWUFDVSxXQUF3QixFQUN4QixZQUFpQyxFQUNqQyxrQkFBc0MsRUFDbkIsU0FBaUI7UUFIcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUMxQyxDQUFDO0lBRUwsZUFBZSxDQUFDLFVBQWtCO1FBQ2hDLE9BQU8sSUFBSTthQUNSLGdCQUFnQixDQUFDLFVBQVUsQ0FBQzthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFnQjtRQUM1QixPQUFPLElBQUk7YUFDUixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUEsY0FBYyxHQUFHLENBQUMsRUFBVSxFQUFFLE1BQTZCLEVBQUUsRUFBRSxDQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBMEI7UUFDaEQsTUFBTSxFQUFFLEtBQUs7UUFDYixHQUFHLEVBQUUsOENBQThDLEVBQUUsRUFBRTtLQUN4RCxFQUNELEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBR3ZDLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUFFLE1BQTZCLEVBQUUsRUFBRSxDQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBMEI7UUFDaEQsTUFBTSxFQUFFLEtBQUs7UUFDYixHQUFHLEVBQUUsZ0RBQWdELElBQUksRUFBRTtLQUM1RCxFQUNELEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO3VHQWpENUIsbUJBQW1CLGtIQXFCcEIsVUFBVTsyR0FyQlQsbUJBQW1CLGNBRmhCLE1BQU07OzJGQUVULG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQXNCSSxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlc3QsIFRlbmFudExvZ2luSW5mb0R0byB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgVEVOQU5UX0tFWSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuL3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLXN0YXRlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpVGVuYW5jeVNlcnZpY2Uge1xuXG4gICAgZ2V0IGlzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgIC8vIHJldHVybiB0aGlzLmZyYW1ld29yay5tdWx0aVRlbmFuY3kuaXNFbmFibGVkO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICBkb21haW5UZW5hbnQ6IFRlbmFudExvZ2luSW5mb0R0byB8IG51bGwgPSBudWxsO1xuXG4gIGlzVGVuYW50Qm94VmlzaWJsZSA9IHRydWU7XG5cbiAgYXBpTmFtZSA9ICdmcmFtZXdvcmsnO1xuXG4gIHByaXZhdGUgc2V0VGVuYW50VG9TdGF0ZSA9ICh0ZW5hbnQ6IFRlbmFudExvZ2luSW5mb0R0bykgPT4ge1xuICAgIHRoaXMuc2Vzc2lvblN0YXRlLnNldFRlbmFudCh7IGlkOiB0ZW5hbnQuaWQsIG5hbWU6IHRlbmFudC5uYW1lLCAvKiBpc0F2YWlsYWJsZTogdHJ1ZSAqLyB9KTtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdGF0ZVNlcnZpY2UucmVmcmVzaEFwcFN0YXRlKCkucGlwZShtYXAoXyA9PiB0ZW5hbnQpKTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHNlc3Npb25TdGF0ZTogU2Vzc2lvblN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N0YXRlU2VydmljZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoVEVOQU5UX0tFWSkgcHVibGljIHRlbmFudEtleTogc3RyaW5nLFxuICApIHsgfVxuXG4gIHNldFRlbmFudEJ5TmFtZSh0ZW5hbnROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLmZpbmRUZW5hbnRCeU5hbWUodGVuYW50TmFtZSlcbiAgICAgIC5waXBlKHN3aXRjaE1hcCh0aGlzLnNldFRlbmFudFRvU3RhdGUpKTtcbiAgfVxuXG4gIHNldFRlbmFudEJ5SWQodGVuYW50SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzXG4gICAgICAuZmluZFRlbmFudEJ5SWQodGVuYW50SWQpXG4gICAgICAucGlwZShzd2l0Y2hNYXAodGhpcy5zZXRUZW5hbnRUb1N0YXRlKSk7XG4gIH1cblxuICAgZmluZFRlbmFudEJ5SWQgPSAoaWQ6IHN0cmluZywgY29uZmlnPzogUGFydGlhbDxSZXN0LkNvbmZpZz4pID0+XG4gICAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgVGVuYW50TG9naW5JbmZvRHRvPih7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgdXJsOiBgL2FwaS9mcmFtZXdvcmsvbXVsdGktdGVuYW5jeS90ZW5hbnRzL2J5LWlkLyR7aWR9YCxcbiAgICB9LFxuICAgIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lLC4uLmNvbmZpZyB9KTtcblxuXG4gIGZpbmRUZW5hbnRCeU5hbWUgPSAobmFtZTogc3RyaW5nLCBjb25maWc/OiBQYXJ0aWFsPFJlc3QuQ29uZmlnPikgPT5cbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBUZW5hbnRMb2dpbkluZm9EdG8+KHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB1cmw6IGAvYXBpL2ZyYW1ld29yay9tdWx0aS10ZW5hbmN5L3RlbmFudHMvYnktbmFtZS8ke25hbWV9YCxcbiAgICB9LFxuICAgIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lLC4uLmNvbmZpZyB9KTtcbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class HttpErrorReporterService {\n _reporter$ = new Subject();\n _errors$ = new BehaviorSubject([]);\n get reporter$() {\n return this._reporter$.asObservable();\n }\n get errors$() {\n return this._errors$.asObservable();\n }\n get errors() {\n return this._errors$.value;\n }\n reportError(error) {\n this._reporter$.next(error);\n this._errors$.next([...this.errors, error]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpErrorReporterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpErrorReporterService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpErrorReporterService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1lcnJvci1yZXBvcnRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvaHR0cC1lcnJvci1yZXBvcnRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBR2hELE1BQU0sT0FBTyx3QkFBd0I7SUFDM0IsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO0lBQzlDLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsRUFBRSxDQUFDLENBQUM7SUFFaEUsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUF3QjtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7dUdBbkJVLHdCQUF3QjsyR0FBeEIsd0JBQXdCLGNBRFgsTUFBTTs7MkZBQ25CLHdCQUF3QjtrQkFEcEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSB7XG4gIHByaXZhdGUgX3JlcG9ydGVyJCA9IG5ldyBTdWJqZWN0PEh0dHBFcnJvclJlc3BvbnNlPigpO1xuICBwcml2YXRlIF9lcnJvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIdHRwRXJyb3JSZXNwb25zZVtdPihbXSk7XG5cbiAgZ2V0IHJlcG9ydGVyJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0ZXIkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGVycm9ycyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9ycyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9lcnJvcnMkLnZhbHVlO1xuICB9XG5cbiAgcmVwb3J0RXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgdGhpcy5fcmVwb3J0ZXIkLm5leHQoZXJyb3IpO1xuICAgIHRoaXMuX2Vycm9ycyQubmV4dChbLi4udGhpcy5lcnJvcnMsIGVycm9yXSk7XG4gIH1cbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class SubscriptionService {\n subscription = new Subscription();\n get isClosed() {\n return this.subscription.closed;\n }\n addOne(source$, nextOrObserver, error) {\n const subscription = source$.subscribe(nextOrObserver, error);\n this.subscription.add(subscription);\n return subscription;\n }\n closeAll() {\n this.subscription.unsubscribe();\n }\n closeOne(subscription) {\n this.removeOne(subscription);\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n removeOne(subscription) {\n if (!subscription)\n return;\n this.subscription.remove(subscription);\n }\n reset() {\n this.subscription.unsubscribe();\n this.subscription = new Subscription();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SubscriptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SubscriptionService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SubscriptionService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9zdWJzY3JpcHRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBR3BDLE1BQU0sT0FBTyxtQkFBbUI7SUFDdEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFMUMsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBUUQsTUFBTSxDQUNKLE9BQXNCLEVBQ3RCLGNBQTZDLEVBQzdDLEtBQTRCO1FBRTVCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxZQUE2QztRQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxZQUE2QztRQUNyRCxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUN6QyxDQUFDO3VHQTlDVSxtQkFBbUI7MkdBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUsIFBhcnRpYWxPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdWJzY3JpcHRpb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgZ2V0IGlzQ2xvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbi5jbG9zZWQ7XG4gIH1cblxuICBhZGRPbmU8VD4oXG4gICAgc291cmNlJDogT2JzZXJ2YWJsZTxUPixcbiAgICBuZXh0PzogKHZhbHVlOiBUKSA9PiB2b2lkLFxuICAgIGVycm9yPzogKGVycm9yOiBhbnkpID0+IHZvaWQsXG4gICk6IFN1YnNjcmlwdGlvbjtcbiAgYWRkT25lPFQ+KHNvdXJjZSQ6IE9ic2VydmFibGU8VD4sIG9ic2VydmVyPzogUGFydGlhbE9ic2VydmVyPFQ+KTogU3Vic2NyaXB0aW9uO1xuICBhZGRPbmU8VD4oXG4gICAgc291cmNlJDogT2JzZXJ2YWJsZTxUPixcbiAgICBuZXh0T3JPYnNlcnZlcj86IFBhcnRpYWxPYnNlcnZlcjxUPiB8IE5leHQ8VD4sXG4gICAgZXJyb3I/OiAoZXJyb3I6IGFueSkgPT4gdm9pZCxcbiAgKTogU3Vic2NyaXB0aW9uIHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzb3VyY2UkLnN1YnNjcmliZShuZXh0T3JPYnNlcnZlciBhcyBOZXh0PFQ+LCBlcnJvcik7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIGNsb3NlQWxsKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBjbG9zZU9uZShzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICB0aGlzLnJlbW92ZU9uZShzdWJzY3JpcHRpb24pO1xuICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICByZW1vdmVPbmUoc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKCFzdWJzY3JpcHRpb24pIHJldHVybjtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5yZW1vdmUoc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIH1cbn1cblxudHlwZSBOZXh0PFQ+ID0gKHZhbHVlOiBUKSA9PiB2b2lkO1xuIl19","import { Injectable, inject, signal } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router, } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nexport const NavigationEvent = {\n Cancel: NavigationCancel,\n End: NavigationEnd,\n Error: NavigationError,\n Start: NavigationStart,\n};\nexport class RouterEvents {\n router = inject(Router);\n #previousNavigation = signal(undefined, ...(ngDevMode ? [{ debugName: \"#previousNavigation\" }] : []));\n previousNavigation = this.#previousNavigation.asReadonly();\n #currentNavigation = signal(undefined, ...(ngDevMode ? [{ debugName: \"#currentNavigation\" }] : []));\n currentNavigation = this.#currentNavigation.asReadonly();\n constructor() {\n this.listenToNavigation();\n }\n listenToNavigation() {\n const routerEvent$ = this.router.events.pipe(filter(e => e instanceof NavigationEvent.End && !e.url.includes('error')));\n routerEvent$.subscribe(event => {\n this.#previousNavigation.set(this.currentNavigation());\n this.#currentNavigation.set(event.url);\n });\n }\n getEvents(...eventTypes) {\n const filterRouterEvents = (event) => eventTypes.some(type => event instanceof type);\n return this.router.events.pipe(filter(filterRouterEvents));\n }\n getNavigationEvents(...navigationEventKeys) {\n const filterNavigationEvents = (event) => navigationEventKeys.some(key => event instanceof NavigationEvent[key]);\n return this.router.events.pipe(filter(filterNavigationEvents));\n }\n getAllEvents() {\n return this.router.events;\n }\n getAllNavigationEvents() {\n const keys = Object.keys(NavigationEvent);\n return this.getNavigationEvents(...keys);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterEvents, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterEvents, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterEvents, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWV2ZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcm91dGVyLWV2ZW50cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsZUFBZSxFQUNmLE1BQU0sR0FJUCxNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFeEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE1BQU0sRUFBRSxnQkFBZ0I7SUFDeEIsR0FBRyxFQUFFLGFBQWE7SUFDbEIsS0FBSyxFQUFFLGVBQWU7SUFDdEIsS0FBSyxFQUFFLGVBQWU7Q0FDdkIsQ0FBQztBQUdGLE1BQU0sT0FBTyxZQUFZO0lBQ0osTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsQyxtQkFBbUIsR0FBRyxNQUFNLENBQXFCLFNBQVMsK0RBQUMsQ0FBQztJQUNyRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFbEQsa0JBQWtCLEdBQUcsTUFBTSxDQUFxQixTQUFTLDhEQUFDLENBQUM7SUFDcEUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRXpEO1FBQ0UsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDN0MsQ0FBQztRQUUvQixZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQW9DLEdBQUcsVUFBYTtRQUMzRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDO1FBRTVGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELG1CQUFtQixDQUFnQyxHQUFHLG1CQUFzQjtRQU8xRSxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBWSxFQUFvQyxFQUFFLENBQ2hGLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV6RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUF3QixDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQzt1R0FsRFUsWUFBWTsyR0FBWixZQUFZLGNBREMsTUFBTTs7MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE5hdmlnYXRpb25DYW5jZWwsXG4gIE5hdmlnYXRpb25FbmQsXG4gIE5hdmlnYXRpb25FcnJvcixcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBSb3V0ZXIsXG4gIFJvdXRlckV2ZW50LFxuICBFdmVudCxcbiAgUm91dGVyU3RhdGUsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBOYXZpZ2F0aW9uRXZlbnQgPSB7XG4gIENhbmNlbDogTmF2aWdhdGlvbkNhbmNlbCxcbiAgRW5kOiBOYXZpZ2F0aW9uRW5kLFxuICBFcnJvcjogTmF2aWdhdGlvbkVycm9yLFxuICBTdGFydDogTmF2aWdhdGlvblN0YXJ0LFxufTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXJFdmVudHMge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcmVhZG9ubHkgI3ByZXZpb3VzTmF2aWdhdGlvbiA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByZXZpb3VzTmF2aWdhdGlvbiA9IHRoaXMuI3ByZXZpb3VzTmF2aWdhdGlvbi5hc1JlYWRvbmx5KCk7XG5cbiAgcmVhZG9ubHkgI2N1cnJlbnROYXZpZ2F0aW9uID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY3VycmVudE5hdmlnYXRpb24gPSB0aGlzLiNjdXJyZW50TmF2aWdhdGlvbi5hc1JlYWRvbmx5KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0ZW5Ub05hdmlnYXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0ZW5Ub05hdmlnYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGVyRXZlbnQkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkV2ZW50LkVuZCAmJiAhZS51cmwuaW5jbHVkZXMoJ2Vycm9yJykpXG4gICAgKSBhcyBPYnNlcnZhYmxlPE5hdmlnYXRpb25FbmQ+O1xuICAgIFxuICAgIHJvdXRlckV2ZW50JC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgdGhpcy4jcHJldmlvdXNOYXZpZ2F0aW9uLnNldCh0aGlzLmN1cnJlbnROYXZpZ2F0aW9uKCkpO1xuICAgICAgdGhpcy4jY3VycmVudE5hdmlnYXRpb24uc2V0KGV2ZW50LnVybCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRFdmVudHM8VCBleHRlbmRzIFJvdXRlckV2ZW50Q29uc3RydWN0b3JzPiguLi5ldmVudFR5cGVzOiBUKSB7XG4gICAgY29uc3QgZmlsdGVyUm91dGVyRXZlbnRzID0gKGV2ZW50OiBFdmVudCkgPT4gZXZlbnRUeXBlcy5zb21lKHR5cGUgPT4gZXZlbnQgaW5zdGFuY2VvZiB0eXBlKTtcblxuICAgIHJldHVybiB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZmlsdGVyUm91dGVyRXZlbnRzKSk7XG4gIH1cblxuICBnZXROYXZpZ2F0aW9uRXZlbnRzPFQgZXh0ZW5kcyBOYXZpZ2F0aW9uRXZlbnRLZXlzPiguLi5uYXZpZ2F0aW9uRXZlbnRLZXlzOiBUKSB7XG4gICAgdHlwZSBGaWx0ZXJlZE5hdmlnYXRpb25FdmVudCA9IFQgZXh0ZW5kcyAoaW5mZXIgS2V5KVtdXG4gICAgICA/IEtleSBleHRlbmRzIE5hdmlnYXRpb25FdmVudEtleVxuICAgICAgICA/IEluc3RhbmNlVHlwZTxOYXZpZ2F0aW9uRXZlbnRUeXBlW0tleV0+XG4gICAgICAgIDogbmV2ZXJcbiAgICAgIDogbmV2ZXI7XG5cbiAgICBjb25zdCBmaWx0ZXJOYXZpZ2F0aW9uRXZlbnRzID0gKGV2ZW50OiBFdmVudCk6IGV2ZW50IGlzIEZpbHRlcmVkTmF2aWdhdGlvbkV2ZW50ID0+XG4gICAgICBuYXZpZ2F0aW9uRXZlbnRLZXlzLnNvbWUoa2V5ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkV2ZW50W2tleV0pO1xuXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihmaWx0ZXJOYXZpZ2F0aW9uRXZlbnRzKSk7XG4gIH1cblxuICBnZXRBbGxFdmVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cztcbiAgfVxuXG4gIGdldEFsbE5hdmlnYXRpb25FdmVudHMoKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE5hdmlnYXRpb25FdmVudCkgYXMgTmF2aWdhdGlvbkV2ZW50S2V5cztcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uRXZlbnRzKC4uLmtleXMpO1xuICB9XG59XG5cbnR5cGUgUm91dGVyRXZlbnRDb25zdHJ1Y3RvcnMgPSBbVHlwZTxSb3V0ZXJFdmVudD4sIC4uLlR5cGU8Um91dGVyRXZlbnQ+W11dO1xuXG50eXBlIE5hdmlnYXRpb25FdmVudEtleXMgPSBbTmF2aWdhdGlvbkV2ZW50S2V5LCAuLi5OYXZpZ2F0aW9uRXZlbnRLZXlbXV07XG5cbnR5cGUgTmF2aWdhdGlvbkV2ZW50VHlwZSA9IHR5cGVvZiBOYXZpZ2F0aW9uRXZlbnQ7XG5cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25FdmVudEtleSA9IGtleW9mIE5hdmlnYXRpb25FdmVudFR5cGU7XG4iXX0=","import { Injectable, Injector } from '@angular/core';\nimport { NavigationStart } from '@angular/router';\nimport { of, Subject, timer } from 'rxjs';\nimport { map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { RouterEvents } from './router-events.service';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./router-events.service\";\nexport class RouterWaitService {\n routerEvents;\n store = new InternalStore({ loading: false });\n destroy$ = new Subject();\n delay;\n constructor(routerEvents, injector) {\n this.routerEvents = routerEvents;\n // this.delay = injector.get(LOADER_DELAY, 500);\n this.delay = 500;\n this.updateLoadingStatusOnNavigationEvents();\n }\n updateLoadingStatusOnNavigationEvents() {\n this.routerEvents\n .getAllNavigationEvents()\n .pipe(map(event => event instanceof NavigationStart), switchMap(condition => condition\n ? this.delay === 0\n ? of(true)\n : timer(this.delay || 0).pipe(mapTo(true), takeUntil(this.destroy$))\n : of(false)), tap(() => this.destroy$.next()))\n .subscribe(status => {\n this.setLoading(status);\n });\n }\n getLoading() {\n return this.store.state.loading;\n }\n getLoading$() {\n return this.store.sliceState(({ loading }) => loading);\n }\n updateLoading$() {\n return this.store.sliceUpdate(({ loading }) => loading);\n }\n setLoading(loading) {\n this.store.patch({ loading });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterWaitService, deps: [{ token: i1.RouterEvents }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterWaitService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterWaitService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RouterEvents }, { type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXdhaXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3JvdXRlci13YWl0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVMvRCxNQUFNLE9BQU8saUJBQWlCO0lBSVI7SUFIWixLQUFLLEdBQUcsSUFBSSxhQUFhLENBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0QsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDL0IsS0FBSyxDQUFTO0lBQ3RCLFlBQW9CLFlBQTBCLEVBQUUsUUFBa0I7UUFBOUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDNUMsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFTyxxQ0FBcUM7UUFDM0MsSUFBSSxDQUFDLFlBQVk7YUFDZCxzQkFBc0IsRUFBRTthQUN4QixJQUFJLENBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLGVBQWUsQ0FBQyxFQUM5QyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDcEIsU0FBUztZQUNQLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNWLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FDZCxFQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQ2hDO2FBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0I7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7dUdBM0NVLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IG9mLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtYXBUbywgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJvdXRlckV2ZW50cyB9IGZyb20gJy4vcm91dGVyLWV2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IEludGVybmFsU3RvcmUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlcldhaXRTdGF0ZSB7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXJXYWl0U2VydmljZSB7XG4gIHByaXZhdGUgc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZTxSb3V0ZXJXYWl0U3RhdGU+KHsgbG9hZGluZzogZmFsc2UgfSk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGRlbGF5OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyRXZlbnRzOiBSb3V0ZXJFdmVudHMsIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIC8vIHRoaXMuZGVsYXkgPSBpbmplY3Rvci5nZXQoTE9BREVSX0RFTEFZLCA1MDApO1xuICAgIHRoaXMuZGVsYXkgPSA1MDA7XG4gICAgdGhpcy51cGRhdGVMb2FkaW5nU3RhdHVzT25OYXZpZ2F0aW9uRXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxvYWRpbmdTdGF0dXNPbk5hdmlnYXRpb25FdmVudHMoKSB7XG4gICAgdGhpcy5yb3V0ZXJFdmVudHNcbiAgICAgIC5nZXRBbGxOYXZpZ2F0aW9uRXZlbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpLFxuICAgICAgICBzd2l0Y2hNYXAoY29uZGl0aW9uID0+XG4gICAgICAgICAgY29uZGl0aW9uXG4gICAgICAgICAgICA/IHRoaXMuZGVsYXkgPT09IDBcbiAgICAgICAgICAgICAgPyBvZih0cnVlKVxuICAgICAgICAgICAgICA6IHRpbWVyKHRoaXMuZGVsYXkgfHwgMCkucGlwZShtYXBUbyh0cnVlKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgOiBvZihmYWxzZSksXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmRlc3Ryb3kkLm5leHQoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhzdGF0dXMpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRMb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLmxvYWRpbmc7XG4gIH1cblxuICBnZXRMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKCh7IGxvYWRpbmcgfSkgPT4gbG9hZGluZyk7XG4gIH1cblxuICB1cGRhdGVMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVVwZGF0ZSgoeyBsb2FkaW5nIH0pID0+IGxvYWRpbmcpO1xuICB9XG5cbiAgc2V0TG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5zdG9yZS5wYXRjaCh7IGxvYWRpbmcgfSk7XG4gIH1cbn1cbiJdfQ==","import { BehaviorSubject } from 'rxjs';\nimport { inject } from '@angular/core';\nimport { SORT_COMPARE_FUNC } from './utils/compare-func.token';\nexport class AbstractMenuService {\n sortFn;\n _items$ = new BehaviorSubject([]);\n get items() {\n return this._items$.value;\n }\n get items$() {\n return this._items$.asObservable();\n }\n constructor() {\n this.sortFn = inject(SORT_COMPARE_FUNC);\n }\n addItems(newItems) {\n const items = [...this.items];\n newItems.forEach(item => {\n const index = items.findIndex(i => i.id === item.id);\n // const data = new this.baseClass(item);\n // const data = new this.baseClass(item);\n if (index > -1) {\n items[index] = item;\n return;\n }\n items.push(item);\n });\n items.sort(this.sortItems);\n this._items$.next(items);\n }\n removeItem(id) {\n const index = this.items.findIndex(item => item.id === id);\n if (index < 0)\n return;\n const items = [...this.items.slice(0, index), ...this.items.slice(index + 1)];\n this._items$.next(items);\n }\n patchItem(id, item) {\n const index = this.items.findIndex(i => i.id === id);\n if (index < 0)\n return;\n const items = [...this.items];\n items[index] = new this.baseClass({ ...items[index], ...item });\n items.sort(this.sortItems);\n this._items$.next(items);\n }\n sortItems = (a, b) => {\n return this.sortFn(a, b);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvYWJzdHJhY3QtbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxNQUFNLE9BQWdCLG1CQUFtQjtJQUdwQixNQUFNLENBQStDO0lBRTlELE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztJQUVqRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWE7UUFDcEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRCx5Q0FBeUM7WUFDekMseUNBQXlDO1lBR3pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFtQjtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFdEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMsRUFBbUIsRUFBRSxJQUE0QjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFckQsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFdEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLEdBQUcsQ0FBQyxDQUFJLEVBQUUsQ0FBSSxFQUFFLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZJdGVtLCBTb3J0YWJsZUl0ZW0gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcbmltcG9ydCB7IFNPUlRfQ09NUEFSRV9GVU5DIH0gZnJvbSAnLi91dGlscy9jb21wYXJlLWZ1bmMudG9rZW4nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RNZW51U2VydmljZTxUIGV4dGVuZHMgTmF2SXRlbT4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYmFzZUNsYXNzOiBUeXBlPGFueT47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNvcnRGbjogKGE6IFNvcnRhYmxlSXRlbSwgYjogU29ydGFibGVJdGVtKSA9PiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuXG4gIGdldCBpdGVtcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcyQudmFsdWU7XG4gIH1cblxuICBnZXQgaXRlbXMkKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc29ydEZuID0gaW5qZWN0KFNPUlRfQ09NUEFSRV9GVU5DKTtcbiAgfVxuXG4gIGFkZEl0ZW1zKG5ld0l0ZW1zOiBUW10pIHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zXTtcblxuICAgIG5ld0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgLy8gY29uc3QgZGF0YSA9IG5ldyB0aGlzLmJhc2VDbGFzcyhpdGVtKTtcbiAgICAgIC8vIGNvbnN0IGRhdGEgPSBuZXcgdGhpcy5iYXNlQ2xhc3MoaXRlbSk7XG5cblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaXRlbXNbaW5kZXhdID0gaXRlbTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuICAgIGl0ZW1zLnNvcnQodGhpcy5zb3J0SXRlbXMpO1xuICAgIHRoaXMuX2l0ZW1zJC5uZXh0KGl0ZW1zKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBpZCk7XG5cbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG5cbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zLnNsaWNlKDAsIGluZGV4KSwgLi4udGhpcy5pdGVtcy5zbGljZShpbmRleCArIDEpXTtcbiAgICB0aGlzLl9pdGVtcyQubmV4dChpdGVtcyk7XG4gIH1cblxuICBwYXRjaEl0ZW0oaWQ6IHN0cmluZyB8IG51bWJlciwgaXRlbTogUGFydGlhbDxPbWl0PFQsICdpZCc+Pikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaSA9PiBpLmlkID09PSBpZCk7XG5cbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG5cbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zXTtcbiAgICBpdGVtc1tpbmRleF0gPSBuZXcgdGhpcy5iYXNlQ2xhc3MoeyAuLi5pdGVtc1tpbmRleF0sIC4uLml0ZW0gfSk7XG4gICAgaXRlbXMuc29ydCh0aGlzLnNvcnRJdGVtcyk7XG4gICAgdGhpcy5faXRlbXMkLm5leHQoaXRlbXMpO1xuICB9XG5cbiAgc29ydEl0ZW1zID0gKGE6IFQsIGI6IFQpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zb3J0Rm4oYSwgYik7XG4gIH07XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { AbstractMenuService } from './abstract-menu.service';\nimport { NavItem } from '@elite.framework/ng.core/models';\nimport * as i0 from \"@angular/core\";\nexport class NavItemsService extends AbstractMenuService {\n baseClass = NavItem;\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NavItemsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NavItemsService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NavItemsService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWl0ZW1zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9uYXYtaXRlbXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHMUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsbUJBQTRCO0lBQ3JELFNBQVMsR0FBRyxPQUFPLENBQUM7dUdBRG5CLGVBQWU7MkdBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0TWVudVNlcnZpY2UgfSBmcm9tICcuL2Fic3RyYWN0LW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmF2SXRlbXNTZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3RNZW51U2VydmljZTxOYXZJdGVtPiB7XG4gIHByb3RlY3RlZCBiYXNlQ2xhc3MgPSBOYXZJdGVtO1xufVxuIl19","import { Injectable } from '@angular/core';\nimport { AbstractMenuService } from './abstract-menu.service';\nimport { UserMenu } from '@elite.framework/ng.core/models';\nimport * as i0 from \"@angular/core\";\nexport class UserMenuService extends AbstractMenuService {\n baseClass = UserMenu;\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: UserMenuService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: UserMenuService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: UserMenuService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi91c2VyLW1lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHM0QsTUFBTSxPQUFPLGVBQWdCLFNBQVEsbUJBQTZCO0lBQ3RELFNBQVMsR0FBRyxRQUFRLENBQUM7dUdBRHBCLGVBQWU7MkdBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0TWVudVNlcnZpY2UgfSBmcm9tICcuL2Fic3RyYWN0LW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyTWVudSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFVzZXJNZW51U2VydmljZSBleHRlbmRzIEFic3RyYWN0TWVudVNlcnZpY2U8VXNlck1lbnU+IHtcbiAgcHJvdGVjdGVkIGJhc2VDbGFzcyA9IFVzZXJNZW51O1xufVxuIl19","import { PRIMARY_OUTLET } from \"@angular/router\";\nimport { noop } from '@elite.framework/ng.core/utils';\nexport function findRoute(routesService, path) {\n const node = routesService.find(route => route.path === path);\n return node || path === '/'\n ? node\n : findRoute(routesService, path.split('/').slice(0, -1).join('/') || '/');\n}\nexport function getRoutePath(router, url = router.url) {\n const emptyGroup = { segments: [] };\n const primaryGroup = router.parseUrl(url).root.children[PRIMARY_OUTLET];\n return '/' + (primaryGroup || emptyGroup).segments.map(({ path }) => path).join('/');\n}\nexport function reloadRoute(router, ngZone) {\n const { shouldReuseRoute } = router.routeReuseStrategy;\n const setRouteReuse = (reuse) => {\n router.routeReuseStrategy.shouldReuseRoute = reuse;\n };\n setRouteReuse(() => false);\n router.navigated = false;\n ngZone.run(async () => {\n await router.navigateByUrl(router.url).catch(noop);\n setRouteReuse(shouldReuseRoute);\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi91dGlscy9yb3V0ZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUF1QyxNQUFNLGlCQUFpQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxJQUFJLEVBQVksTUFBTSxnQ0FBZ0MsQ0FBQztBQUdoRSxNQUFNLFVBQVUsU0FBUyxDQUFDLGFBQTRCLEVBQUUsSUFBWTtJQUNsRSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUU5RCxPQUFPLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRztRQUN6QixDQUFDLENBQUMsSUFBSTtRQUNOLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFjLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHO0lBQzNELE1BQU0sVUFBVSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQWtCLEVBQXFCLENBQUM7SUFDdkUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXhFLE9BQU8sR0FBRyxHQUFHLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkYsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYyxFQUFFLE1BQWM7SUFDeEQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBOEIsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDckQsQ0FBQyxDQUFDO0lBRUYsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRXpCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDcEIsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQUklNQVJZX09VVExFVCwgUm91dGVyLCBVcmxTZWdtZW50LCBVcmxTZWdtZW50R3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgbm9vcCwgVHJlZU5vZGUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuaW1wb3J0IHsgUm91dGVzU2VydmljZSB9IGZyb20gJy4uL3JvdXRlcy5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRSb3V0ZShyb3V0ZXNTZXJ2aWNlOiBSb3V0ZXNTZXJ2aWNlLCBwYXRoOiBzdHJpbmcpOiBUcmVlTm9kZTxSb3V0ZT4gfCBudWxsIHtcbiAgY29uc3Qgbm9kZSA9IHJvdXRlc1NlcnZpY2UuZmluZChyb3V0ZSA9PiByb3V0ZS5wYXRoID09PSBwYXRoKTtcblxuICByZXR1cm4gbm9kZSB8fCBwYXRoID09PSAnLydcbiAgICA/IG5vZGVcbiAgICA6IGZpbmRSb3V0ZShyb3V0ZXNTZXJ2aWNlLCBwYXRoLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKSB8fCAnLycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVQYXRoKHJvdXRlcjogUm91dGVyLCB1cmwgPSByb3V0ZXIudXJsKSB7XG4gIGNvbnN0IGVtcHR5R3JvdXAgPSB7IHNlZ21lbnRzOiBbXSBhcyBVcmxTZWdtZW50W10gfSBhcyBVcmxTZWdtZW50R3JvdXA7XG4gIGNvbnN0IHByaW1hcnlHcm91cCA9IHJvdXRlci5wYXJzZVVybCh1cmwpLnJvb3QuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xuXG4gIHJldHVybiAnLycgKyAocHJpbWFyeUdyb3VwIHx8IGVtcHR5R3JvdXApLnNlZ21lbnRzLm1hcCgoeyBwYXRoIH0pID0+IHBhdGgpLmpvaW4oJy8nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZFJvdXRlKHJvdXRlcjogUm91dGVyLCBuZ1pvbmU6IE5nWm9uZSkge1xuICBjb25zdCB7IHNob3VsZFJldXNlUm91dGUgfSA9IHJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3k7XG4gIGNvbnN0IHNldFJvdXRlUmV1c2UgPSAocmV1c2U6IHR5cGVvZiBzaG91bGRSZXVzZVJvdXRlKSA9PiB7XG4gICAgcm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gcmV1c2U7XG4gIH07XG5cbiAgc2V0Um91dGVSZXVzZSgoKSA9PiBmYWxzZSk7XG4gIHJvdXRlci5uYXZpZ2F0ZWQgPSBmYWxzZTtcblxuICBuZ1pvbmUucnVuKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByb3V0ZXIubmF2aWdhdGVCeVVybChyb3V0ZXIudXJsKS5jYXRjaChub29wKTtcbiAgICBzZXRSb3V0ZVJldXNlKHNob3VsZFJldXNlUm91dGUpO1xuICB9KTtcbn1cbiJdfQ==","import { Injectable, NgZone } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport { map } from 'rxjs/operators';\nimport { reloadRoute } from './utils/route-utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/router\";\nexport class ReplaceableComponentsService {\n ngZone;\n router;\n store;\n get replaceableComponents$() {\n return this.store.sliceState(state => state);\n }\n get replaceableComponents() {\n return this.store.state;\n }\n get onUpdate$() {\n return this.store.sliceUpdate(state => state);\n }\n constructor(ngZone, router) {\n this.ngZone = ngZone;\n this.router = router;\n this.store = new InternalStore([]);\n }\n add(replaceableComponent, reload) {\n const replaceableComponents = [...this.store.state];\n const index = replaceableComponents.findIndex(component => component.key === replaceableComponent.key);\n if (index > -1) {\n replaceableComponents[index] = replaceableComponent;\n }\n else {\n replaceableComponents.push(replaceableComponent);\n }\n this.store.set(replaceableComponents);\n if (reload)\n reloadRoute(this.router, this.ngZone);\n }\n get(replaceableComponentKey) {\n return this.replaceableComponents.find(component => component.key === replaceableComponentKey);\n }\n get$(replaceableComponentKey) {\n return this.replaceableComponents$.pipe(map(components => components.find(component => component.key === replaceableComponentKey)));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReplaceableComponentsService, deps: [{ token: i0.NgZone }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReplaceableComponentsService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReplaceableComponentsService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.Router }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZWFibGUtY29tcG9uZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcmVwbGFjZWFibGUtY29tcG9uZW50cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBR2xELE1BQU0sT0FBTyw0QkFBNEI7SUFlbkI7SUFBd0I7SUFkM0IsS0FBSyxDQUE4RDtJQUVwRixJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsWUFBb0IsTUFBYyxFQUFVLE1BQWM7UUFBdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDeEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFrRCxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELEdBQUcsQ0FBQyxvQkFBZ0UsRUFBRSxNQUFnQjtRQUNwRixNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBELE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FDM0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLG9CQUFvQixDQUFDLEdBQUcsQ0FDeEQsQ0FBQztRQUVGLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDZixxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLHFCQUFxQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXRDLElBQUksTUFBTTtZQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsR0FBRyxDQUFDLHVCQUErQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLHVCQUF1QixDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELElBQUksQ0FBQyx1QkFBK0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyx1QkFBdUIsQ0FBQyxDQUFDLENBQzNGLENBQUM7SUFDSixDQUFDO3VHQTdDVSw0QkFBNEI7MkdBQTVCLDRCQUE0QixjQURmLE1BQU07OzJGQUNuQiw0QkFBNEI7a0JBRHhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUmVwbGFjZWFibGVDb21wb25lbnRzIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBJbnRlcm5hbFN0b3JlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHJlbG9hZFJvdXRlIH0gZnJvbSAnLi91dGlscy9yb3V0ZS11dGlscyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwbGFjZWFibGVDb21wb25lbnRzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IEludGVybmFsU3RvcmU8UmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10+O1xuXG4gIGdldCByZXBsYWNlYWJsZUNvbXBvbmVudHMkKCk6IE9ic2VydmFibGU8UmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlKTtcbiAgfVxuXG4gIGdldCByZXBsYWNlYWJsZUNvbXBvbmVudHMoKTogUmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlO1xuICB9XG5cbiAgZ2V0IG9uVXBkYXRlJCgpOiBPYnNlcnZhYmxlPFJlcGxhY2VhYmxlQ29tcG9uZW50cy5SZXBsYWNlYWJsZUNvbXBvbmVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VVcGRhdGUoc3RhdGUgPT4gc3RhdGUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgIHRoaXMuc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZShbXSBhcyBSZXBsYWNlYWJsZUNvbXBvbmVudHMuUmVwbGFjZWFibGVDb21wb25lbnRbXSk7XG4gIH1cblxuICBhZGQocmVwbGFjZWFibGVDb21wb25lbnQ6IFJlcGxhY2VhYmxlQ29tcG9uZW50cy5SZXBsYWNlYWJsZUNvbXBvbmVudCwgcmVsb2FkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHJlcGxhY2VhYmxlQ29tcG9uZW50cyA9IFsuLi50aGlzLnN0b3JlLnN0YXRlXTtcblxuICAgIGNvbnN0IGluZGV4ID0gcmVwbGFjZWFibGVDb21wb25lbnRzLmZpbmRJbmRleChcbiAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQua2V5ID09PSByZXBsYWNlYWJsZUNvbXBvbmVudC5rZXksXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXBsYWNlYWJsZUNvbXBvbmVudHNbaW5kZXhdID0gcmVwbGFjZWFibGVDb21wb25lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcGxhY2VhYmxlQ29tcG9uZW50cy5wdXNoKHJlcGxhY2VhYmxlQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnNldChyZXBsYWNlYWJsZUNvbXBvbmVudHMpO1xuXG4gICAgaWYgKHJlbG9hZCkgcmVsb2FkUm91dGUodGhpcy5yb3V0ZXIsIHRoaXMubmdab25lKTtcbiAgfVxuXG4gIGdldChyZXBsYWNlYWJsZUNvbXBvbmVudEtleTogc3RyaW5nKTogUmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlYWJsZUNvbXBvbmVudHMuZmluZChjb21wb25lbnQgPT4gY29tcG9uZW50LmtleSA9PT0gcmVwbGFjZWFibGVDb21wb25lbnRLZXkpO1xuICB9XG5cbiAgZ2V0JChyZXBsYWNlYWJsZUNvbXBvbmVudEtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZXBsYWNlYWJsZUNvbXBvbmVudHMuUmVwbGFjZWFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlYWJsZUNvbXBvbmVudHMkLnBpcGUoXG4gICAgICBtYXAoY29tcG9uZW50cyA9PiBjb21wb25lbnRzLmZpbmQoY29tcG9uZW50ID0+IGNvbXBvbmVudC5rZXkgPT09IHJlcGxhY2VhYmxlQ29tcG9uZW50S2V5KSksXG4gICAgKTtcbiAgfVxufVxuIl19","import { Injectable, Injector } from '@angular/core';\nimport { map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { of, Subject, timer } from 'rxjs';\nimport { getPathName, InternalStore } from '@elite.framework/ng.core/utils';\nimport * as i0 from \"@angular/core\";\nexport class HttpWaitService {\n store = new InternalStore({\n requests: [],\n filteredRequests: [],\n });\n delay;\n destroy$ = new Subject();\n constructor(injector) {\n this.delay = 500;\n }\n getLoading() {\n return !!this.applyFilter(this.store.state.requests).length;\n }\n getLoading$() {\n return this.store\n .sliceState(({ requests }) => requests)\n .pipe(map(requests => !!this.applyFilter(requests).length), switchMap(condition => condition\n ? this.delay === 0\n ? of(true)\n : timer(this.delay).pipe(mapTo(true), takeUntil(this.destroy$))\n : of(false)), tap(() => this.destroy$.next()));\n }\n updateLoading$() {\n return this.store.sliceUpdate(({ requests }) => !!this.applyFilter(requests).length);\n }\n clearLoading() {\n this.store.patch({ requests: [] });\n }\n addRequest(request) {\n this.store.patch({ requests: [...this.store.state.requests, request] });\n }\n deleteRequest(request) {\n const requests = this.store.state.requests.filter(r => r !== request);\n this.store.patch({ requests });\n }\n addFilter(request) {\n const requests = Array.isArray(request) ? request : [request];\n const filteredRequests = [\n ...this.store.state.filteredRequests.filter(f => !requests.some(r => this.isSameRequest(f, r))),\n ...requests,\n ];\n this.store.patch({ filteredRequests });\n }\n removeFilter(request) {\n const requests = Array.isArray(request) ? request : [request];\n const filteredRequests = this.store.state.filteredRequests.filter(f => !requests.some(r => this.isSameRequest(f, r)));\n this.store.patch({ filteredRequests });\n }\n applyFilter(requests) {\n if (!requests) {\n return [];\n }\n const { filteredRequests } = this.store.state;\n return requests.filter(({ method, url }) => !filteredRequests.find(filteredRequest => this.isSameRequest(filteredRequest, { method, endpoint: getPathName(url) })));\n }\n isSameRequest(filteredRequest, request) {\n const { method, endpoint } = filteredRequest;\n return endpoint === request.endpoint && method === request.method;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpWaitService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpWaitService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpWaitService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC13YWl0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9odHRwLXdhaXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQWM1RSxNQUFNLE9BQU8sZUFBZTtJQUNoQixLQUFLLEdBQUcsSUFBSSxhQUFhLENBQWdCO1FBQ2pELFFBQVEsRUFBRSxFQUFFO1FBQ1osZ0JBQWdCLEVBQUUsRUFBRTtLQUNyQixDQUFDLENBQUM7SUFFSyxLQUFLLENBQVM7SUFDZCxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV2QyxZQUFZLFFBQWtCO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ2QsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQ3RDLElBQUksQ0FDSCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFD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QUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxXQUFXLENBQUMsUUFBd0M7UUFDMUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDOUMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUNwQixDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FDbEIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQzVFLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsZUFBZ0MsRUFBRSxPQUF3QjtRQUM5RSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUM3QyxPQUFPLFFBQVEsS0FBSyxPQUFPLENBQUMsUUFBUSxJQUFJLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3BFLENBQUM7dUdBckZVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwLCBtYXBUbywgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG9mLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0UGF0aE5hbWUsIEludGVybmFsU3RvcmUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cFdhaXRTdGF0ZSB7XG4gIHJlcXVlc3RzOiBIdHRwUmVxdWVzdDxhbnk+W107XG4gIGZpbHRlcmVkUmVxdWVzdHM6IEFycmF5PEh0dHBSZXF1ZXN0SW5mbz47XG59XG5leHBvcnQgaW50ZXJmYWNlIEh0dHBSZXF1ZXN0SW5mbyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBlbmRwb2ludDogc3RyaW5nO1xufVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEh0dHBXYWl0U2VydmljZSB7XG4gIHByb3RlY3RlZCBzdG9yZSA9IG5ldyBJbnRlcm5hbFN0b3JlPEh0dHBXYWl0U3RhdGU+KHtcbiAgICByZXF1ZXN0czogW10sXG4gICAgZmlsdGVyZWRSZXF1ZXN0czogW10sXG4gIH0pO1xuXG4gIHByaXZhdGUgZGVsYXk6IG51bWJlcjtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5kZWxheSA9IDUwMDtcbiAgfVxuXG4gIGdldExvYWRpbmcoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5hcHBseUZpbHRlcih0aGlzLnN0b3JlLnN0YXRlLnJlcXVlc3RzKS5sZW5ndGg7XG4gIH1cblxuICBnZXRMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZVxuICAgICAgLnNsaWNlU3RhdGUoKHsgcmVxdWVzdHMgfSkgPT4gcmVxdWVzdHMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcXVlc3RzID0+ICEhdGhpcy5hcHBseUZpbHRlcihyZXF1ZXN0cykubGVuZ3RoKSxcbiAgICAgICAgc3dpdGNoTWFwKGNvbmRpdGlvbiA9PlxuICAgICAgICAgIGNvbmRpdGlvblxuICAgICAgICAgICAgPyB0aGlzLmRlbGF5ID09PSAwXG4gICAgICAgICAgICAgID8gb2YodHJ1ZSlcbiAgICAgICAgICAgICAgOiB0aW1lcih0aGlzLmRlbGF5KS5waXBlKG1hcFRvKHRydWUpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICA6IG9mKGZhbHNlKSxcbiAgICAgICAgKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZGVzdHJveSQubmV4dCgpKSxcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVVwZGF0ZSgoeyByZXF1ZXN0cyB9KSA9PiAhIXRoaXMuYXBwbHlGaWx0ZXIocmVxdWVzdHMpLmxlbmd0aCk7XG4gIH1cblxuICBjbGVhckxvYWRpbmcoKSB7XG4gICAgdGhpcy5zdG9yZS5wYXRjaCh7IHJlcXVlc3RzOiBbXSB9KTtcbiAgfVxuXG4gIGFkZFJlcXVlc3QocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pikge1xuICAgIHRoaXMuc3RvcmUucGF0Y2goeyByZXF1ZXN0czogWy4uLnRoaXMuc3RvcmUuc3RhdGUucmVxdWVzdHMsIHJlcXVlc3RdIH0pO1xuICB9XG5cbiAgZGVsZXRlUmVxdWVzdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLnN0b3JlLnN0YXRlLnJlcXVlc3RzLmZpbHRlcihyID0+IHIgIT09IHJlcXVlc3QpO1xuICAgIHRoaXMuc3RvcmUucGF0Y2goeyByZXF1ZXN0cyB9KTtcbiAgfVxuXG4gIGFkZEZpbHRlcihyZXF1ZXN0OiBIdHRwUmVxdWVzdEluZm8gfCBIdHRwUmVxdWVzdEluZm9bXSkge1xuICAgIGNvbnN0IHJlcXVlc3RzID0gQXJyYXkuaXNBcnJheShyZXF1ZXN0KSA/IHJlcXVlc3QgOiBbcmVxdWVzdF07XG4gICAgY29uc3QgZmlsdGVyZWRSZXF1ZXN0cyA9IFtcbiAgICAgIC4uLnRoaXMuc3RvcmUuc3RhdGUuZmlsdGVyZWRSZXF1ZXN0cy5maWx0ZXIoXG4gICAgICAgIGYgPT4gIXJlcXVlc3RzLnNvbWUociA9PiB0aGlzLmlzU2FtZVJlcXVlc3QoZiwgcikpLFxuICAgICAgKSxcbiAgICAgIC4uLnJlcXVlc3RzLFxuICAgIF07XG4gICAgdGhpcy5zdG9yZS5wYXRjaCh7IGZpbHRlcmVkUmVxdWVzdHMgfSk7XG4gIH1cblxuICByZW1vdmVGaWx0ZXIocmVxdWVzdDogSHR0cFJlcXVlc3RJbmZvIHwgSHR0cFJlcXVlc3RJbmZvW10pIHtcbiAgICBjb25zdCByZXF1ZXN0cyA9IEFycmF5LmlzQXJyYXkocmVxdWVzdCkgPyByZXF1ZXN0IDogW3JlcXVlc3RdO1xuICAgIGNvbnN0IGZpbHRlcmVkUmVxdWVzdHMgPSB0aGlzLnN0b3JlLnN0YXRlLmZpbHRlcmVkUmVxdWVzdHMuZmlsdGVyKFxuICAgICAgZiA9PiAhcmVxdWVzdHMuc29tZShyID0+IHRoaXMuaXNTYW1lUmVxdWVzdChmLCByKSksXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLnBhdGNoKHsgZmlsdGVyZWRSZXF1ZXN0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXIocmVxdWVzdHM6IEh0dHBSZXF1ZXN0PGFueT5bXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghcmVxdWVzdHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgeyBmaWx0ZXJlZFJlcXVlc3RzIH0gPSB0aGlzLnN0b3JlLnN0YXRlO1xuICAgIHJldHVybiByZXF1ZXN0cy5maWx0ZXIoXG4gICAgICAoeyBtZXRob2QsIHVybCB9KSA9PlxuICAgICAgICAhZmlsdGVyZWRSZXF1ZXN0cy5maW5kKGZpbHRlcmVkUmVxdWVzdCA9PlxuICAgICAgICAgIHRoaXMuaXNTYW1lUmVxdWVzdChmaWx0ZXJlZFJlcXVlc3QsIHsgbWV0aG9kLCBlbmRwb2ludDogZ2V0UGF0aE5hbWUodXJsKSB9KSxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NhbWVSZXF1ZXN0KGZpbHRlcmVkUmVxdWVzdDogSHR0cFJlcXVlc3RJbmZvLCByZXF1ZXN0OiBIdHRwUmVxdWVzdEluZm8pIHtcbiAgICBjb25zdCB7IG1ldGhvZCwgZW5kcG9pbnQgfSA9IGZpbHRlcmVkUmVxdWVzdDtcbiAgICByZXR1cm4gZW5kcG9pbnQgPT09IHJlcXVlc3QuZW5kcG9pbnQgJiYgbWV0aG9kID09PSByZXF1ZXN0Lm1ldGhvZDtcbiAgfVxufVxuIl19","import { Injectable, inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class WindowService {\n document = inject(DOCUMENT);\n window = this.document.defaultView;\n navigator = this.window?.navigator;\n copyToClipboard(text) {\n return this.navigator?.clipboard.writeText(text);\n }\n open(url, target, features) {\n return this.window?.open(url, target, features);\n }\n reloadPage() {\n this.window?.location.reload();\n }\n downloadBlob(blob, fileName) {\n const blobUrl = this.window?.URL.createObjectURL(blob);\n const a = this.document.createElement('a');\n a.style.display = 'none';\n a.href = blobUrl ?? '';\n a.download = fileName;\n this.document.body.appendChild(a);\n a.dispatchEvent(new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: this.window,\n }));\n this.window?.URL.revokeObjectURL(blobUrl ?? '');\n this.document.body.removeChild(a);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: WindowService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: WindowService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: WindowService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi93aW5kb3cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxhQUFhO0lBQ1IsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDbkMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO0lBRW5ELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLENBQUMsR0FBa0IsRUFBRSxNQUFlLEVBQUUsUUFBaUI7UUFDekQsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELFlBQVksQ0FBQyxJQUFVLEVBQUUsUUFBZ0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN6QixDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxhQUFhLENBQ2IsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLElBQUk7WUFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ2xCLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQzt1R0FoQ1UsYUFBYTsyR0FBYixhQUFhLGNBREEsTUFBTTs7MkZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgV2luZG93U2VydmljZSB7XG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHB1YmxpYyByZWFkb25seSB3aW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBwdWJsaWMgcmVhZG9ubHkgbmF2aWdhdG9yID0gdGhpcy53aW5kb3c/Lm5hdmlnYXRvcjtcblxuICBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPnxhbnkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRvcj8uY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgfVxuXG4gIG9wZW4odXJsPzogc3RyaW5nIHwgVVJMLCB0YXJnZXQ/OiBzdHJpbmcsIGZlYXR1cmVzPzogc3RyaW5nKTogV2luZG93fGFueSB7XG4gICAgcmV0dXJuIHRoaXMud2luZG93Py5vcGVuKHVybCwgdGFyZ2V0LCBmZWF0dXJlcyk7XG4gIH1cblxuICByZWxvYWRQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMud2luZG93Py5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuICBkb3dubG9hZEJsb2IoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGJsb2JVcmwgPSB0aGlzLndpbmRvdz8uVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBjb25zdCBhID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGEuaHJlZiA9IGJsb2JVcmwgPz8gJyc7XG4gICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xuICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICBhLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIHZpZXc6IHRoaXMud2luZG93LFxuICAgICAgfSksXG4gICAgKTtcbiAgICB0aGlzLndpbmRvdz8uVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsID8/ICcnKTtcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gIH1cbn1cbiJdfQ==","import { HttpClient } from '@angular/common/http';\nimport { of } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { deepMerge } from '@elite.framework/ng.core/utils';\nimport { EnvironmentService } from '../environment.service';\nimport { HttpErrorReporterService } from '../http-error-reporter.service';\nexport function getRemoteEnv(injector, environment) {\n const environmentService = injector.get(EnvironmentService);\n const { remoteEnv } = environment;\n const { headers = {}, method = 'GET', url } = remoteEnv || {};\n if (!url)\n return Promise.resolve();\n const http = injector.get(HttpClient);\n const httpErrorReporter = injector.get(HttpErrorReporterService);\n return http\n .request(method, url, { headers })\n .pipe(catchError(err => {\n httpErrorReporter.reportError(err);\n return of(null);\n }), // TODO: Consider get handle function from a provider\n tap(env => environmentService.setState(mergeEnvironments(environment, env || {}, remoteEnv))))\n .toPromise();\n}\nfunction mergeEnvironments(local, remote, config) {\n switch (config.mergeStrategy) {\n case 'deepmerge':\n return deepMerge(local, remote);\n case 'overwrite':\n case null:\n case undefined:\n return remote;\n default:\n return config.mergeStrategy(local, remote);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi91dGlscy9lbnZpcm9ubWVudC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUxRSxNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQWtCLEVBQUUsV0FBaUM7SUFDaEYsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFNUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVMsSUFBSyxFQUFnQixDQUFDO0lBQzdFLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFbkMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUVqRSxPQUFPLElBQUk7U0FDUixPQUFPLENBQWMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQzlDLElBQUksQ0FDSCxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDLEVBQUUscURBQXFEO0lBQ3pELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNSLGtCQUFrQixDQUFDLFFBQVEsQ0FDekIsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSyxFQUFrQixFQUFFLFNBQXNCLENBQUMsQ0FDbkYsQ0FDRixDQUNGO1NBQ0EsU0FBUyxFQUFFLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQ3hCLEtBQTJCLEVBQzNCLE1BQW1CLEVBQ25CLE1BQWlCO0lBRWpCLFFBQVEsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLEtBQUssV0FBVztZQUNkLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQWdCLENBQUM7UUFDakQsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLFNBQVM7WUFDWixPQUFPLE1BQU0sQ0FBQztRQUNoQjtZQUNFLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgUmVtb3RlRW52IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2UgfSBmcm9tICcuLi9odHRwLWVycm9yLXJlcG9ydGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVtb3RlRW52KGluamVjdG9yOiBJbmplY3RvciwgZW52aXJvbm1lbnQ6IFBhcnRpYWw8RW52aXJvbm1lbnQ+KSB7XG4gIGNvbnN0IGVudmlyb25tZW50U2VydmljZSA9IGluamVjdG9yLmdldChFbnZpcm9ubWVudFNlcnZpY2UpO1xuXG4gIGNvbnN0IHsgcmVtb3RlRW52IH0gPSBlbnZpcm9ubWVudDtcbiAgY29uc3QgeyBoZWFkZXJzID0ge30sIG1ldGhvZCA9ICdHRVQnLCB1cmwgfSA9IHJlbW90ZUVudiB8fCAoe30gYXMgUmVtb3RlRW52KTtcbiAgaWYgKCF1cmwpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICBjb25zdCBodHRwID0gaW5qZWN0b3IuZ2V0KEh0dHBDbGllbnQpO1xuICBjb25zdCBodHRwRXJyb3JSZXBvcnRlciA9IGluamVjdG9yLmdldChIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2UpO1xuXG4gIHJldHVybiBodHRwXG4gICAgLnJlcXVlc3Q8RW52aXJvbm1lbnQ+KG1ldGhvZCwgdXJsLCB7IGhlYWRlcnMgfSlcbiAgICAucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgaHR0cEVycm9yUmVwb3J0ZXIucmVwb3J0RXJyb3IoZXJyKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksIC8vIFRPRE86IENvbnNpZGVyIGdldCBoYW5kbGUgZnVuY3Rpb24gZnJvbSBhIHByb3ZpZGVyXG4gICAgICB0YXAoZW52ID0+XG4gICAgICAgIGVudmlyb25tZW50U2VydmljZS5zZXRTdGF0ZShcbiAgICAgICAgICBtZXJnZUVudmlyb25tZW50cyhlbnZpcm9ubWVudCwgZW52IHx8ICh7fSBhcyBFbnZpcm9ubWVudCksIHJlbW90ZUVudiBhcyBSZW1vdGVFbnYpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApXG4gICAgLnRvUHJvbWlzZSgpO1xufVxuXG5mdW5jdGlvbiBtZXJnZUVudmlyb25tZW50cyhcbiAgbG9jYWw6IFBhcnRpYWw8RW52aXJvbm1lbnQ+LFxuICByZW1vdGU6IEVudmlyb25tZW50LFxuICBjb25maWc6IFJlbW90ZUVudixcbik6IEVudmlyb25tZW50IHtcbiAgc3dpdGNoIChjb25maWcubWVyZ2VTdHJhdGVneSkge1xuICAgIGNhc2UgJ2RlZXBtZXJnZSc6XG4gICAgICByZXR1cm4gZGVlcE1lcmdlKGxvY2FsLCByZW1vdGUpIGFzIEVudmlyb25tZW50O1xuICAgIGNhc2UgJ292ZXJ3cml0ZSc6XG4gICAgY2FzZSBudWxsOlxuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgcmV0dXJuIHJlbW90ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbmZpZy5tZXJnZVN0cmF0ZWd5KGxvY2FsLCByZW1vdGUpO1xuICB9XG59XG4iXX0=","import { firstValueFrom } from 'rxjs';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { TENANT_NOT_FOUND_BY_NAME } from '@elite.framework/ng.core/tokens';\nimport clone from 'just-clone';\nimport { createTokenParser } from '@elite.framework/ng.core/utils';\nimport { EnvironmentService } from '../environment.service';\nimport { MultiTenancyService } from '../multi-tenancy.service';\nimport { SsrCookieService } from '../ssr-cookie.service';\nconst tenancyPlaceholder = '{0}';\nfunction getCurrentTenancyName(appBaseUrl, injector) {\n const cookieService = injector.get(SsrCookieService);\n if (appBaseUrl.charAt(appBaseUrl.length - 1) !== '/')\n appBaseUrl += '/';\n const parseTokens = createTokenParser(appBaseUrl);\n const token = tenancyPlaceholder.replace(/[}{]/g, '');\n try {\n return parseTokens(cookieService.url)[token]?.[0];\n }\n catch (error) {\n return '';\n }\n // return parseTokens(window.location.href)[token]?.[0];\n // const pattern = /^http?:\\/\\/([^.]+)\\.localhost\\:4200/;\n // const match = cookieService.url.match(pattern);\n // if (match && match.length > 1) {\n // return match[1];\n // }\n // return '';\n}\nexport function getCurrentTenancyNameFromUrl(tenantKey) {\n if (typeof window === 'undefined') {\n return null; // or fallback like: return '';\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(tenantKey);\n}\n//\nexport async function parseTenantFromUrl(injector) {\n const environmentService = injector.get(EnvironmentService);\n const multiTenancyService = injector.get(MultiTenancyService);\n const tenantNotFoundHandler = injector.get(TENANT_NOT_FOUND_BY_NAME, null);\n const baseUrl = environmentService.getEnvironment()?.application?.baseUrl || '';\n const tenancyName = getCurrentTenancyName(baseUrl, injector);\n const hideTenantBox = () => {\n multiTenancyService.isTenantBoxVisible = false;\n };\n const setDomainTenant = (tenant) => {\n multiTenancyService.domainTenant = {\n id: tenant.id,\n name: tenant.name,\n isAvailable: true,\n };\n };\n const setEnvironmentWithDomainTenant = (tenant) => {\n hideTenantBox();\n setDomainTenant(tenant);\n };\n if (tenancyName) {\n /**\n * We have to replace tenant name within the urls from environment,\n * because the code below will make a http request to find information about the domain tenant.\n * Before this request takes place, we need to replace placeholders aka \"{0}\".\n */\n replaceTenantNameWithinEnvironment(injector, tenancyName);\n const tenant$ = multiTenancyService.setTenantByName(tenancyName);\n try {\n const result = await firstValueFrom(tenant$);\n setEnvironmentWithDomainTenant(result);\n return Promise.resolve(result);\n }\n catch (httpError) {\n if (httpError instanceof HttpErrorResponse &&\n httpError.status === 404 &&\n tenantNotFoundHandler) {\n tenantNotFoundHandler(httpError);\n }\n return Promise.reject();\n }\n }\n /**\n * If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests.\n */\n replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.');\n const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey);\n if (tenantIdFromQueryParams) {\n const tenantById$ = multiTenancyService.setTenantById(tenantIdFromQueryParams);\n return firstValueFrom(tenantById$);\n }\n return Promise.resolve();\n}\nfunction replaceTenantNameWithinEnvironment(injector, tenancyName, placeholder = tenancyPlaceholder) {\n const environmentService = injector.get(EnvironmentService);\n const environment = clone(environmentService.getEnvironment());\n if (environment.application.baseUrl) {\n environment.application.baseUrl = environment.application.baseUrl.replace(placeholder, tenancyName);\n }\n if (environment.oAuthConfig?.redirectUri) {\n environment.oAuthConfig.redirectUri = environment.oAuthConfig.redirectUri.replace(placeholder, tenancyName);\n }\n if (!environment.oAuthConfig) {\n environment.oAuthConfig = {};\n }\n environment.oAuthConfig.issuer = (environment.oAuthConfig.issuer || '').replace(placeholder, tenancyName);\n Object.keys(environment.apis).forEach(api => {\n Object.keys(environment.apis[api]).forEach(key => {\n environment.apis[api][key] = (environment.apis[api][key] || '').replace(placeholder, tenancyName);\n });\n });\n return environmentService.setState(environment);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3V0aWxzL211bHRpLXRlbmFuY3ktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEtBQUssTUFBTyxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsU0FBUyxxQkFBcUIsQ0FBQyxVQUFrQixFQUFDLFFBQWtCO0lBRWpFLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHO1FBQUUsVUFBVSxJQUFJLEdBQUcsQ0FBQztJQUV4RSxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQztRQUNILE9BQU8sV0FBVyxDQUFDLGFB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QUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FDN0UsV0FBVyxFQUNYLFdBQVcsQ0FDWixDQUFDO0lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQ3JFLFdBQVcsRUFDWCxXQUFXLENBQ1osQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFRlbmFudExvZ2luSW5mb0R0bywgRW52aXJvbm1lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcbmltcG9ydCB7IFRFTkFOVF9OT1RfRk9VTkRfQllfTkFNRSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS90b2tlbnMnO1xuaW1wb3J0IGNsb25lIGZyb20gICdqdXN0LWNsb25lJztcbmltcG9ydCB7IGNyZWF0ZVRva2VuUGFyc2VyIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlUZW5hbmN5U2VydmljZSB9IGZyb20gJy4uL211bHRpLXRlbmFuY3kuc2VydmljZSc7XG5pbXBvcnQgeyBTc3JDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi4vc3NyLWNvb2tpZS5zZXJ2aWNlJztcblxuY29uc3QgdGVuYW5jeVBsYWNlaG9sZGVyID0gJ3swfSc7XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUZW5hbmN5TmFtZShhcHBCYXNlVXJsOiBzdHJpbmcsaW5qZWN0b3I6IEluamVjdG9yKTogc3RyaW5nIHtcblxuICAgY29uc3QgY29va2llU2VydmljZSA9IGluamVjdG9yLmdldChTc3JDb29raWVTZXJ2aWNlKTtcbiAgaWYgKGFwcEJhc2VVcmwuY2hhckF0KGFwcEJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgYXBwQmFzZVVybCArPSAnLyc7XG5cbiAgY29uc3QgcGFyc2VUb2tlbnMgPSBjcmVhdGVUb2tlblBhcnNlcihhcHBCYXNlVXJsKTtcbiAgY29uc3QgdG9rZW4gPSB0ZW5hbmN5UGxhY2Vob2xkZXIucmVwbGFjZSgvW317XS9nLCAnJyk7XG5cbiB0cnkge1xuICAgcmV0dXJuIHBhcnNlVG9rZW5zKGNvb2tpZVNlcnZpY2UudXJsKVt0b2tlbl0/LlswXTtcbiB9IGNhdGNoIChlcnJvcikge1xuICByZXR1cm4gJyc7XG4gfVxuICAvLyByZXR1cm4gcGFyc2VUb2tlbnMod2luZG93LmxvY2F0aW9uLmhyZWYpW3Rva2VuXT8uWzBdO1xuICAvLyBjb25zdCBwYXR0ZXJuID0gL15odHRwPzpcXC9cXC8oW14uXSspXFwubG9jYWxob3N0XFw6NDIwMC87XG4gIC8vIGNvbnN0IG1hdGNoID0gY29va2llU2VydmljZS51cmwubWF0Y2gocGF0dGVybik7XG4gIC8vIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gIC8vICAgcmV0dXJuIG1hdGNoWzFdO1xuICAvLyB9XG4gIC8vICByZXR1cm4gJyc7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRUZW5hbmN5TmFtZUZyb21VcmwodGVuYW50S2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIG9yIGZhbGxiYWNrIGxpa2U6IHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIHJldHVybiB1cmxQYXJhbXMuZ2V0KHRlbmFudEtleSk7XG59XG5cbi8vXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUZW5hbnRGcm9tVXJsKGluamVjdG9yOiBJbmplY3Rvcikge1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcbiAgY29uc3QgbXVsdGlUZW5hbmN5U2VydmljZSA9IGluamVjdG9yLmdldChNdWx0aVRlbmFuY3lTZXJ2aWNlKTtcbiAgY29uc3QgdGVuYW50Tm90Rm91bmRIYW5kbGVyID0gaW5qZWN0b3IuZ2V0KFRFTkFOVF9OT1RfRk9VTkRfQllfTkFNRSwgbnVsbCk7XG5cbiAgY29uc3QgYmFzZVVybCA9IGVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpPy5hcHBsaWNhdGlvbj8uYmFzZVVybCB8fCAnJztcblxuICBjb25zdCB0ZW5hbmN5TmFtZSA9IGdldEN1cnJlbnRUZW5hbmN5TmFtZShiYXNlVXJsLGluamVjdG9yKTtcblxuICBjb25zdCBoaWRlVGVuYW50Qm94ID0gKCkgPT4ge1xuICAgIG11bHRpVGVuYW5jeVNlcnZpY2UuaXNUZW5hbnRCb3hWaXNpYmxlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3Qgc2V0RG9tYWluVGVuYW50ID0gKHRlbmFudDogVGVuYW50TG9naW5JbmZvRHRvKSA9PiB7XG4gICAgbXVsdGlUZW5hbmN5U2VydmljZS5kb21haW5UZW5hbnQgPSB7XG4gICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgbmFtZTogdGVuYW50Lm5hbWUsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHNldEVudmlyb25tZW50V2l0aERvbWFpblRlbmFudCA9ICh0ZW5hbnQ6IFRlbmFudExvZ2luSW5mb0R0bykgPT4ge1xuICAgIGhpZGVUZW5hbnRCb3goKTtcbiAgICBzZXREb21haW5UZW5hbnQodGVuYW50KTtcbiAgfTtcblxuICBpZiAodGVuYW5jeU5hbWUpIHtcbiAgICAvKipcbiAgICAgKiBXZSBoYXZlIHRvIHJlcGxhY2UgdGVuYW50IG5hbWUgd2l0aGluIHRoZSB1cmxzIGZyb20gZW52aXJvbm1lbnQsXG4gICAgICogYmVjYXVzZSB0aGUgY29kZSBiZWxvdyB3aWxsIG1ha2UgYSBodHRwIHJlcXVlc3QgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZG9tYWluIHRlbmFudC5cbiAgICAgKiBCZWZvcmUgdGhpcyByZXF1ZXN0IHRha2VzIHBsYWNlLCB3ZSBuZWVkIHRvIHJlcGxhY2UgcGxhY2Vob2xkZXJzIGFrYSBcInswfVwiLlxuICAgICAqL1xuICAgIHJlcGxhY2VUZW5hbnROYW1lV2l0aGluRW52aXJvbm1lbnQoaW5qZWN0b3IsIHRlbmFuY3lOYW1lKTtcblxuICAgIGNvbnN0IHRlbmFudCQgPSBtdWx0aVRlbmFuY3lTZXJ2aWNlLnNldFRlbmFudEJ5TmFtZSh0ZW5hbmN5TmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRlbmFudCQpO1xuICAgICAgc2V0RW52aXJvbm1lbnRXaXRoRG9tYWluVGVuYW50KHJlc3VsdCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBodHRwRXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJlxuICAgICAgICBodHRwRXJyb3Iuc3RhdHVzID09PSA0MDQgJiZcbiAgICAgICAgdGVuYW50Tm90Rm91bmRIYW5kbGVyXG4gICAgICApIHtcbiAgICAgICAgdGVuYW50Tm90Rm91bmRIYW5kbGVyKGh0dHBFcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIElmIHRoZXJlIGlzIG5vIHRlbmFudCwgd2Ugc3RpbGwgaGF2ZSB0byBjbGVhbiB1cCB7MH0uIGZyb20gYmFzZVVybCB0byBhdm9pZCBpbmNvcnJlY3QgaHR0cCByZXF1ZXN0cy5cbiAgICovXG4gIHJlcGxhY2VUZW5hbnROYW1lV2l0aGluRW52aXJvbm1lbnQoaW5qZWN0b3IsICcnLCB0ZW5hbmN5UGxhY2Vob2xkZXIgKyAnLicpO1xuXG4gIGNvbnN0IHRlbmFudElkRnJvbVF1ZXJ5UGFyYW1zID0gZ2V0Q3VycmVudFRlbmFuY3lOYW1lRnJvbVVybChtdWx0aVRlbmFuY3lTZXJ2aWNlLnRlbmFudEtleSk7XG4gIGlmICh0ZW5hbnRJZEZyb21RdWVyeVBhcmFtcykge1xuXG4gICAgY29uc3QgdGVuYW50QnlJZCQgPSBtdWx0aVRlbmFuY3lTZXJ2aWNlLnNldFRlbmFudEJ5SWQodGVuYW50SWRGcm9tUXVlcnlQYXJhbXMpO1xuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0ZW5hbnRCeUlkJCk7XG4gIH1cblxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVRlbmFudE5hbWVXaXRoaW5FbnZpcm9ubWVudChcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuICB0ZW5hbmN5TmFtZTogc3RyaW5nLFxuICBwbGFjZWhvbGRlciA9IHRlbmFuY3lQbGFjZWhvbGRlcixcbikge1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcblxuICBjb25zdCBlbnZpcm9ubWVudCA9IGNsb25lKGVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSBhcyBFbnZpcm9ubWVudDtcblxuICBpZiAoZW52aXJvbm1lbnQuYXBwbGljYXRpb24uYmFzZVVybCkge1xuICAgIGVudmlyb25tZW50LmFwcGxpY2F0aW9uLmJhc2VVcmwgPSBlbnZpcm9ubWVudC5hcHBsaWNhdGlvbi5iYXNlVXJsLnJlcGxhY2UoXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHRlbmFuY3lOYW1lLFxuICAgICk7XG4gIH1cblxuICBpZiAoZW52aXJvbm1lbnQub0F1dGhDb25maWc/LnJlZGlyZWN0VXJpKSB7XG4gICAgZW52aXJvbm1lbnQub0F1dGhDb25maWcucmVkaXJlY3RVcmkgPSBlbnZpcm9ubWVudC5vQXV0aENvbmZpZy5yZWRpcmVjdFVyaS5yZXBsYWNlKFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICB0ZW5hbmN5TmFtZSxcbiAgICApO1xuICB9XG5cbiAgaWYgKCFlbnZpcm9ubWVudC5vQXV0aENvbmZpZykge1xuICAgIGVudmlyb25tZW50Lm9BdXRoQ29uZmlnID0ge307XG4gIH1cbiAgZW52aXJvbm1lbnQub0F1dGhDb25maWcuaXNzdWVyID0gKGVudmlyb25tZW50Lm9BdXRoQ29uZmlnLmlzc3VlciB8fCAnJykucmVwbGFjZShcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0ZW5hbmN5TmFtZSxcbiAgKTtcblxuICBPYmplY3Qua2V5cyhlbnZpcm9ubWVudC5hcGlzKS5mb3JFYWNoKGFwaSA9PiB7XG4gICAgT2JqZWN0LmtleXMoZW52aXJvbm1lbnQuYXBpc1thcGldKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBlbnZpcm9ubWVudC5hcGlzW2FwaV1ba2V5XSA9IChlbnZpcm9ubWVudC5hcGlzW2FwaV1ba2V5XSB8fCAnJykucmVwbGFjZShcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIHRlbmFuY3lOYW1lLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVudmlyb25tZW50U2VydmljZS5zZXRTdGF0ZShlbnZpcm9ubWVudCk7XG59XG4iXX0=","import { registerLocaleData } from '@angular/common';\nimport { inject, Injector } from '@angular/core';\nimport { tap, catchError } from 'rxjs/operators';\nimport { lastValueFrom, noop, throwError } from 'rxjs';\nimport { CORE_OPTIONS, CHECK_AUTHENTICATION_STATE_FN_KEY, APP_INIT_ERROR_HANDLERS } from '@elite.framework/ng.core/tokens';\nimport { getRemoteEnv } from './environment-utils';\nimport { parseTenantFromUrl } from './multi-tenancy-utils';\nimport { AuthService } from '@elite.framework/ng.core/abstracts';\nimport { EnvironmentService } from '../environment.service';\nimport { ConfigStateService } from '../config-state.service';\nimport { SessionStateService } from '../session-state.service';\nexport async function getInitialData() {\n const injector = inject(Injector);\n const environmentService = injector.get(EnvironmentService);\n const configState = injector.get(ConfigStateService);\n const options = injector.get(CORE_OPTIONS);\n environmentService.setState(options.environment);\n await getRemoteEnv(injector, options.environment);\n await parseTenantFromUrl(injector);\n const authService = injector.get(AuthService, undefined, { optional: true });\n const checkAuthenticationState = injector.get(CHECK_AUTHENTICATION_STATE_FN_KEY, noop, {\n optional: true,\n });\n if (!options.skipInitAuthService && authService) {\n await authService.init();\n }\n if (options.skipGetAppConfiguration)\n return;\n const result$ = configState.refreshAppState().pipe(tap(() => checkAuthenticationState(injector)), tap(() => {\n const currentTenant = configState.getOne('currentTenant');\n injector.get(SessionStateService).setTenant(currentTenant);\n // const currentSession= configState.getOne('currentT') as Session.State;\n // injector.get(SessionStateService).setState(currentSession);\n }), catchError(error => {\n const appInitErrorHandlers = injector.get(APP_INIT_ERROR_HANDLERS, null);\n if (appInitErrorHandlers && appInitErrorHandlers.length) {\n appInitErrorHandlers.forEach(func => func(error));\n }\n return throwError(() => error);\n // Don't rethrow to avoid breaking the app\n // return of(null); // ✅ suppresses the error\n }));\n await lastValueFrom(result$);\n}\nexport function localeInitializer() {\n const injector = inject(Injector);\n const sessionState = injector.get(SessionStateService);\n const { registerLocaleFn } = injector.get(CORE_OPTIONS);\n const lang = sessionState.getLanguage() || 'en';\n return new Promise((resolve, reject) => {\n registerLocaleFn(lang).then(module => {\n if (module?.default)\n registerLocaleData(module.default);\n return resolve('resolved');\n }, reject);\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3V0aWxzL2luaXRpYWwtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBTSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxpQ0FBaUMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjO0lBRWxDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM1RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQVMsQ0FBQztJQUVuRCxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQTBCLENBQUMsQ0FBQztJQUNoRSxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0UsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxFQUFFLElBQUksRUFBRTtRQUNyRixRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEQsTUFBTSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLHVCQUF1QjtRQUFFLE9BQU87SUFFNUMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FDaEQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDUCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBcUIsQ0FBQztRQUM5RSxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELDBFQUEwRTtRQUMxRSw4REFBOEQ7SUFDaEUsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBRWpCLE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RSxJQUFJLG9CQUFvQixJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hELG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QiwwQ0FBMEM7UUFDN0MsNkNBQTZDO0lBQzdDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDRixNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFTLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFOUQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQztJQUVoRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQyxJQUFJLE1BQU0sRUFBRSxPQUFPO2dCQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV4RCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDYixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSwgbm9vcCwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1cnJlbnRUZW5hbnREdG8sIEVudmlyb25tZW50LCBSb290IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBDT1JFX09QVElPTlMsIENIRUNLX0FVVEhFTlRJQ0FUSU9OX1NUQVRFX0ZOX0tFWSwgQVBQX0lOSVRfRVJST1JfSEFORExFUlMgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcbmltcG9ydCB7IGdldFJlbW90ZUVudiB9IGZyb20gJy4vZW52aXJvbm1lbnQtdXRpbHMnO1xuaW1wb3J0IHsgcGFyc2VUZW5hbnRGcm9tVXJsIH0gZnJvbSAnLi9tdWx0aS10ZW5hbmN5LXV0aWxzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL2Fic3RyYWN0cyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi9lbnZpcm9ubWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLXN0YXRlLnNlcnZpY2UnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SW5pdGlhbERhdGEoKSB7XG5cbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcbiAgY29uc3QgY29uZmlnU3RhdGUgPSBpbmplY3Rvci5nZXQoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcbiAgY29uc3Qgb3B0aW9ucyA9IGluamVjdG9yLmdldChDT1JFX09QVElPTlMpIGFzIFJvb3Q7XG5cbiAgZW52aXJvbm1lbnRTZXJ2aWNlLnNldFN0YXRlKG9wdGlvbnMuZW52aXJvbm1lbnQgYXMgRW52aXJvbm1lbnQpO1xuICBhd2FpdCBnZXRSZW1vdGVFbnYoaW5qZWN0b3IsIG9wdGlvbnMuZW52aXJvbm1lbnQpO1xuICBhd2FpdCBwYXJzZVRlbmFudEZyb21VcmwoaW5qZWN0b3IpO1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoU2VydmljZSwgdW5kZWZpbmVkLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBjb25zdCBjaGVja0F1dGhlbnRpY2F0aW9uU3RhdGUgPSBpbmplY3Rvci5nZXQoQ0hFQ0tfQVVUSEVOVElDQVRJT05fU1RBVEVfRk5fS0VZLCBub29wLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuICBpZiAoIW9wdGlvbnMuc2tpcEluaXRBdXRoU2VydmljZSAmJiBhdXRoU2VydmljZSkge1xuICAgIGF3YWl0IGF1dGhTZXJ2aWNlLmluaXQoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNraXBHZXRBcHBDb25maWd1cmF0aW9uKSByZXR1cm47XG5cbiAgY29uc3QgcmVzdWx0JCA9IGNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpLnBpcGUoXG4gICAgdGFwKCgpID0+IGNoZWNrQXV0aGVudGljYXRpb25TdGF0ZShpbmplY3RvcikpLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VGVuYW50JykgYXMgQ3VycmVudFRlbmFudER0bztcbiAgICAgIGluamVjdG9yLmdldChTZXNzaW9uU3RhdGVTZXJ2aWNlKS5zZXRUZW5hbnQoY3VycmVudFRlbmFudCk7XG4gICAgICAvLyAgY29uc3QgY3VycmVudFNlc3Npb249IGNvbmZpZ1N0YXRlLmdldE9uZSgnY3VycmVudFQnKSBhcyBTZXNzaW9uLlN0YXRlO1xuICAgICAgLy8gaW5qZWN0b3IuZ2V0KFNlc3Npb25TdGF0ZVNlcnZpY2UpLnNldFN0YXRlKGN1cnJlbnRTZXNzaW9uKTtcbiAgICB9KSxcbiAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcblxuICAgICAgY29uc3QgYXBwSW5pdEVycm9ySGFuZGxlcnMgPSBpbmplY3Rvci5nZXQoQVBQX0lOSVRfRVJST1JfSEFORExFUlMsIG51bGwpO1xuICAgICAgaWYgKGFwcEluaXRFcnJvckhhbmRsZXJzICYmIGFwcEluaXRFcnJvckhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICBhcHBJbml0RXJyb3JIYW5kbGVycy5mb3JFYWNoKGZ1bmMgPT4gZnVuYyhlcnJvcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgLy8gRG9uJ3QgcmV0aHJvdyB0byBhdm9pZCBicmVha2luZyB0aGUgYXBwXG4gICAgLy8gcmV0dXJuIG9mKG51bGwpOyAvLyDinIUgc3VwcHJlc3NlcyB0aGUgZXJyb3JcbiAgICB9KSxcbiAgKTtcbiAgYXdhaXQgbGFzdFZhbHVlRnJvbShyZXN1bHQkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsZUluaXRpYWxpemVyKCkge1xuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIGNvbnN0IHNlc3Npb25TdGF0ZSA9IGluamVjdG9yLmdldChTZXNzaW9uU3RhdGVTZXJ2aWNlKTtcbiAgY29uc3QgeyByZWdpc3RlckxvY2FsZUZuIH06IFJvb3QgPSBpbmplY3Rvci5nZXQoQ09SRV9PUFRJT05TKTtcblxuICBjb25zdCBsYW5nID0gc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlKCkgfHwgJ2VuJztcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlZ2lzdGVyTG9jYWxlRm4obGFuZykudGhlbihtb2R1bGUgPT4ge1xuICAgICAgaWYgKG1vZHVsZT8uZGVmYXVsdCkgcmVnaXN0ZXJMb2NhbGVEYXRhKG1vZHVsZS5kZWZhdWx0KTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUoJ3Jlc29sdmVkJyk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfSk7XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLmNvcmUtc2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2VsaXRlLmZyYW1ld29yay1uZy5jb3JlLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["map","i1.RestService","i1","i1.ApplicationConfigurationService","i2.ApplicationLocalizationService","i1.ConfigStateService","i1.PermissionCheckerService","i2.SsrCookieService","i1.SessionStateService","i2.ConfigStateService","i1.SsrCookieService","i1.RoutesService","switchMap","i2.SessionStateService","i3.ConfigStateService","i1.RouterEvents","catchError","noop"],"mappings":"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"}
1
+ {"version":3,"file":"elite.framework-ng.core-services.mjs","sources":["../tmp-esm2022/services/lib/environment.service.js","../tmp-esm2022/services/lib/rest.service.js","../tmp-esm2022/services/lib/base.service.js","../tmp-esm2022/services/lib/generic.service.js","../tmp-esm2022/services/lib/ssr-cookie.service.js","../tmp-esm2022/services/lib/SwalService.service.js","../tmp-esm2022/services/lib/application-localization.service.js","../tmp-esm2022/services/lib/application-configuration.service.js","../tmp-esm2022/services/lib/config-state.service.js","../tmp-esm2022/services/lib/permission-checker.service.js","../tmp-esm2022/services/lib/permissions-guard.service.js","../tmp-esm2022/services/lib/logger.interface.js","../tmp-esm2022/services/lib/logger.service.js","../tmp-esm2022/services/lib/id-parser.service.js","../tmp-esm2022/services/lib/query-parser.js","../tmp-esm2022/services/lib/session-state.service.js","../tmp-esm2022/services/lib/localization.service.js","../tmp-esm2022/services/lib/local-storage-listener.service.js","../tmp-esm2022/services/lib/local-storage.service.js","../tmp-esm2022/services/lib/title-strategy.service.js","../tmp-esm2022/services/lib/utils/compare-func.token.js","../tmp-esm2022/services/lib/routes.service.js","../tmp-esm2022/services/lib/routes.handler.service.js","../tmp-esm2022/services/lib/multi-tenancy.service.js","../tmp-esm2022/services/lib/http-error-reporter.service.js","../tmp-esm2022/services/lib/subscription.service.js","../tmp-esm2022/services/lib/router-events.service.js","../tmp-esm2022/services/lib/router-wait.service.js","../tmp-esm2022/services/lib/abstract-menu.service.js","../tmp-esm2022/services/lib/nav-items.service.js","../tmp-esm2022/services/lib/user-menu.service.js","../tmp-esm2022/services/lib/utils/route-utils.js","../tmp-esm2022/services/lib/replaceable-components.service.js","../tmp-esm2022/services/lib/http-wait.service.js","../tmp-esm2022/services/lib/window.service.js","../tmp-esm2022/services/lib/utils/environment-utils.js","../tmp-esm2022/services/lib/utils/multi-tenancy-utils.js","../tmp-esm2022/services/lib/utils/initial-utils.js","../tmp-esm2022/services/elite.framework-ng.core-services.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport { map } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nconst mapToApiUrl = (key) => (apis) => ((key && apis[key]) || apis.default).url || apis.default.url;\nconst mapToIssuer = (issuer) => {\n if (!issuer) {\n return issuer;\n }\n return issuer.endsWith('/') ? issuer : issuer + '/';\n};\nexport class EnvironmentService {\n store = new InternalStore({});\n get createOnUpdateStream() {\n return this.store.sliceUpdate;\n }\n getEnvironment$() {\n return this.store.sliceState(state => state);\n }\n getEnvironment() {\n return this.store.state;\n }\n getApiUrl(key) {\n return mapToApiUrl(key)(this.store.state?.apis);\n }\n getApiUrl$(key) {\n return this.store.sliceState(state => state.apis).pipe(map(mapToApiUrl(key)));\n }\n setState(environment) {\n this.store.set(environment);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: EnvironmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: EnvironmentService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: EnvironmentService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL2Vudmlyb25tZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUVyQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FDOUQsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBRS9ELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFO0lBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFHRixNQUFNLE9BQU8sa0JBQWtCO0lBQ1osS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQWlCLENBQUMsQ0FBQztJQUU5RCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXVCO1FBQy9CLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsUUFBUSxDQUFDLFdBQXdCO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7dUdBekJVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBREwsTUFBTTs7MkZBQ25CLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcGlzLCBFbnZpcm9ubWVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgSW50ZXJuYWxTdG9yZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IG1hcFRvQXBpVXJsID0gKGtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiAoYXBpczogQXBpcykgPT5cbiAgKChrZXkgJiYgYXBpc1trZXldKSB8fCBhcGlzLmRlZmF1bHQpLnVybCB8fCBhcGlzLmRlZmF1bHQudXJsO1xuXG5jb25zdCBtYXBUb0lzc3VlciA9IChpc3N1ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIWlzc3Vlcikge1xuICAgIHJldHVybiBpc3N1ZXI7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlci5lbmRzV2l0aCgnLycpID8gaXNzdWVyIDogaXNzdWVyICsgJy8nO1xufTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gbmV3IEludGVybmFsU3RvcmUoe30gYXMgRW52aXJvbm1lbnQpO1xuXG4gIGdldCBjcmVhdGVPblVwZGF0ZVN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVVwZGF0ZTtcbiAgfVxuXG4gIGdldEVudmlyb25tZW50JCgpOiBPYnNlcnZhYmxlPEVudmlyb25tZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VTdGF0ZShzdGF0ZSA9PiBzdGF0ZSk7XG4gIH1cblxuICBnZXRFbnZpcm9ubWVudCgpOiBFbnZpcm9ubWVudCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGU7XG4gIH1cblxuICBnZXRBcGlVcmwoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbWFwVG9BcGlVcmwoa2V5KSh0aGlzLnN0b3JlLnN0YXRlPy5hcGlzKTtcbiAgfVxuXG4gIGdldEFwaVVybCQoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlLmFwaXMpLnBpcGUobWFwKG1hcFRvQXBpVXJsKGtleSkpKTtcbiAgfVxuXG4gIHNldFN0YXRlKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCkge1xuICAgIHRoaXMuc3RvcmUuc2V0KGVudmlyb25tZW50KTtcbiAgfVxuXG4gIC8vIGdldElzc3VlcigpIHtcbiAgLy8gICBjb25zdCBpc3N1ZXIgPSB0aGlzLnN0b3JlLnN0YXRlPy5vQXV0aENvbmZpZz8uaXNzdWVyO1xuXG4gIC8vICAgcmV0dXJuIG1hcFRvSXNzdWVyKGlzc3Vlcik7XG4gIC8vIH1cblxuICAvLyBnZXRJc3N1ZXIkKCkge1xuICAvLyAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGU/Lm9BdXRoQ29uZmlnPy5pc3N1ZXIpLnBpcGUobWFwKG1hcFRvSXNzdWVyKSk7XG4gIC8vIH1cblxuICAvLyBnZXRJbXBlcnNvbmF0aW9uKCkge1xuICAvLyAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlPy5vQXV0aENvbmZpZz8uaW1wZXJzb25hdGlvbiB8fCB7fTtcbiAgLy8gfVxuXG4gIC8vIGdldEltcGVyc29uYXRpb24kKCkge1xuICAvLyAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGU/Lm9BdXRoQ29uZmlnPy5pbXBlcnNvbmF0aW9uIHx8IHt9KTtcbiAgLy8gfVxufVxuIl19","import { HttpClient, HttpParams } from \"@angular/common/http\";\nimport { Injectable, Inject, inject } from \"@angular/core\";\nimport { CORE_OPTIONS } from \"@elite.framework/ng.core/tokens\";\nimport { throwError, catchError } from \"rxjs\";\nimport { EnvironmentService } from \"./environment.service\";\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common/http\";\nexport class RestService {\n options;\n http;\n environment = inject(EnvironmentService);\n constructor(options, http) {\n this.options = options;\n this.http = http;\n }\n getApiFromStore(apiName) {\n return this.environment.getApiUrl(apiName);\n }\n handleError(err) {\n // this.httpErrorReporter.reportError(err);\n return throwError(() => err);\n }\n request(request, config, api) {\n // debugger\n config = config || {};\n api = api || this.getApiFromStore(config.apiName);\n const { method, params, ...options } = request;\n const { observe = \"body\" /* Rest.Observe.Body */, skipHandleError } = config;\n const url = this.removeDuplicateSlashes(api + request.url);\n const httpClient = this.getHttpClient(config.skipAddingHeader ?? false);\n return httpClient\n .request(method, url, {\n observe,\n ...(params && {\n params: this.getParams(params, config.httpParamEncoder),\n }),\n ...options,\n })\n .pipe(catchError(err => (skipHandleError ? throwError(() => err) : this.handleError(err))));\n }\n getHttpClient(isExternal) {\n return /* isExternal ? this.externalHttp : */ this.http;\n }\n getParams(params, encoder) {\n const filteredParams = Object.entries(params).reduce((acc, [key, value]) => {\n if (isUndefinedOrEmptyString(value))\n return acc;\n if (value === null && !this.options.sendNullsAsQueryParam)\n return acc;\n acc[key] = value;\n return acc;\n }, {});\n return encoder\n ? new HttpParams({ encoder, fromObject: filteredParams })\n : new HttpParams({ fromObject: filteredParams });\n }\n removeDuplicateSlashes(url) {\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, deps: [{ token: CORE_OPTIONS }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [CORE_OPTIONS]\n }] }, { type: i1.HttpClient }] });\nexport function isUndefinedOrEmptyString(value) {\n return value === undefined || value === '';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcmVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1DLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUcsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUszRCxNQUFNLE9BQU8sV0FBVztJQUdZO0lBQ3RCO0lBSEosV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2pELFlBQ2tDLE9BQWEsRUFDbkMsSUFBZ0I7UUFETSxZQUFPLEdBQVAsT0FBTyxDQUFNO1FBQ25DLFNBQUksR0FBSixJQUFJLENBQVk7SUFHeEIsQ0FBQztJQUVLLGVBQWUsQ0FBQyxPQUEyQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQiwyQ0FBMkM7UUFDM0MsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FDTCxPQUF5QyxFQUN6QyxNQUFvQixFQUNwQixHQUFZO1FBRVosV0FBVztRQUNYLE1BQU0sR0FBRyxNQUFNLElBQUssRUFBa0IsQ0FBQztRQUN2QyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQy9DLE1BQU0sRUFBRSxPQUFPLGlDQUFvQixFQUFFLGVBQWUsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1RCxNQUFNLFVBQVUsR0FBZSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUNwRixPQUFPLFVBQVU7YUFDZCxPQUFPLENBQUksTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUN2QixPQUFPO1lBQ1AsR0FBRyxDQUFDLE1BQU0sSUFBSTtnQkFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2FBQ3hELENBQUM7WUFDRixHQUFHLE9BQU87U0FDSixDQUFDO2FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUNPLGFBQWEsQ0FBQyxVQUFtQjtRQUN2QyxPQUFPLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDMUQsQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUFtQixFQUFFLE9BQTRCO1FBQ2pFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDekUsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFDaEQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUI7Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFDdEUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNqQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFTLENBQUMsQ0FBQztRQUNkLE9BQU8sT0FBTztZQUNaLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDekQsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEdBQVc7UUFDeEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO3VHQTNEVSxXQUFXLGtCQUdaLFlBQVk7MkdBSFgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFJSSxNQUFNOzJCQUFDLFlBQVk7O0FBNER4QixNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBYztJQUNyRCxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFJlcXVlc3QsIEh0dHBQYXJhbWV0ZXJDb2RlYywgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm9vdCwgUmVzdCB9IGZyb20gXCJAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzXCI7XG5pbXBvcnQgeyAgQ09SRV9PUFRJT05TIH0gZnJvbSBcIkBlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS90b2tlbnNcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSBcIi4vZW52aXJvbm1lbnQuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVzdFNlcnZpY2Uge1xuICBwcml2YXRlIGVudmlyb25tZW50ID0gaW5qZWN0KEVudmlyb25tZW50U2VydmljZSk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQ09SRV9PUFRJT05TKSBwcm90ZWN0ZWQgb3B0aW9uczogUm9vdCxcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICAvLyBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2VydmljZSxcbiAgICAvLyBwcm90ZWN0ZWQgaHR0cEVycm9yUmVwb3J0ZXI6IEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSxcbiAgKSB7IH1cblxuICBwcm90ZWN0ZWQgZ2V0QXBpRnJvbVN0b3JlKGFwaU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuZ2V0QXBpVXJsKGFwaU5hbWUpO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIHRoaXMuaHR0cEVycm9yUmVwb3J0ZXIucmVwb3J0RXJyb3IoZXJyKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICB9XG5cbiAgcmVxdWVzdDxULCBSPihcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxUPiB8IFJlc3QuUmVxdWVzdDxUPixcbiAgICBjb25maWc/OiBSZXN0LkNvbmZpZyxcbiAgICBhcGk/OiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8Uj4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgY29uZmlnID0gY29uZmlnIHx8ICh7fSBhcyBSZXN0LkNvbmZpZyk7XG4gICAgYXBpID0gYXBpIHx8IHRoaXMuZ2V0QXBpRnJvbVN0b3JlKGNvbmZpZy5hcGlOYW1lKTtcbiAgICBjb25zdCB7IG1ldGhvZCwgcGFyYW1zLCAuLi5vcHRpb25zIH0gPSByZXF1ZXN0O1xuICAgIGNvbnN0IHsgb2JzZXJ2ZSA9IFJlc3QuT2JzZXJ2ZS5Cb2R5LCBza2lwSGFuZGxlRXJyb3IgfSA9IGNvbmZpZztcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZVNsYXNoZXMoIGFwaSArIHJlcXVlc3QudXJsKTtcblxuICAgIGNvbnN0IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQgPSB0aGlzLmdldEh0dHBDbGllbnQoY29uZmlnLnNraXBBZGRpbmdIZWFkZXIgPz8gZmFsc2UpO1xuICAgIHJldHVybiBodHRwQ2xpZW50XG4gICAgICAucmVxdWVzdDxSPihtZXRob2QsIHVybCwge1xuICAgICAgICBvYnNlcnZlLFxuICAgICAgICAuLi4ocGFyYW1zICYmIHtcbiAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0UGFyYW1zKHBhcmFtcywgY29uZmlnLmh0dHBQYXJhbUVuY29kZXIpLFxuICAgICAgICB9KSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0gYXMgYW55KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gKHNraXBIYW5kbGVFcnJvciA/IHRocm93RXJyb3IoKCkgPT4gZXJyKSA6IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSkpKTtcbiAgfVxuICBwcml2YXRlIGdldEh0dHBDbGllbnQoaXNFeHRlcm5hbDogYm9vbGVhbikge1xuICAgIHJldHVybiAvKiBpc0V4dGVybmFsID8gdGhpcy5leHRlcm5hbEh0dHAgOiAqLyB0aGlzLmh0dHA7XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtcyhwYXJhbXM6IFJlc3QuUGFyYW1zLCBlbmNvZGVyPzogSHR0cFBhcmFtZXRlckNvZGVjKTogSHR0cFBhcmFtcyB7XG4gICAgY29uc3QgZmlsdGVyZWRQYXJhbXMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZE9yRW1wdHlTdHJpbmcodmFsdWUpKSByZXR1cm4gYWNjO1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsICYmICF0aGlzLm9wdGlvbnMuc2VuZE51bGxzQXNRdWVyeVBhcmFtKSByZXR1cm4gYWNjO1xuICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgYW55KTtcbiAgICByZXR1cm4gZW5jb2RlclxuICAgICAgPyBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXIsIGZyb21PYmplY3Q6IGZpbHRlcmVkUGFyYW1zIH0pXG4gICAgICA6IG5ldyBIdHRwUGFyYW1zKHsgZnJvbU9iamVjdDogZmlsdGVyZWRQYXJhbXMgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUR1cGxpY2F0ZVNsYXNoZXModXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKTtcbiAgfVxuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZE9yRW1wdHlTdHJpbmcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xufVxuIl19","import { Injectable } from '@angular/core';\nimport { map } from 'rxjs';\nimport { RestService } from './rest.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nexport class BaseService {\n restService;\n apiName = '';\n moduleName = '';\n constructor(restService) {\n this.restService = restService;\n }\n getList = (input, endpoint) => {\n const params = Object.keys(input).reduce((acc, key) => {\n acc[key] = input[key];\n return acc;\n }, {});\n const url = endpoint ? endpoint : `/${this.moduleName}/${this.apiName}`;\n return this.restService.request({\n method: 'GET',\n url: url,\n params: params,\n }, { apiName: this.apiName })\n .pipe(map(response => response));\n };\n get = (id) => this.restService.request({\n method: 'GET',\n url: this.buildUrl(id),\n }, { apiName: this.apiName });\n create = (input) => this.restService.request({\n method: 'POST',\n url: this.buildUrl(),\n body: input,\n }, { apiName: this.apiName });\n update = (id, input) => this.restService.request({\n method: 'PUT',\n url: this.buildUrl(id),\n body: input,\n }, { apiName: this.apiName });\n patch = (id, input) => this.restService.request({\n method: 'PATCH',\n url: this.buildUrl(id),\n body: input,\n }, { apiName: this.apiName });\n delete = (id) => this.restService.request({\n method: 'DELETE',\n url: this.buildUrl(id),\n }, { apiName: this.apiName });\n buildUrl(id) {\n if (!id)\n return `/${this.moduleName}/${this.apiName}`;\n if (Array.isArray(id)) {\n // Array-based composite key: ['123', '456'] => /123/456\n return `/${this.moduleName}/${this.apiName}/${id.join('/')}`;\n }\n if (typeof id === 'object') {\n // Object-based composite key: {id:123, biId:456} => /123/456\n return `/${this.moduleName}/${this.apiName}/${Object.values(id).join('/')}`;\n }\n // Single id\n return `/${this.moduleName}/${this.apiName}/${id}`;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RestService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU03QyxNQUFNLE9BQU8sV0FBVztJQUlIO0lBSG5CLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFFYixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFlBQW1CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUc3QyxPQUFPLEdBQUcsQ0FBQyxLQUFTLEVBQUUsUUFBaUIsRUFBRyxFQUFFO1FBRTFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFTixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV6RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUE0QjtZQUN6RCxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUcsRUFBRSxHQUFHO1lBQ1IsTUFBTSxFQUFFLE1BQU07U0FDZixFQUFFLEVBQUUsT0FBTyxFQUFF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ZXNDb250ZW50IjpbIlxyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRlZFJlc3VsdCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VTZXJ2aWNlIHtcclxuICBhcGlOYW1lID0gJyc7XHJcblxyXG4gIG1vZHVsZU5hbWUgPSAnJztcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlKSB7fVxyXG5cclxuXHJcbiAgICBnZXRMaXN0ID0gKGlucHV0OmFueSwgZW5kcG9pbnQ/OiBzdHJpbmcgKSA9PiB7XHJcblxyXG4gICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhpbnB1dCkucmVkdWNlKChhY2M6YW55LCBrZXkpID0+IHtcclxuICAgICAgICBhY2Nba2V5XSA9IGlucHV0W2tleV07XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwge30pO1xyXG5cclxuICAgICAgIGNvbnN0IHVybCA9IGVuZHBvaW50ID8gZW5kcG9pbnQgOiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX1gO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIFBhZ2luYXRlZFJlc3VsdDxhbnk+Pih7XHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgZ2V0ID0gKGlkOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgUmVjb3JkPHN0cmluZywgYW55PikgPT5cclxuICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBhbnk+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IHRoaXMuYnVpbGRVcmwoaWQpLFxyXG4gIH0sIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0pO1xyXG5cclxuY3JlYXRlID0gKGlucHV0OiBhbnkpID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgYW55Pih7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybCgpLFxyXG4gICAgYm9keTogaW5wdXQsXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG51cGRhdGUgPSAoaWQ6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpbnB1dDogYW55KSA9PlxyXG4gIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIGFueT4oe1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybChpZCksXHJcbiAgICBib2R5OiBpbnB1dCxcclxuICB9LCB7IGFwaU5hbWU6IHRoaXMuYXBpTmFtZSB9KTtcclxuXHJcbiBwYXRjaCA9IChpZDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4sIGlucHV0OiBhbnkpID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgYW55Pih7XHJcbiAgICBtZXRob2Q6ICdQQVRDSCcsXHJcbiAgICB1cmw6IHRoaXMuYnVpbGRVcmwoaWQpLFxyXG4gICAgYm9keTogaW5wdXQsXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG5cclxuXHJcbmRlbGV0ZSA9IChpZDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4pID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgdm9pZD4oe1xyXG4gICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybChpZCksXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG5cclxucHJpdmF0ZSBidWlsZFVybChpZD86IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICBpZiAoIWlkKSByZXR1cm4gYC8ke3RoaXMubW9kdWxlTmFtZX0vJHt0aGlzLmFwaU5hbWV9YDtcclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XHJcbiAgICAvLyBBcnJheS1iYXNlZCBjb21wb3NpdGUga2V5OiBbJzEyMycsICc0NTYnXSA9PiAvMTIzLzQ1NlxyXG4gICAgcmV0dXJuIGAvJHt0aGlzLm1vZHVsZU5hbWV9LyR7dGhpcy5hcGlOYW1lfS8ke2lkLmpvaW4oJy8nKX1gO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ29iamVjdCcpIHtcclxuICAgIC8vIE9iamVjdC1iYXNlZCBjb21wb3NpdGUga2V5OiB7aWQ6MTIzLCBiaUlkOjQ1Nn0gPT4gLzEyMy80NTZcclxuICAgIHJldHVybiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX0vJHtPYmplY3QudmFsdWVzKGlkKS5qb2luKCcvJyl9YDtcclxuICB9XHJcblxyXG4gIC8vIFNpbmdsZSBpZFxyXG4gIHJldHVybiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX0vJHtpZH1gO1xyXG59XHJcblxyXG59XHJcbiJdfQ==","// src/app/services/generic.service.ts\nimport { HttpParams } from '@angular/common/http';\n/**\n * GenericService<T, K>:\n * - T = نوع الكائن (Model)\n * - K = نوع المفتاح الأساسي (ID)، افتراضي number\n *\n * يحتوي على جميع دوال الـ CRUD القياسية للتوريث في الخدمات المتخصصة.\n */\nexport class GenericService {\n http;\n constructor(http) {\n this.http = http;\n }\n /**\n * جلب كل السجلات\n */\n getAll() {\n // ملاحظة: يمكن إضافة معالج أخطاء مركزي هنا أو عبر Interceptor\n return this.http.get(this.baseUrl);\n }\n /**\n * جلب سجل واحد بناءً على المعرف\n */\n getById(id) {\n // ملاحظة: تأكد أن الـ endpoint يدعم GET برقم المعرف\n return this.http.get(`${this.baseUrl}/${id}`);\n }\n /**\n * إنشاء سجل جديد\n */\n create(item) {\n // ملاحظة: استخدم Partial<T> للسماح ببعض الحقول الاختيارية\n return this.http.post(this.baseUrl, item);\n }\n /**\n * تحديث سجل موجود\n */\n update(id, item) {\n // ملاحظة: هنا نُعيد Observable<void> لأن API قد لا تُرجع الجسم نفسه\n return this.http.put(`${this.baseUrl}`, item);\n }\n /**\n * حذف سجل\n */\n delete(id) {\n // ملاحظة: يُفضّل استخدام Confirm قبل الحذف في الواجهة\n return this.http.delete(`${this.baseUrl}/${id}`);\n }\n /** endpoint قابل للتخصيص — يمكن للفرع override–ها */\n getPageUrl() {\n return this.baseUrl;\n }\n /**\n * جلب صفحة من البيانات مع دعم الفلاتر والفرز\n * @param pageIndex صفر-based\n * @param pageSize عدد السجلات\n * @param filters كائن Partial<T> أو Record<string,any>\n * @param sort نص الفرز، مثلاً \"eiNa:desc\"\n */\n getPage(pageIndex, pageSize, filters, sort) {\n // debugger\n let params = new HttpParams()\n .set('pageIndex', pageIndex.toString())\n .set('pageSize', pageSize.toString());\n if (filters) {\n Object.entries(filters).forEach(([key, val]) => {\n if (val != null && val !== '') {\n params = params.set(key, val.toString());\n }\n });\n }\n if (sort) {\n params = params.set('sort', sort);\n }\n // return this.http\n // .get<T[]>(this.getPageUrl(), { params, observe: 'response' })\n // .pipe(\n // map((resp: HttpResponse<T[]>) => ({\n // items: resp.body || [],\n // totalCount: Number(resp.headers.get('X-Total-Count')) || resp.body?.length || 0\n // }))\n // );\n return this.http.get(this.getPageUrl(), { params });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvZ2VuZXJpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QyxPQUFPLEVBQWMsVUFBVSxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBSzVFOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBZ0IsY0FBYztJQU9aO0lBQXRCLFlBQXNCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDO0lBRTFDOztPQUVHO0lBQ0gsTUFBTTtRQUNKLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxPQUFPLENBQUMsRUFBSztRQUNYLG9EQUFvRDtRQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFnQjtRQUVyQiwwREFBMEQ7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUVGLE1BQU0sQ0FBQyxFQUFLLEVBQUUsSUFBZ0I7UUFDN0Isb0VBQW9FO1FBQ25FLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQUs7UUFDVixzREFBc0Q7UUFDdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBSUYscURBQXFEO0lBQzFDLFVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFQTs7Ozs7O01BTUU7SUFDSCxPQUFPLENBQ0wsU0FBaUIsRUFDakIsUUFBZ0IsRUFDaEIsT0FBNkIsRUFDN0IsSUFBYTtRQUViLFdBQVc7UUFDWCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTthQUMxQixHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN0QyxHQUFHLENBQUMsVUFBVSxFQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixrRUFBa0U7UUFDbEUsV0FBVztRQUNYLDBDQUEwQztRQUMxQyxnQ0FBZ0M7UUFDaEMsd0ZBQXdGO1FBQ3hGLFVBQVU7UUFDVixPQUFPO1FBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUNqQixFQUFFLE1BQU0sRUFBRSxDQUNYLENBQUM7SUFDRixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvYXBwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZS50c1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4vY3J1ZC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYWdpbmF0ZWRSZXN1bHQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcblxuLyoqXG4gKiBHZW5lcmljU2VydmljZTxULCBLPjpcbiAqICAtIFQgPSDZhtmI2Lkg2KfZhNmD2KfYptmGIChNb2RlbClcbiAqICAtIEsgPSDZhtmI2Lkg2KfZhNmF2YHYqtin2K0g2KfZhNij2LPYp9iz2YogKElEKdiMINin2YHYqtix2KfYttmKIG51bWJlclxuICpcbiAqINmK2K3YqtmI2Yog2LnZhNmJINis2YXZiti5INiv2YjYp9mEINin2YTZgCBDUlVEINin2YTZgtmK2KfYs9mK2Kkg2YTZhNiq2YjYsdmK2Ksg2YHZiiDYp9mE2K7Yr9mF2KfYqiDYp9mE2YXYqtiu2LXYtdipLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY1NlcnZpY2U8VCwgSyA9IG51bWJlcj4gaW1wbGVtZW50cyBDcnVkU2VydmljZTxULCBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIC8qKlxuICAgKiDinI/vuI8g2LnZhNmJINmD2YQg2K7Yr9mF2Kkg2YHYsdi52YrYqSDYo9mGINiq2LnYsdmR2YEg2YfYsNinOlxuICAgKiDZhdir2KfZhDogcHJvdGVjdGVkIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vYXBpL2pvYnR5cHMnO1xuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJhc2VVcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCkge31cblxuICAvKipcbiAgICog2KzZhNioINmD2YQg2KfZhNiz2KzZhNin2KpcbiAgICovXG4gIGdldEFsbCgpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2YrZhdmD2YYg2KXYttin2YHYqSDZhdi52KfZhNisINij2K7Yt9in2KEg2YXYsdmD2LLZiiDZh9mG2Kcg2KPZiCDYudio2LEgSW50ZXJjZXB0b3JcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUW10+KHRoaXMuYmFzZVVybCk7XG4gIH1cblxuICAvKipcbiAgICog2KzZhNioINiz2KzZhCDZiNin2K3YryDYqNmG2KfYodmLINi52YTZiSDYp9mE2YXYudix2YFcbiAgICovXG5cbiAgZ2V0QnlJZChpZDogSyk6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2KrYo9mD2K8g2KPZhiDYp9mE2YAgZW5kcG9pbnQg2YrYr9i52YUgR0VUINio2LHZgtmFINin2YTZhdi52LHZgVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KGAke3RoaXMuYmFzZVVybH0vJHtpZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYpdmG2LTYp9ihINiz2KzZhCDYrNiv2YrYr1xuICAgKi9cbiAgY3JlYXRlKGl0ZW06IFBhcnRpYWw8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIC8vINmF2YTYp9it2LjYqTog2KfYs9iq2K7Yr9mFIFBhcnRpYWw8VD4g2YTZhNiz2YXYp9itINio2KjYudi2INin2YTYrdmC2YjZhCDYp9mE2KfYrtiq2YrYp9ix2YrYqVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmJhc2VVcmwsIGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqINiq2K3Yr9mK2Ksg2LPYrNmEINmF2YjYrNmI2K9cbiAgICovXG5cbiAgIHVwZGF0ZShpZDogSywgaXRlbTogUGFydGlhbDxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2YfZhtinINmG2Y/YudmK2K8gT2JzZXJ2YWJsZTx2b2lkPiDZhNij2YYgQVBJINmC2K8g2YTYpyDYqtmP2LHYrNi5INin2YTYrNiz2YUg2YbZgdiz2YdcbiAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4oYCR7dGhpcy5iYXNlVXJsfWAsIGl0ZW0pO1xuICB9XG4gIC8qKlxuICAgKiDYrdiw2YEg2LPYrNmEXG4gICAqL1xuICBkZWxldGUoaWQ6IEspOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAvLyDZhdmE2KfYrdi42Kk6INmK2Y/Zgdi22ZHZhCDYp9iz2KrYrtiv2KfZhSBDb25maXJtINmC2KjZhCDYp9mE2K3YsNmBINmB2Yog2KfZhNmI2KfYrNmH2KlcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPihgJHt0aGlzLmJhc2VVcmx9LyR7aWR9YCk7XG4gIH1cblxuXG5cbiAvKiogZW5kcG9pbnQg2YLYp9io2YQg2YTZhNiq2K7YtdmK2LUg4oCUINmK2YXZg9mGINmE2YTZgdix2Lkgb3ZlcnJpZGXigJPZh9inICovXG4gIHByb3RlY3RlZCBnZXRQYWdlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVVybDtcbiAgfVxuXG4gICAvKipcbiAgICog2KzZhNioINi12YHYrdipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDZhdi5INiv2LnZhSDYp9mE2YHZhNin2KrYsSDZiNin2YTZgdix2LJcbiAgICogQHBhcmFtIHBhZ2VJbmRleCDYtdmB2LEtYmFzZWRcbiAgICogQHBhcmFtIHBhZ2VTaXplINi52K/YryDYp9mE2LPYrNmE2KfYqlxuICAgKiBAcGFyYW0gZmlsdGVycyDZg9in2KbZhiBQYXJ0aWFsPFQ+INij2YggUmVjb3JkPHN0cmluZyxhbnk+XG4gICAqIEBwYXJhbSBzb3J0INmG2LUg2KfZhNmB2LHYstiMINmF2KvZhNin2YsgXCJlaU5hOmRlc2NcIlxuICAgKi9cbiAgZ2V0UGFnZShcbiAgICBwYWdlSW5kZXg6IG51bWJlcixcbiAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHNvcnQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWRSZXN1bHQ8VD4+IHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAuc2V0KCdwYWdlSW5kZXgnLCBwYWdlSW5kZXgudG9TdHJpbmcoKSlcbiAgICAgIC5zZXQoJ3BhZ2VTaXplJywgIHBhZ2VTaXplLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KGtleSwgdmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc29ydCcsIHNvcnQpO1xuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGlzLmh0dHBcbiAgICAvLyAgIC5nZXQ8VFtdPih0aGlzLmdldFBhZ2VVcmwoKSwgeyBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSlcbiAgICAvLyAgIC5waXBlKFxuICAgIC8vICAgICBtYXAoKHJlc3A6IEh0dHBSZXNwb25zZTxUW10+KSA9PiAoe1xuICAgIC8vICAgICAgIGl0ZW1zOiByZXNwLmJvZHkgfHwgW10sXG4gICAgLy8gICAgICAgdG90YWxDb3VudDogTnVtYmVyKHJlc3AuaGVhZGVycy5nZXQoJ1gtVG90YWwtQ291bnQnKSkgfHwgcmVzcC5ib2R5Py5sZW5ndGggfHwgMFxuICAgIC8vICAgICB9KSlcbiAgICAvLyAgICk7XG4gICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGFnaW5hdGVkUmVzdWx0PFQ+PihcbiAgICB0aGlzLmdldFBhZ2VVcmwoKSxcbiAgICB7IHBhcmFtcyB9XG4gICk7XG4gIH1cblxuXG59XG4iXX0=","import { Inject, Injectable, InjectionToken, Optional, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport * as i0 from \"@angular/core\";\n// Define the `Request` token\nexport const REQUEST = new InjectionToken('REQUEST');\nexport class SsrCookieService {\n document;\n platformId;\n request;\n documentIsAccessible;\n static initialUrl = '';\n constructor(document, \n // Get the `PLATFORM_ID` so we can check if we're in a browser.\n platformId, request) {\n this.document = document;\n this.platformId = platformId;\n this.request = request;\n this.documentIsAccessible = isPlatformBrowser(this.platformId);\n SsrCookieService.initialUrl = this.documentIsAccessible ? this.document.location.href : this.request?.url;\n }\n /**\n * Get cookie Regular Expression\n *\n * @param name Cookie name\n * @returns property RegExp\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n static getCookieRegExp(name) {\n const escapedName = name.replace(/([\\[\\]\\{\\}\\(\\)\\|\\=\\;\\+\\?\\,\\.\\*\\^\\$])/gi, '\\\\$1');\n return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\n }\n /**\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @param encodedURIComponent A value representing an encoded URI component.\n *\n * @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n static safeDecodeURIComponent(encodedURIComponent) {\n try {\n return decodeURIComponent(encodedURIComponent);\n }\n catch {\n // probably it is not uri encoded. return as is\n return encodedURIComponent;\n }\n }\n /**\n * Return `true` if {@link Document} is accessible, otherwise return `false`\n *\n * @param name Cookie name\n * @returns boolean - whether cookie with specified name exists\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n check(name) {\n name = encodeURIComponent(name);\n const regExp = SsrCookieService.getCookieRegExp(name);\n return regExp.test((this.documentIsAccessible ? this.document.cookie : this.request?.headers.cookie) ?? '');\n }\n isDocumentIsAccessible() {\n return this.documentIsAccessible;\n }\n get url() {\n return this.documentIsAccessible ? this.document.location.href : this.request?.url;\n }\n /**\n * Get cookies by name\n *\n * @param name Cookie name\n * @returns property value\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n get(name) {\n if (this.check(name)) {\n name = encodeURIComponent(name);\n const regExp = SsrCookieService.getCookieRegExp(name);\n const result = regExp.exec((this.documentIsAccessible ? this.document.cookie : this.request?.headers.cookie) ?? '');\n return result[1] ? SsrCookieService.safeDecodeURIComponent(result[1]) : '';\n }\n else {\n return '';\n }\n }\n /**\n * Get all cookies in JSON format\n *\n * @returns all the cookies in json\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n getAll() {\n const cookies = {};\n const cookieString = this.documentIsAccessible ? this.document?.cookie : this.request?.headers.cookie;\n if (cookieString && cookieString !== '') {\n cookieString.split(';').forEach((currentCookie) => {\n const [cookieName, cookieValue] = currentCookie.split('=');\n cookies[SsrCookieService.safeDecodeURIComponent(cookieName.replace(/^ /, ''))] = SsrCookieService.safeDecodeURIComponent(cookieValue);\n });\n }\n return cookies;\n }\n set(name, value, expiresOrOptions, path, domain, secure, sameSite, partitioned) {\n if (!this.documentIsAccessible) {\n return;\n }\n if (typeof expiresOrOptions === 'number' || expiresOrOptions instanceof Date || path || domain || secure || sameSite) {\n const optionsBody = {\n expires: expiresOrOptions,\n path,\n domain,\n secure,\n sameSite: sameSite ? sameSite : 'Lax',\n partitioned,\n };\n this.set(name, value, optionsBody);\n return;\n }\n let cookieString = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';\n const options = expiresOrOptions ? expiresOrOptions : {};\n if (options.expires) {\n if (typeof options.expires === 'number') {\n const dateExpires = new Date(new Date().getTime() + options.expires * 1000 * 60 * 60 * 24);\n cookieString += 'expires=' + dateExpires.toUTCString() + ';';\n }\n else {\n cookieString += 'expires=' + options.expires.toUTCString() + ';';\n }\n }\n if (options.path) {\n cookieString += 'path=' + options.path + ';';\n }\n if (options.domain) {\n cookieString += 'domain=' + options.domain + ';';\n }\n if (options.secure === false && options.sameSite === 'None') {\n options.secure = true;\n console.warn(`[ngx-cookie-service] Cookie ${name} was forced with secure flag because sameSite=None.` +\n `More details : https://github.com/stevermeister/ngx-cookie-service/issues/86#issuecomment-597720130`);\n }\n if (options.secure) {\n cookieString += 'secure;';\n }\n if (!options.sameSite) {\n options.sameSite = 'Lax';\n }\n cookieString += 'sameSite=' + options.sameSite + ';';\n if (options.partitioned) {\n cookieString += 'Partitioned;';\n }\n this.document.cookie = cookieString;\n }\n /**\n * Delete cookie by name\n *\n * @param name Cookie name\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Cookie secure flag\n * @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n delete(name, path, domain, secure, sameSite = 'Lax') {\n if (!this.documentIsAccessible) {\n return;\n }\n const expiresDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');\n this.set(name, '', { expires: expiresDate, path, domain, secure, sameSite });\n }\n /**\n * Delete all cookies\n *\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Is the Cookie secure\n * @param sameSite Is the cookie same site\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n deleteAll(path, domain, secure, sameSite = 'Lax') {\n if (!this.documentIsAccessible) {\n return;\n }\n const cookies = this.getAll();\n for (const cookieName in cookies) {\n if (cookies.hasOwnProperty(cookieName)) {\n this.delete(cookieName, path, domain, secure, sameSite);\n }\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [REQUEST]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWNvb2tpZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvc3NyLWNvb2tpZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBVSxTQUFTLENBQUMsQ0FBQztBQUs5RCxNQUFNLE9BQU8sZ0JBQWdCO0lBS0M7SUFFRztJQUNRO0lBUHRCLG9CQUFvQixDQUFVO0lBQy9DLE1BQU0sQ0FBRSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRXhCLFlBQzRCLFFBQWtCO0lBQzVDLCtEQUErRDtJQUNsQyxVQUFlLEVBQ1AsT0FBZ0I7UUFIM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUVmLGVBQVUsR0FBVixVQUFVLENBQUs7UUFDUCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBRXJELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztJQUM1RyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQVk7UUFDakMsTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FB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Q0FBQztJQUNILENBQUM7dUdBaFNVLGdCQUFnQixrQkFLakIsUUFBUSxhQUVSLFdBQVcsYUFDQyxPQUFPOzJHQVJsQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUVmLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy8gRGVmaW5lIHRoZSBgUmVxdWVzdGAgdG9rZW5cbmV4cG9ydCBjb25zdCBSRVFVRVNUID0gbmV3IEluamVjdGlvblRva2VuPFJlcXVlc3Q+KCdSRVFVRVNUJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTc3JDb29raWVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudElzQWNjZXNzaWJsZTogYm9vbGVhbjtcbiAgc3RhdGljICBpbml0aWFsVXJsID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgLy8gR2V0IHRoZSBgUExBVEZPUk1fSURgIHNvIHdlIGNhbiBjaGVjayBpZiB3ZSdyZSBpbiBhIGJyb3dzZXIuXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSRVFVRVNUKSBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3RcbiAgKSB7XG4gICAgdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gICAgU3NyQ29va2llU2VydmljZS5pbml0aWFsVXJsID0gdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA6IHRoaXMucmVxdWVzdD8udXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWUgUmVndWxhciBFeHByZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIENvb2tpZSBuYW1lXG4gICAqIEByZXR1cm5zIHByb3BlcnR5IFJlZ0V4cFxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29va2llUmVnRXhwKG5hbWU6IHN0cmluZyk6IFJlZ0V4cCB7XG4gICAgY29uc3QgZXNjYXBlZE5hbWU6IHN0cmluZyA9IG5hbWUucmVwbGFjZSgvKFtcXFtcXF1cXHtcXH1cXChcXClcXHxcXD1cXDtcXCtcXD9cXCxcXC5cXCpcXF5cXCRdKS9naSwgJ1xcXFwkMScpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJyg/Ol4nICsgZXNjYXBlZE5hbWUgKyAnfDtcXFxccyonICsgZXNjYXBlZE5hbWUgKyAnKT0oLio/KSg/Ojt8JCknLCAnZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVuZW5jb2RlZCB2ZXJzaW9uIG9mIGFuIGVuY29kZWQgY29tcG9uZW50IG9mIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpLlxuICAgKlxuICAgKiBAcGFyYW0gZW5jb2RlZFVSSUNvbXBvbmVudCBBIHZhbHVlIHJlcHJlc2VudGluZyBhbiBlbmNvZGVkIFVSSSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB1bmVuY29kZWQgdmVyc2lvbiBvZiBhbiBlbmNvZGVkIGNvbXBvbmVudCBvZiBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKS5cbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc3RhdGljIHNhZmVEZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZFVSSUNvbXBvbmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVkVVJJQ29tcG9uZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHByb2JhYmx5IGl0IGlzIG5vdCB1cmkgZW5jb2RlZC4gcmV0dXJuIGFzIGlzXG4gICAgICByZXR1cm4gZW5jb2RlZFVSSUNvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgRG9jdW1lbnR9IGlzIGFjY2Vzc2libGUsIG90aGVyd2lzZSByZXR1cm4gYGZhbHNlYFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBDb29raWUgbmFtZVxuICAgKiBAcmV0dXJucyBib29sZWFuIC0gd2hldGhlciBjb29raWUgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHNcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgY2hlY2sobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgICBjb25zdCByZWdFeHA6IFJlZ0V4cCA9IFNzckNvb2tpZVNlcnZpY2UuZ2V0Q29va2llUmVnRXhwKG5hbWUpO1xuICAgIHJldHVybiByZWdFeHAudGVzdCgodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQuY29va2llICA6IHRoaXMucmVxdWVzdD8uaGVhZGVycy5jb29raWUpID8/ICcnKTtcbiAgfVxuICBpc0RvY3VtZW50SXNBY2Nlc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlIDtcbiAgfVxuIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA6IHRoaXMucmVxdWVzdD8udXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWVzIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgQ29va2llIG5hbWVcbiAgICogQHJldHVybnMgcHJvcGVydHkgdmFsdWVcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2hlY2sobmFtZSkpIHtcbiAgICAgIG5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XG5cbiAgICAgIGNvbnN0IHJlZ0V4cDogUmVnRXhwID0gU3NyQ29va2llU2VydmljZS5nZXRDb29raWVSZWdFeHAobmFtZSk7XG4gICAgICBjb25zdCByZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheSB8YW55PSByZWdFeHAuZXhlYygodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQuY29va2llIDogdGhpcy5yZXF1ZXN0Py5oZWFkZXJzLmNvb2tpZSkgPz8gJycpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0WzFdID8gU3NyQ29va2llU2VydmljZS5zYWZlRGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdFsxXSkgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGNvb2tpZXMgaW4gSlNPTiBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybnMgYWxsIHRoZSBjb29raWVzIGluIGpzb25cbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGNvb2tpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdCBjb29raWVTdHJpbmc6IGFueSA9IHRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUgPyB0aGlzLmRvY3VtZW50Py5jb29raWUgOiB0aGlzLnJlcXVlc3Q/LmhlYWRlcnMuY29va2llO1xuXG4gICAgaWYgKGNvb2tpZVN0cmluZyAmJiBjb29raWVTdHJpbmcgIT09ICcnKSB7XG4gICAgICBjb29raWVTdHJpbmcuc3BsaXQoJzsnKS5mb3JFYWNoKChjdXJyZW50Q29va2llOmFueSkgPT4ge1xuICAgICAgICBjb25zdCBbY29va2llTmFtZSwgY29va2llVmFsdWVdID0gY3VycmVudENvb2tpZS5zcGxpdCgnPScpO1xuICAgICAgICBjb29raWVzW1NzckNvb2tpZVNlcnZpY2Uuc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWVOYW1lLnJlcGxhY2UoL14gLywgJycpKV0gPSBTc3JDb29raWVTZXJ2aWNlLnNhZmVEZWNvZGVVUklDb21wb25lbnQoY29va2llVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvb2tpZSBiYXNlZCBvbiBwcm92aWRlZCBpbmZvcm1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAgICAgQ29va2llIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlICAgIENvb2tpZSB2YWx1ZVxuICAgKiBAcGFyYW0gZXhwaXJlcyAgTnVtYmVyIG9mIGRheXMgdW50aWwgdGhlIGNvb2tpZXMgZXhwaXJlcyBvciBhbiBhY3R1YWwgYERhdGVgXG4gICAqIEBwYXJhbSBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBAcGFyYW0gZG9tYWluICAgQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlICAgU2VjdXJlIGZsYWdcbiAgICogQHBhcmFtIHNhbWVTaXRlIE9XQVNQIHNhbWUgc2l0ZSB0b2tlbiBgTGF4YCwgYE5vbmVgLCBvciBgU3RyaWN0YC4gRGVmYXVsdHMgdG8gYExheGBcbiAgICogQHBhcmFtIHBhcnRpdGlvbmVkIFBhcnRpdGlvbmVkIGZsYWdcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc2V0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGV4cGlyZXM/OiBudW1iZXIgfCBEYXRlLFxuICAgIHBhdGg/OiBzdHJpbmcsXG4gICAgZG9tYWluPzogc3RyaW5nLFxuICAgIHNlY3VyZT86IGJvb2xlYW4sXG4gICAgc2FtZVNpdGU/OiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnLFxuICAgIHBhcnRpdGlvbmVkPzogYm9vbGVhblxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgY29va2llIGJhc2VkIG9uIHByb3ZpZGVkIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIENvb2tpZSdzIHBhcmFtZXRlcnM6XG4gICAqIDxwcmU+XG4gICAqIGV4cGlyZXMgIE51bWJlciBvZiBkYXlzIHVudGlsIHRoZSBjb29raWVzIGV4cGlyZXMgb3IgYW4gYWN0dWFsIGBEYXRlYFxuICAgKiBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBkb21haW4gICBDb29raWUgZG9tYWluXG4gICAqIHNlY3VyZSBDb29raWUgc2VjdXJlIGZsYWdcbiAgICogc2FtZVNpdGUgT1dBU1Agc2FtZSBzaXRlIHRva2VuIGBMYXhgLCBgTm9uZWAsIG9yIGBTdHJpY3RgLiBEZWZhdWx0cyB0byBgTGF4YFxuICAgKiA8L3ByZT5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICAgIENvb2tpZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSAgICBDb29raWUgdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnMgIEJvZHkgd2l0aCBjb29raWUncyBwYXJhbXNcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc2V0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBleHBpcmVzPzogbnVtYmVyIHwgRGF0ZTtcbiAgICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgICBkb21haW4/OiBzdHJpbmc7XG4gICAgICBzZWN1cmU/OiBib29sZWFuO1xuICAgICAgc2FtZVNpdGU/OiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnO1xuICAgICAgcGFydGl0aW9uZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZDtcblxuICBzZXQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZXhwaXJlc09yT3B0aW9ucz86IG51bWJlciB8IERhdGUgfCBhbnksXG4gICAgcGF0aD86IHN0cmluZyxcbiAgICBkb21haW4/OiBzdHJpbmcsXG4gICAgc2VjdXJlPzogYm9vbGVhbixcbiAgICBzYW1lU2l0ZT86ICdMYXgnIHwgJ05vbmUnIHwgJ1N0cmljdCcsXG4gICAgcGFydGl0aW9uZWQ/OiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwaXJlc09yT3B0aW9ucyA9PT0gJ251bWJlcicgfHwgZXhwaXJlc09yT3B0aW9ucyBpbnN0YW5jZW9mIERhdGUgfHwgcGF0aCB8fCBkb21haW4gfHwgc2VjdXJlIHx8IHNhbWVTaXRlKSB7XG4gICAgICBjb25zdCBvcHRpb25zQm9keSA9IHtcbiAgICAgICAgZXhwaXJlczogZXhwaXJlc09yT3B0aW9ucyxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBzZWN1cmUsXG4gICAgICAgIHNhbWVTaXRlOiBzYW1lU2l0ZSA/IHNhbWVTaXRlIDogJ0xheCcsXG4gICAgICAgIHBhcnRpdGlvbmVkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXQobmFtZSwgdmFsdWUsIG9wdGlvbnNCb2R5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29va2llU3RyaW5nOiBzdHJpbmcgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgJzsnO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGV4cGlyZXNPck9wdGlvbnMgPyBleHBpcmVzT3JPcHRpb25zIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5leHBpcmVzKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgZGF0ZUV4cGlyZXM6IERhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG9wdGlvbnMuZXhwaXJlcyAqIDEwMDAgKiA2MCAqIDYwICogMjQpO1xuXG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgZGF0ZUV4cGlyZXMudG9VVENTdHJpbmcoKSArICc7JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgb3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgKyAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucGF0aCkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdwYXRoPScgKyBvcHRpb25zLnBhdGggKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZG9tYWluKSB7XG4gICAgICBjb29raWVTdHJpbmcgKz0gJ2RvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2VjdXJlID09PSBmYWxzZSAmJiBvcHRpb25zLnNhbWVTaXRlID09PSAnTm9uZScpIHtcbiAgICAgIG9wdGlvbnMuc2VjdXJlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtuZ3gtY29va2llLXNlcnZpY2VdIENvb2tpZSAke25hbWV9IHdhcyBmb3JjZWQgd2l0aCBzZWN1cmUgZmxhZyBiZWNhdXNlIHNhbWVTaXRlPU5vbmUuYCArXG4gICAgICAgICAgYE1vcmUgZGV0YWlscyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGV2ZXJtZWlzdGVyL25neC1jb29raWUtc2VydmljZS9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTU5NzcyMDEzMGBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNlY3VyZSkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdzZWN1cmU7JztcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuc2FtZVNpdGUpIHtcbiAgICAgIG9wdGlvbnMuc2FtZVNpdGUgPSAnTGF4JztcbiAgICB9XG5cbiAgICBjb29raWVTdHJpbmcgKz0gJ3NhbWVTaXRlPScgKyBvcHRpb25zLnNhbWVTaXRlICsgJzsnO1xuXG4gICAgaWYgKG9wdGlvbnMucGFydGl0aW9uZWQpIHtcbiAgICAgIGNvb2tpZVN0cmluZyArPSAnUGFydGl0aW9uZWQ7JztcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgY29va2llIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICBDb29raWUgbmFtZVxuICAgKiBAcGFyYW0gcGF0aCAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIENvb2tpZSBzZWN1cmUgZmxhZ1xuICAgKiBAcGFyYW0gc2FtZVNpdGUgQ29va2llIHNhbWVTaXRlIGZsYWcgLSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvU2V0LUNvb2tpZS9TYW1lU2l0ZVxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBkZWxldGUobmFtZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcsIHNlY3VyZT86IGJvb2xlYW4sIHNhbWVTaXRlOiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnID0gJ0xheCcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZSgnVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVQnKTtcbiAgICB0aGlzLnNldChuYW1lLCAnJywgeyBleHBpcmVzOiBleHBpcmVzRGF0ZSwgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgY29va2llc1xuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIElzIHRoZSBDb29raWUgc2VjdXJlXG4gICAqIEBwYXJhbSBzYW1lU2l0ZSBJcyB0aGUgY29va2llIHNhbWUgc2l0ZVxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBkZWxldGVBbGwocGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nLCBzZWN1cmU/OiBib29sZWFuLCBzYW1lU2l0ZTogJ0xheCcgfCAnTm9uZScgfCAnU3RyaWN0JyA9ICdMYXgnKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29va2llczogYW55ID0gdGhpcy5nZXRBbGwoKTtcblxuICAgIGZvciAoY29uc3QgY29va2llTmFtZSBpbiBjb29raWVzKSB7XG4gICAgICBpZiAoY29va2llcy5oYXNPd25Qcm9wZXJ0eShjb29raWVOYW1lKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZShjb29raWVOYW1lLCBwYXRoLCBkb21haW4sIHNlY3VyZSwgc2FtZVNpdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport Swal from 'sweetalert2';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ngx-translate/core\";\nexport class SwalService {\n translate;\n defaultClass = {\n container: 'swal2-container'\n };\n constructor(translate) {\n this.translate = translate;\n }\n t(key) {\n return this.translate.instant(key);\n }\n /** رسالة تأكيد */\n confirm(title = this.t('Confirm.Title'), text = this.t('Confirm.Text'), confirmButtonText = this.t('Confirm.Yes'), cancelButtonText = this.t('Confirm.Cancel')) {\n return Swal.fire({\n icon: 'warning',\n title,\n text,\n showCancelButton: true,\n confirmButtonText,\n cancelButtonText,\n customClass: this.defaultClass\n });\n }\n /** رسالة نجاح */\n success(title, text, timer = 2000) {\n return Swal.fire({\n icon: 'success',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n timer,\n showConfirmButton: false,\n customClass: this.defaultClass\n });\n }\n /** رسالة خطأ */\n error(title, text, footer) {\n return Swal.fire({\n icon: 'error',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n footer: footer ? this.t(footer) : undefined,\n customClass: this.defaultClass\n });\n }\n /** رسالة معلومات */\n info(title, text) {\n return Swal.fire({\n icon: 'info',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n customClass: this.defaultClass\n });\n }\n /** أي خيارات مخصصة */\n alert(options) {\n const translated = {\n ...options,\n title: options.title ? this.t(options.title) : undefined,\n text: options.text ? this.t(options.text) : undefined,\n footer: options.footer ? this.t(options.footer) : undefined,\n customClass: this.defaultClass\n };\n return Swal.fire(translated);\n }\n /** Toast */\n toast(title, icon = 'info', position = 'top-end', timer = 3000) {\n const Toast = Swal.mixin({\n toast: true,\n position,\n timer,\n showConfirmButton: false,\n customClass: this.defaultClass\n });\n Toast.fire({ icon, title: this.t(title) });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.TranslateService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dhbFNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL1N3YWxTZXJ2aWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLElBSU4sTUFBTSxhQUFhLENBQUM7OztBQUdyQixNQUFNLE9BQU8sV0FBVztJQUtGO0lBSlosWUFBWSxHQUFHO1FBQ3JCLFNBQVMsRUFBRSxpQkFBaUI7S0FDN0IsQ0FBQztJQUVGLFlBQW9CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUcsQ0FBQztJQUUzQyxDQUFDLENBQUMsR0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUNMLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUMvQixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFDN0IsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFDekMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUUzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUs7WUFDTCxJQUFJO1lBQ0osZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLE9BQU8sQ0FDTCxLQUFhLEVBQ2IsSUFBYSxFQUNiLEtBQUssR0FBRyxJQUFJO1FBRVosT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNyQyxLQUFLO1lBQ0wsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixLQUFLLENBQ0gsS0FBYSxFQUNiLElBQWEsRUFDYixNQUFlO1FBRWYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNyQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzNDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQUksQ0FDRixLQUFhLEVBQ2IsSUFBYTtRQUViLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztZQUNmLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDckMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsS0FBSyxDQUNILE9BQTBCO1FBRTFCLE1BQU0sVUFBVSxHQUFzQjtZQUNwQyxHQUFHLE9BQU87WUFDVixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQy9ELE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDckUsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQy9CLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVk7SUFDWixLQUFLLENBQ0gsS0FBYSxFQUNiLE9BQXVCLE1BQU0sRUFDN0IsV0FBMEMsU0FBUyxFQUNuRCxLQUFLLEdBQUcsSUFBSTtRQUVaLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkIsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRO1lBQ1IsS0FBSztZQUNMLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQy9CLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7dUdBdEdVLFdBQVc7MkdBQVgsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCBTd2FsLCB7XG4gIFN3ZWV0QWxlcnRPcHRpb25zLFxuICBTd2VldEFsZXJ0UmVzdWx0LFxuICBTd2VldEFsZXJ0SWNvblxufSBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3dhbFNlcnZpY2Uge1xuICBwcml2YXRlIGRlZmF1bHRDbGFzcyA9IHtcbiAgICBjb250YWluZXI6ICdzd2FsMi1jb250YWluZXInXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgcHJpdmF0ZSB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChrZXkpO1xuICB9XG5cbiAgLyoqINix2LPYp9mE2Kkg2KrYo9mD2YrYryAqL1xuICBjb25maXJtKFxuICAgIHRpdGxlID0gdGhpcy50KCdDb25maXJtLlRpdGxlJyksXG4gICAgdGV4dCA9IHRoaXMudCgnQ29uZmlybS5UZXh0JyksXG4gICAgY29uZmlybUJ1dHRvblRleHQgPSB0aGlzLnQoJ0NvbmZpcm0uWWVzJyksXG4gICAgY2FuY2VsQnV0dG9uVGV4dCA9IHRoaXMudCgnQ29uZmlybS5DYW5jZWwnKVxuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICd3YXJuaW5nJyxcbiAgICAgIHRpdGxlLFxuICAgICAgdGV4dCxcbiAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICBjb25maXJtQnV0dG9uVGV4dCxcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQsXG4gICAgICBjdXN0b21DbGFzczogdGhpcy5kZWZhdWx0Q2xhc3NcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiDYsdiz2KfZhNipINmG2KzYp9itICovXG4gIHN1Y2Nlc3MoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIHRpbWVyID0gMjAwMFxuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiB0aGlzLnQodGl0bGUpLFxuICAgICAgdGV4dDogdGV4dCA/IHRoaXMudCh0ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVyLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gIH1cblxuICAvKiog2LHYs9in2YTYqSDYrti32KMgKi9cbiAgZXJyb3IoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIGZvb3Rlcj86IHN0cmluZ1xuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdlcnJvcicsXG4gICAgICB0aXRsZTogdGhpcy50KHRpdGxlKSxcbiAgICAgIHRleHQ6IHRleHQgPyB0aGlzLnQodGV4dCkgOiB1bmRlZmluZWQsXG4gICAgICBmb290ZXI6IGZvb3RlciA/IHRoaXMudChmb290ZXIpIDogdW5kZWZpbmVkLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gIH1cblxuICAvKiog2LHYs9in2YTYqSDZhdi52YTZiNmF2KfYqiAqL1xuICBpbmZvKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdGV4dD86IHN0cmluZ1xuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdpbmZvJyxcbiAgICAgIHRpdGxlOiB0aGlzLnQodGl0bGUpLFxuICAgICAgdGV4dDogdGV4dCA/IHRoaXMudCh0ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICAgIGN1c3RvbUNsYXNzOiB0aGlzLmRlZmF1bHRDbGFzc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqINij2Yog2K7Zitin2LHYp9iqINmF2K7Ytdi12KkgKi9cbiAgYWxlcnQoXG4gICAgb3B0aW9uczogU3dlZXRBbGVydE9wdGlvbnNcbiAgKTogUHJvbWlzZTxTd2VldEFsZXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlZDogU3dlZXRBbGVydE9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUgPyB0aGlzLnQob3B0aW9ucy50aXRsZSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgdGV4dDogb3B0aW9ucy50ZXh0ID8gdGhpcy50KG9wdGlvbnMudGV4dCBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgZm9vdGVyOiBvcHRpb25zLmZvb3RlciA/IHRoaXMudChvcHRpb25zLmZvb3RlciBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfTtcbiAgICByZXR1cm4gU3dhbC5maXJlKHRyYW5zbGF0ZWQpO1xuICB9XG5cbiAgLyoqIFRvYXN0ICovXG4gIHRvYXN0KFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgaWNvbjogU3dlZXRBbGVydEljb24gPSAnaW5mbycsXG4gICAgcG9zaXRpb246IFN3ZWV0QWxlcnRPcHRpb25zWydwb3NpdGlvbiddID0gJ3RvcC1lbmQnLFxuICAgIHRpbWVyID0gMzAwMFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBUb2FzdCA9IFN3YWwubWl4aW4oe1xuICAgICAgdG9hc3Q6IHRydWUsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIHRpbWVyLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gICAgVG9hc3QuZmlyZSh7IGljb24sIHRpdGxlOiB0aGlzLnQodGl0bGUpIH0pO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { RestService } from './rest.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nexport class ApplicationLocalizationService {\n restService;\n apiName = 'framework';\n get = (input, config) => this.restService.request({\n method: 'GET',\n url: '/api/asp-net-core/framework-application-localizations',\n params: { cultureName: input.cultureName, onlyDynamics: input.onlyDynamics },\n }, { apiName: this.apiName, ...config });\n constructor(restService) {\n this.restService = restService;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationLocalizationService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationLocalizationService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationLocalizationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RestService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9hcHBsaWNhdGlvbi1sb2NhbGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTTdDLE1BQU0sT0FBTyw4QkFBOEI7SUFZckI7SUFYcEIsT0FBTyxHQUFHLFdBQVcsQ0FBQztJQUd0QixHQUFHLEdBQUcsQ0FBQyxLQUF3QyxFQUFFLE1BQTZCLEVBQUUsRUFBRSxDQUNoRixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBa0M7UUFDeEQsTUFBTSxFQUFFLEtBQUs7UUFDYixHQUFHLEVBQUUsdURBQXVEO1FBQzVELE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFO0tBQzdFLEVBQ0QsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFdkMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBRyxDQUFDO3VHQVpyQyw4QkFBOEI7MkdBQTlCLDhCQUE4QixjQUY3QixNQUFNOzsyRkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4vcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uRHRvLCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlcXVlc3REdG8sIFJlc3QgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uU2VydmljZSB7XG4gIGFwaU5hbWUgPSAnZnJhbWV3b3JrJztcblxuXG4gIGdldCA9IChpbnB1dDogQXBwbGljYXRpb25Mb2NhbGl6YXRpb25SZXF1ZXN0RHRvLCBjb25maWc/OiBQYXJ0aWFsPFJlc3QuQ29uZmlnPikgPT5cbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkR0bz4oe1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHVybDogJy9hcGkvYXNwLW5ldC1jb3JlL2ZyYW1ld29yay1hcHBsaWNhdGlvbi1sb2NhbGl6YXRpb25zJyxcbiAgICAgIHBhcmFtczogeyBjdWx0dXJlTmFtZTogaW5wdXQuY3VsdHVyZU5hbWUsIG9ubHlEeW5hbWljczogaW5wdXQub25seUR5bmFtaWNzIH0sXG4gICAgfSxcbiAgICB7IGFwaU5hbWU6IHRoaXMuYXBpTmFtZSwuLi5jb25maWcgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UpIHt9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { RestService } from './rest.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nexport class ApplicationConfigurationService {\n restService;\n // apiName = 'framework';\n apiName = '';\n get = (options, config) => this.restService.request({\n method: 'GET',\n // url: '/api/framework/application-configuration',\n url: '/api/asp-net-core/framework-application-configurations',\n params: { includeLocalizationResources: options.includeLocalizationResources },\n }, { apiName: this.apiName, ...config });\n constructor(restService) {\n this.restService = restService;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationConfigurationService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationConfigurationService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ApplicationConfigurationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RestService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvYXBwbGljYXRpb24tY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFNN0MsTUFBTSxPQUFPLCtCQUErQjtJQWN0QjtJQWJwQix5QkFBeUI7SUFDekIsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUViLEdBQUcsR0FBRyxDQUFDLE9BQStDLEVBQUUsTUFBNkIsRUFBRSxFQUFFLENBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFtQztRQUN6RCxNQUFNLEVBQUUsS0FBSztRQUNYLG1EQUFtRDtRQUNuRCxHQUFHLEVBQUUsd0RBQXdEO1FBQy9ELE1BQU0sRUFBRSxFQUFFLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRTtLQUUvRSxFQUNDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTFDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQzt1R0FkdEMsK0JBQStCOzJHQUEvQiwrQkFBK0IsY0FGOUIsTUFBTTs7MkZBRVAsK0JBQStCO2tCQUgzQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4vcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db25maWd1cmF0aW9uRHRvLCBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25SZXF1ZXN0T3B0aW9ucywgUmVzdCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvblNlcnZpY2Uge1xyXG4gIC8vIGFwaU5hbWUgPSAnZnJhbWV3b3JrJztcclxuICBhcGlOYW1lID0gJyc7XHJcblxyXG4gIGdldCA9IChvcHRpb25zOiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25SZXF1ZXN0T3B0aW9ucywgY29uZmlnPzogUGFydGlhbDxSZXN0LkNvbmZpZz4pID0+XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8+KHtcclxuICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAvLyB1cmw6ICcvYXBpL2ZyYW1ld29yay9hcHBsaWNhdGlvbi1jb25maWd1cmF0aW9uJyxcclxuICAgICAgICB1cmw6ICcvYXBpL2FzcC1uZXQtY29yZS9mcmFtZXdvcmstYXBwbGljYXRpb24tY29uZmlndXJhdGlvbnMnLFxyXG4gICAgICBwYXJhbXM6IHsgaW5jbHVkZUxvY2FsaXphdGlvblJlc291cmNlczogb3B0aW9ucy5pbmNsdWRlTG9jYWxpemF0aW9uUmVzb3VyY2VzIH0sXHJcblxyXG4gICAgfSxcclxuICAgICAgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUsIC4uLmNvbmZpZyB9KTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UpIHsgfVxyXG59XHJcbiJdfQ==","import { Inject, Injectable, Optional } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { map, switchMap, take, tap } from 'rxjs/operators';\nimport { ApplicationLocalizationService } from './application-localization.service';\nimport { ApplicationConfigurationService } from './application-configuration.service';\nimport { INCUDE_LOCALIZATION_RESOURCES_TOKEN } from '@elite.framework/ng.core/tokens';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./application-configuration.service\";\nimport * as i2 from \"./application-localization.service\";\nexport class ConfigStateService {\n abpConfigService;\n applicationLocalizationService;\n includeLocalizationResources;\n updateSubject = new Subject();\n store = new InternalStore({});\n uiCultureFromAuthCodeFlow;\n setState(config) {\n this.store.set(config);\n }\n get createOnUpdateStream() {\n return this.store.sliceUpdate;\n }\n constructor(abpConfigService, applicationLocalizationService, includeLocalizationResources) {\n this.abpConfigService = abpConfigService;\n this.applicationLocalizationService = applicationLocalizationService;\n this.includeLocalizationResources = includeLocalizationResources;\n this.initUpdateStream();\n }\n initUpdateStream() {\n this.updateSubject\n .pipe(switchMap(() => this.abpConfigService.get({\n includeLocalizationResources: !!this.includeLocalizationResources,\n })))\n .pipe(switchMap(appState => this.getLocalizationAndCombineWithAppState(appState)))\n .subscribe(res => this.store.set(res));\n }\n getLocalizationAndCombineWithAppState(appState) {\n // debugger\n if (!appState.localization.currentCulture.cultureName) {\n throw new Error('culture name should defined');\n }\n const cultureName = this.uiCultureFromAuthCodeFlow ?? appState.localization.currentCulture.cultureName;\n return this.getlocalizationResource(cultureName).pipe(map(result => ({ ...appState, localization: { ...appState.localization, ...result } })), tap(() => (this.uiCultureFromAuthCodeFlow = undefined)));\n }\n getlocalizationResource(cultureName) {\n return this.applicationLocalizationService.get({\n cultureName: cultureName,\n onlyDynamics: false,\n });\n }\n refreshAppState() {\n this.updateSubject.next();\n return this.createOnUpdateStream(state => state).pipe(take(1));\n }\n refreshLocalization(lang) {\n if (this.includeLocalizationResources) {\n return this.refreshAppState().pipe(map(() => null));\n }\n return this.getlocalizationResource(lang)\n .pipe(tap(result => this.store.patch({ localization: { ...this.store.state.localization, ...result } })))\n .pipe(map(() => { return null; }));\n }\n getOne$(key) {\n return this.store.sliceState(state => state[key]);\n }\n getOne(key) {\n return this.store.state[key];\n }\n getAll$() {\n return this.store.sliceState(state => state);\n }\n getAll() {\n return this.store.state;\n }\n getDeep$(keys) {\n keys = splitKeys(keys);\n return this.store\n .sliceState(state => state)\n .pipe(map(state => {\n return keys.reduce((acc, val) => {\n if (acc) {\n return acc[val];\n }\n return undefined;\n }, state);\n }));\n }\n getDeep(keys) {\n keys = splitKeys(keys);\n return keys.reduce((acc, val) => {\n if (acc) {\n return acc[val];\n }\n return undefined;\n }, this.store.state);\n }\n getFeature(key) {\n return this.store.state.features?.values?.[key];\n }\n getFeature$(key) {\n return this.store.sliceState(state => state.features?.values?.[key]);\n }\n getFeatures(keys) {\n const { features } = this.store.state;\n if (!features)\n return null;\n return keys.reduce((acc, key) => ({ ...acc, [key]: features.values[key] }), {});\n }\n getFeatures$(keys) {\n return this.store.sliceState(({ features }) => {\n if (!features?.values)\n return null;\n return keys.reduce((acc, key) => ({ ...acc, [key]: features.values[key] }), {});\n });\n }\n isFeatureEnabled(key, features) {\n return features.values[key] === 'true';\n }\n getFeatureIsEnabled(key) {\n return this.isFeatureEnabled(key, this.store.state.features);\n }\n getFeatureIsEnabled$(key) {\n return this.store.sliceState(state => this.isFeatureEnabled(key, state.features));\n }\n getSetting(key) {\n return this.store.state.setting?.values?.[key];\n }\n getSetting$(key) {\n return this.store.sliceState(state => state.setting?.values?.[key]);\n }\n getSettings(keyword) {\n const settings = this.store.state.setting?.values || {};\n if (!keyword)\n return settings;\n const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1);\n return keysFound.reduce((acc, key) => {\n acc[key] = settings[key];\n return acc;\n }, {});\n }\n getSettings$(keyword) {\n return this.store\n .sliceState(state => state.setting?.values)\n .pipe(map((settings = {}) => {\n if (!keyword)\n return settings;\n const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1);\n return keysFound.reduce((acc, key) => {\n acc[key] = settings[key];\n return acc;\n }, {});\n }));\n }\n getGlobalFeatures() {\n return this.store.state.globalFeatures;\n }\n getGlobalFeatures$() {\n return this.store.sliceState(state => state.globalFeatures);\n }\n isGlobalFeatureEnabled(key, globalFeatures) {\n const features = globalFeatures.enabledFeatures || [];\n return features.some(f => key === f);\n }\n getGlobalFeatureIsEnabled(key) {\n return this.isGlobalFeatureEnabled(key, this.store.state.globalFeatures);\n }\n getGlobalFeatureIsEnabled$(key) {\n return this.store.sliceState(state => this.isGlobalFeatureEnabled(key, state.globalFeatures));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ConfigStateService, deps: [{ token: i1.ApplicationConfigurationService }, { token: i2.ApplicationLocalizationService }, { token: INCUDE_LOCALIZATION_RESOURCES_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ConfigStateService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ConfigStateService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.ApplicationConfigurationService }, { type: i2.ApplicationLocalizationService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [INCUDE_LOCALIZATION_RESOURCES_TOKEN]\n }] }] });\nfunction splitKeys(keys) {\n if (typeof keys === 'string') {\n keys = keys.split('.');\n }\n if (!Array.isArray(keys)) {\n throw new Error('The argument must be a dot string or an string array.');\n }\n return keys;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9jb25maWctc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR3BGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQUsvRCxNQUFNLE9BQU8sa0JBQWtCO0lBY25CO0lBQ0E7SUFHUztJQWpCWCxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMzQixLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBaUMsQ0FBQyxDQUFDO0lBRXZFLHlCQUF5QixDQUFVO0lBRTFDLFFBQVEsQ0FBQyxNQUFtQztRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsWUFDVSxnQkFBaUQsRUFDakQsOEJBQThELEVBR3JELDRCQUE0QztRQUpyRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlDO1FBQ2pE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QUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFRyYW5zZmVyU3RhdGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25Mb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi1sb2NhbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0bywgQXBwbGljYXRpb25GZWF0dXJlQ29uZmlndXJhdGlvbkR0bywgQXBwbGljYXRpb25HbG9iYWxGZWF0dXJlQ29uZmlndXJhdGlvbkR0byB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vYXBwbGljYXRpb24tY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSU5DVURFX0xPQ0FMSVpBVElPTl9SRVNPVVJDRVNfVE9LRU4gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcclxuaW1wb3J0IHsgSW50ZXJuYWxTdG9yZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS91dGlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlnU3RhdGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIHVwZGF0ZVN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZSh7fSBhcyBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8pO1xyXG5cclxuICBwdWJsaWMgdWlDdWx0dXJlRnJvbUF1dGhDb2RlRmxvdz86IHN0cmluZztcclxuXHJcbiAgc2V0U3RhdGUoY29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8pIHtcclxuICAgIHRoaXMuc3RvcmUuc2V0KGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3JlYXRlT25VcGRhdGVTdHJlYW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVVwZGF0ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFicENvbmZpZ1NlcnZpY2U6IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uTG9jYWxpemF0aW9uU2VydmljZTogQXBwbGljYXRpb25Mb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIEBJbmplY3QoSU5DVURFX0xPQ0FMSVpBVElPTl9SRVNPVVJDRVNfVE9LRU4pXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGVMb2NhbGl6YXRpb25SZXNvdXJjZXM6IGJvb2xlYW4gfCBudWxsLFxyXG4gICkge1xyXG4gICAgdGhpcy5pbml0VXBkYXRlU3RyZWFtKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRVcGRhdGVTdHJlYW0oKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN1YmplY3RcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLmFicENvbmZpZ1NlcnZpY2UuZ2V0KHtcclxuICAgICAgICAgICAgaW5jbHVkZUxvY2FsaXphdGlvblJlc291cmNlczogISF0aGlzLmluY2x1ZGVMb2NhbGl6YXRpb25SZXNvdXJjZXMsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHN3aXRjaE1hcChhcHBTdGF0ZSA9PiB0aGlzLmdldExvY2FsaXphdGlvbkFuZENvbWJpbmVXaXRoQXBwU3RhdGUoYXBwU3RhdGUpKSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4gdGhpcy5zdG9yZS5zZXQocmVzKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExvY2FsaXphdGlvbkFuZENvbWJpbmVXaXRoQXBwU3RhdGUoXHJcbiAgICBhcHBTdGF0ZTogQXBwbGljYXRpb25Db25maWd1cmF0aW9uRHRvLFxyXG4gICk6IE9ic2VydmFibGU8QXBwbGljYXRpb25Db25maWd1cmF0aW9uRHRvPiB7XHJcbiAgICAvLyBkZWJ1Z2dlclxyXG4gICAgaWYgKCFhcHBTdGF0ZS5sb2NhbGl6YXRpb24uY3VycmVudEN1bHR1cmUuY3VsdHVyZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjdWx0dXJlIG5hbWUgc2hvdWxkIGRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdWx0dXJlTmFtZSA9XHJcbiAgICAgIHRoaXMudWlDdWx0dXJlRnJvbUF1dGhDb2RlRmxvdyA/PyBhcHBTdGF0ZS5sb2NhbGl6YXRpb24uY3VycmVudEN1bHR1cmUuY3VsdHVyZU5hbWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0bG9jYWxpemF0aW9uUmVzb3VyY2UoY3VsdHVyZU5hbWUpLnBpcGUoXHJcbiAgICAgIG1hcChyZXN1bHQgPT4gKHsgLi4uYXBwU3RhdGUsIGxvY2FsaXphdGlvbjogeyAuLi5hcHBTdGF0ZS5sb2NhbGl6YXRpb24sIC4uLnJlc3VsdCB9IH0pKSxcclxuICAgICAgdGFwKCgpID0+ICh0aGlzLnVpQ3VsdHVyZUZyb21BdXRoQ29kZUZsb3cgPSB1bmRlZmluZWQpKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldGxvY2FsaXphdGlvblJlc291cmNlKGN1bHR1cmVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTG9jYWxpemF0aW9uU2VydmljZS5nZXQoe1xyXG4gICAgICBjdWx0dXJlTmFtZTogY3VsdHVyZU5hbWUsXHJcbiAgICAgIG9ubHlEeW5hbWljczogZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hBcHBTdGF0ZSgpIHtcclxuICAgIHRoaXMudXBkYXRlU3ViamVjdC5uZXh0KCk7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPblVwZGF0ZVN0cmVhbShzdGF0ZSA9PiBzdGF0ZSkucGlwZSh0YWtlKDEpKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hMb2NhbGl6YXRpb24obGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxudWxsPiB7XHJcbiAgICBpZiAodGhpcy5pbmNsdWRlTG9jYWxpemF0aW9uUmVzb3VyY2VzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hBcHBTdGF0ZSgpLnBpcGUobWFwKCgpID0+IG51bGwgYXMgYW55KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0bG9jYWxpemF0aW9uUmVzb3VyY2UobGFuZylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlc3VsdCA9PlxyXG4gICAgICAgICAgdGhpcy5zdG9yZS5wYXRjaCh7IGxvY2FsaXphdGlvbjogeyAuLi50aGlzLnN0b3JlLnN0YXRlLmxvY2FsaXphdGlvbiwgLi4ucmVzdWx0IH0gfSksXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAucGlwZShtYXAoKCkgPT4ge3JldHVybiBudWxsIGFzIGFueX0pKTtcclxuICB9XHJcblxyXG4gIGdldE9uZSQ8SyBleHRlbmRzIGtleW9mIEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0bz4oa2V5OiBLKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlW2tleV0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0T25lPEsgZXh0ZW5kcyBrZXlvZiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8+KGtleTogSykge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVba2V5XTtcclxuICB9XHJcblxyXG4gIGdldEFsbCQoKTogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8+IHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsKCk6IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0byB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZTtcclxuICB9XHJcblxyXG4gIGdldERlZXAkKGtleXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGtleXMgPSBzcGxpdEtleXMoa2V5cyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVcclxuICAgICAgLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChzdGF0ZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKGtleXMgYXMgc3RyaW5nW10pLnJlZHVjZSgoYWNjOiBhbnksIHZhbCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYWNjKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY1t2YWxdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfSwgc3RhdGUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVlcChrZXlzOiBzdHJpbmdbXSB8IHN0cmluZyk6IGFueSB7XHJcbiAgICBrZXlzID0gc3BsaXRLZXlzKGtleXMpO1xyXG5cclxuICAgIHJldHVybiAoa2V5cyBhcyBzdHJpbmdbXSkucmVkdWNlKChhY2M6IGFueSwgdmFsKSA9PiB7XHJcbiAgICAgIGlmIChhY2MpIHtcclxuICAgICAgICByZXR1cm4gYWNjW3ZhbF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9LCB0aGlzLnN0b3JlLnN0YXRlKTtcclxuICB9XHJcblxyXG4gIGdldEZlYXR1cmUoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLmZlYXR1cmVzPy52YWx1ZXM/LltrZXldO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZSQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUuZmVhdHVyZXM/LnZhbHVlcz8uW2tleV0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZXMoa2V5czogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IHsgZmVhdHVyZXMgfSA9IHRoaXMuc3RvcmUuc3RhdGU7XHJcbiAgICBpZiAoIWZlYXR1cmVzKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiAoeyAuLi5hY2MsIFtrZXldOiBmZWF0dXJlcy52YWx1ZXNba2V5XSB9KSwge30pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZXMkKGtleXM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgYW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKCh7IGZlYXR1cmVzIH0pID0+IHtcclxuICAgICAgaWYgKCFmZWF0dXJlcz8udmFsdWVzKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+ICh7IC4uLmFjYywgW2tleV06IGZlYXR1cmVzLnZhbHVlc1trZXldIH0pLCB7fSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGZWF0dXJlRW5hYmxlZChrZXk6IHN0cmluZywgZmVhdHVyZXM6IEFwcGxpY2F0aW9uRmVhdHVyZUNvbmZpZ3VyYXRpb25EdG8pIHtcclxuICAgIHJldHVybiBmZWF0dXJlcy52YWx1ZXNba2V5XSA9PT0gJ3RydWUnO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZUlzRW5hYmxlZChrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNGZWF0dXJlRW5hYmxlZChrZXksIHRoaXMuc3RvcmUuc3RhdGUuZmVhdHVyZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZUlzRW5hYmxlZCQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gdGhpcy5pc0ZlYXR1cmVFbmFibGVkKGtleSwgc3RhdGUuZmVhdHVyZXMpKTtcclxuICB9XHJcblxyXG4gIGdldFNldHRpbmcoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLnNldHRpbmc/LnZhbHVlcz8uW2tleV07XHJcbiAgfVxyXG5cclxuICBnZXRTZXR0aW5nJChrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VTdGF0ZShzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5nPy52YWx1ZXM/LltrZXldKTtcclxuICB9XHJcblxyXG4gIGdldFNldHRpbmdzKGtleXdvcmQ/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zdG9yZS5zdGF0ZS5zZXR0aW5nPy52YWx1ZXMgfHwge307XHJcblxyXG4gICAgaWYgKCFrZXl3b3JkKSByZXR1cm4gc2V0dGluZ3M7XHJcblxyXG4gICAgY29uc3Qga2V5c0ZvdW5kID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpLmZpbHRlcihrZXkgPT4ga2V5LmluZGV4T2Yoa2V5d29yZCkgPiAtMSk7XHJcblxyXG4gICAgcmV0dXJuIGtleXNGb3VuZC5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIGtleSkgPT4ge1xyXG4gICAgICAgIGFjY1trZXldID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICB9LFxyXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFNldHRpbmdzJChrZXl3b3JkPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZVxyXG4gICAgICAuc2xpY2VTdGF0ZShzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5nPy52YWx1ZXMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoc2V0dGluZ3MgPSB7fSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFrZXl3b3JkKSByZXR1cm4gc2V0dGluZ3M7XHJcblxyXG4gICAgICAgICAgY29uc3Qga2V5c0ZvdW5kID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpLmZpbHRlcihrZXkgPT4ga2V5LmluZGV4T2Yoa2V5d29yZCkgPiAtMSk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGtleXNGb3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChhY2MsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgIGFjY1trZXldID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGdldEdsb2JhbEZlYXR1cmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGUuZ2xvYmFsRmVhdHVyZXM7XHJcbiAgfVxyXG5cclxuICBnZXRHbG9iYWxGZWF0dXJlcyQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlLmdsb2JhbEZlYXR1cmVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNHbG9iYWxGZWF0dXJlRW5hYmxlZChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgZ2xvYmFsRmVhdHVyZXM6IEFwcGxpY2F0aW9uR2xvYmFsRmVhdHVyZUNvbmZpZ3VyYXRpb25EdG8sXHJcbiAgKSB7XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IGdsb2JhbEZlYXR1cmVzLmVuYWJsZWRGZWF0dXJlcyB8fCBbXTtcclxuICAgIHJldHVybiBmZWF0dXJlcy5zb21lKGYgPT4ga2V5ID09PSBmKTtcclxuICB9XHJcblxyXG4gIGdldEdsb2JhbEZlYXR1cmVJc0VuYWJsZWQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmlzR2xvYmFsRmVhdHVyZUVuYWJsZWQoa2V5LCB0aGlzLnN0b3JlLnN0YXRlLmdsb2JhbEZlYXR1cmVzKTtcclxuICB9XHJcblxyXG4gIGdldEdsb2JhbEZlYXR1cmVJc0VuYWJsZWQkKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHRoaXMuaXNHbG9iYWxGZWF0dXJlRW5hYmxlZChrZXksIHN0YXRlLmdsb2JhbEZlYXR1cmVzKSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzcGxpdEtleXMoa2V5czogc3RyaW5nW10gfCBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJykge1xyXG4gICAga2V5cyA9IGtleXMuc3BsaXQoJy4nKTtcclxuICB9XHJcblxyXG4gIGlmICghQXJyYXkuaXNBcnJheShrZXlzKSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhIGRvdCBzdHJpbmcgb3IgYW4gc3RyaW5nIGFycmF5LicpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGtleXM7XHJcbn1cclxuIl19","import { Injectable } from '@angular/core';\nimport { ConfigStateService } from './config-state.service';\nimport { map } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./config-state.service\";\nexport class PermissionCheckerService {\n configState;\n constructor(configState) {\n this.configState = configState;\n }\n isPolicyGranted(key, grantedPolicies) {\n if (!key)\n return true;\n const orRegexp = /\\|\\|/g;\n const andRegexp = /&&/g;\n // TODO: Allow combination of ANDs & ORs\n if (orRegexp.test(key)) {\n const keys = key.split('||').filter(Boolean);\n if (keys.length < 2)\n return false;\n return keys.some(k => this.getPolicy(k.trim(), grantedPolicies));\n }\n else if (andRegexp.test(key)) {\n const keys = key.split('&&').filter(Boolean);\n if (keys.length < 2)\n return false;\n return keys.every(k => this.getPolicy(k.trim(), grantedPolicies));\n }\n return this.getPolicy(key, grantedPolicies);\n }\n getGrantedPolicy$(key) {\n return this.getStream().pipe(map(grantedPolicies => this.isPolicyGranted(key, grantedPolicies)));\n }\n isGrantedAsync(permissionName) {\n if (!permissionName)\n return true;\n return this.getGrantedPolicy$(permissionName);\n }\n isGranted(permissionName) {\n if (!permissionName)\n return true;\n return this.getGrantedPolicy(permissionName);\n }\n getGrantedPolicy(key) {\n const policies = this.getSnapshot();\n return this.isPolicyGranted(key, policies);\n }\n getStream() {\n return this.configState.getAll$().pipe(map(this.mapToPolicies));\n }\n getSnapshot() {\n return this.mapToPolicies(this.configState.getAll());\n }\n mapToPolicies(applicationConfiguration) {\n return applicationConfiguration?.auth?.grantedPolicies || {};\n }\n getPolicy(key, grantedPolicies) {\n return grantedPolicies[key] || false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionCheckerService, deps: [{ token: i1.ConfigStateService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionCheckerService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionCheckerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: i1.ConfigStateService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1jaGVja2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9wZXJtaXNzaW9uLWNoZWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQU0zQixNQUFNLE9BQU8sd0JBQXdCO0lBRXZCO0lBRFosWUFDWSxXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFFekMsQ0FBQztJQUVVLGVBQWUsQ0FBQyxHQUF1QixFQUFFLGVBQXdDO1FBQzVGLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFdEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV4Qix3Q0FBd0M7UUFDeEMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0MsaUJBQWlCLENBQUMsR0FBVztRQUM3QixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQzFCLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQ25FLENBQUM7SUFDSixDQUFDO0lBQ0QsY0FBYyxDQUFDLGNBQTBCO1FBQ3JDLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNMLFNBQVMsQ0FBQyxjQUEwQjtRQUM5QixJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDSCxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ1UsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRVMsV0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFHUyxhQUFhLENBQUMsd0JBQXFEO1FBQzNFLE9BQU8sd0JBQXdCLEVBQUUsSUFBSSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVTLFNBQVMsQ0FBQyxHQUFXLEVBQUUsZUFBd0M7UUFDdkUsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3ZDLENBQUM7dUdBN0RVLHdCQUF3QjsyR0FBeEIsd0JBQXdCLGNBRnJCLE1BQU07OzJGQUVULHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Db25maWd1cmF0aW9uRHRvIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkNoZWNrZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2VcblxuXHQpIHt9XG5cbiAgICAgcHJvdGVjdGVkIGlzUG9saWN5R3JhbnRlZChrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgZ3JhbnRlZFBvbGljaWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikge1xuICAgIGlmICgha2V5KSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IG9yUmVnZXhwID0gL1xcfFxcfC9nO1xuICAgIGNvbnN0IGFuZFJlZ2V4cCA9IC8mJi9nO1xuXG4gICAgLy8gVE9ETzogQWxsb3cgY29tYmluYXRpb24gb2YgQU5EcyAmIE9Sc1xuICAgIGlmIChvclJlZ2V4cC50ZXN0KGtleSkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJ3x8JykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBrZXlzLnNvbWUoayA9PiB0aGlzLmdldFBvbGljeShrLnRyaW0oKSwgZ3JhbnRlZFBvbGljaWVzKSk7XG4gICAgfSBlbHNlIGlmIChhbmRSZWdleHAudGVzdChrZXkpKSB7XG4gICAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcmJicpLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgaWYgKGtleXMubGVuZ3RoIDwgMikgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4ga2V5cy5ldmVyeShrID0+IHRoaXMuZ2V0UG9saWN5KGsudHJpbSgpLCBncmFudGVkUG9saWNpZXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRQb2xpY3koa2V5LCBncmFudGVkUG9saWNpZXMpO1xuICB9XG4gICAgZ2V0R3JhbnRlZFBvbGljeSQoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJlYW0oKS5waXBlKFxuICAgICAgbWFwKGdyYW50ZWRQb2xpY2llcyA9PiB0aGlzLmlzUG9saWN5R3JhbnRlZChrZXksIGdyYW50ZWRQb2xpY2llcykpLFxuICAgICk7XG4gIH1cbiAgaXNHcmFudGVkQXN5bmMocGVybWlzc2lvbk5hbWU6IHN0cmluZ3xhbnkpe1xuICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEdyYW50ZWRQb2xpY3kkKHBlcm1pc3Npb25OYW1lKTtcbiAgICB9XG5pc0dyYW50ZWQocGVybWlzc2lvbk5hbWU6IHN0cmluZ3xhbnkpIDogYm9vbGVhbiB7XG4gICAgICBpZiAoIXBlcm1pc3Npb25OYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R3JhbnRlZFBvbGljeShwZXJtaXNzaW9uTmFtZSk7XG4gICAgfVxuICBnZXRHcmFudGVkUG9saWN5KGtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcG9saWNpZXMgPSB0aGlzLmdldFNuYXBzaG90KCk7XG4gICAgcmV0dXJuIHRoaXMuaXNQb2xpY3lHcmFudGVkKGtleSwgcG9saWNpZXMpO1xuICB9XG4gICBwcm90ZWN0ZWQgZ2V0U3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldEFsbCQoKS5waXBlKG1hcCh0aGlzLm1hcFRvUG9saWNpZXMpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTbmFwc2hvdCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBUb1BvbGljaWVzKHRoaXMuY29uZmlnU3RhdGUuZ2V0QWxsKCkpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgbWFwVG9Qb2xpY2llcyhhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb246IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0bykge1xuICAgIHJldHVybiBhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24/LmF1dGg/LmdyYW50ZWRQb2xpY2llcyB8fCB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQb2xpY3koa2V5OiBzdHJpbmcsIGdyYW50ZWRQb2xpY2llczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcbiAgICByZXR1cm4gZ3JhbnRlZFBvbGljaWVzW2tleV0gfHwgZmFsc2U7XG4gIH1cblxufVxuIl19","import { inject, Injectable } from '@angular/core';\nimport { Router, RouterStateSnapshot } from '@angular/router';\nimport { DEFAULT_REDIRECT_KEY } from '@elite.framework/ng.core/models';\nimport { isFunction, isPlainObject, transformStringToArray } from '@elite.framework/ng.core/utils';\nimport { PermissionCheckerService } from './permission-checker.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./permission-checker.service\";\nimport * as i2 from \"@angular/router\";\nexport const ngxPermissionsGuard = (route, state) => {\n const guard = inject(NgxPermissionsGuard);\n if (state instanceof RouterStateSnapshot) {\n return guard.hasPermissions(route, state);\n }\n return guard.hasPermissions(route);\n};\nexport class NgxPermissionsGuard {\n permissions;\n router;\n constructor(permissions, router) {\n this.permissions = permissions;\n this.router = router;\n }\n canActivate(route, state) {\n return this.hasPermissions(route, state);\n }\n canActivateChild(route, state) {\n return this.hasPermissions(route, state);\n }\n canLoad(route) {\n return this.hasPermissions(route);\n }\n canMatch(route) {\n return this.hasPermissions(route);\n }\n async hasPermissions(route, state) {\n const data = route.data?.['permissions'];\n const only = [];\n const except = [];\n if (data?.only) {\n if (isFunction(data.only)) {\n const result = data.only(route, state);\n only.push(...transformStringToArray(result));\n }\n else {\n only.push(...transformStringToArray(data.only));\n }\n }\n if (data?.except) {\n if (isFunction(data.except)) {\n const result = data.except(route, state);\n except.push(...transformStringToArray(result));\n }\n else {\n except.push(...transformStringToArray(data.except));\n }\n }\n const permissions = {\n only,\n except,\n redirectTo: data?.redirectTo\n };\n // --- rest of the guard logic ---\n // EXCEPT check\n if (permissions.except?.length) {\n for (const perm of permissions.except) {\n if (await this.permissions.isGranted(perm)) {\n this.handleRedirect(permissions, perm, route, state);\n return false;\n }\n }\n }\n // ONLY check\n if (permissions.only?.length) {\n for (const perm of permissions.only) {\n if (await this.permissions.isGrantedAsync(perm)) {\n return true;\n }\n }\n this.handleRedirect(permissions, permissions.only[0], route, state);\n return false;\n }\n return true;\n }\n handleRedirect(permissions, failedPermission, route, state) {\n const redirectTo = permissions.redirectTo;\n if (!redirectTo)\n return;\n // If redirectTo is a function\n const resolvedRedirect = isFunction(redirectTo)\n ? redirectTo(failedPermission, route, state)\n : redirectTo;\n if (typeof resolvedRedirect === 'string') {\n this.router.navigate([resolvedRedirect]); // wrap string in array\n }\n else if (Array.isArray(resolvedRedirect)) {\n this.router.navigate(resolvedRedirect); // array is fine\n }\n else if (isPlainObject(resolvedRedirect)) {\n // Object: check for failedPermission key first\n const target = resolvedRedirect[failedPermission] ?? resolvedRedirect[DEFAULT_REDIRECT_KEY];\n if (target) {\n if (typeof target === 'string') {\n this.router.navigate([target]);\n }\n else if (Array.isArray(target)) {\n this.router.navigate(target);\n }\n else if (isFunction(target)) {\n this.router.navigate([target(failedPermission, route, state)]);\n }\n }\n }\n else {\n console.warn('Unknown redirect type', resolvedRedirect);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, deps: [{ token: i1.PermissionCheckerService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.PermissionCheckerService }, { type: i2.Router }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3Blcm1pc3Npb25zLWd1YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQU1MLE1BQU0sRUFDTixtQkFBbUIsRUFFcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUl6QixPQUFPLEVBQUUsb0JBQW9CLEVBQXdFLE1BQU0saUNBQWlDLENBQUM7QUFDN0ksT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQVF4RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBb0QsQ0FDbEYsS0FBcUMsRUFDckMsS0FBeUMsRUFDekMsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxZQUFZLG1CQUFtQixFQUFFLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUdGLE1BQU0sT0FBTyxtQkFBbUI7SUFFcEI7SUFDQTtJQUZWLFlBQ1UsV0FBcUMsRUFDckMsTUFBYztRQURkLGdCQUFXLEdBQVgsV0FBVyxDQUEwQjtRQUNyQyxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ3JCLENBQUM7SUFFSixXQUFXLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUNuRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUE2QixFQUFFLEtBQTBCO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFSCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQXFDLEVBQUUsS0FBMkI7UUFDckYsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBeUMsQ0FBQztRQUNqRixNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTVCLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxVQUFVLENBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxVQUFVLENBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQXVCO1lBQ3RDLElBQUk7WUFDSixNQUFNO1lBQ04sVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVO1NBQzdCLENBQUM7UUFFRixrQ0FBa0M7UUFDbEMsZUFBZTtRQUNmLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMvQixLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3JELE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELGFBQWE7UUFDYixJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDN0IsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNoRCxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUdPLGNBQWMsQ0FDcEIsV0FBK0IsRUFDL0IsZ0JBQXdCLEVBQ3hCLEtBQXFDLEVBQ3JDLEtBQTJCO1FBRTNCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFFMUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRXhCLDhCQUE4QjtRQUM5QixNQUFNLGdCQUFnQixHQUNwQixVQUFVLENBQWUsVUFBVSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUM1QyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBRWpCLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtRQUNuRSxDQUFDO2FBQ0ksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQzFELENBQUM7YUFDSSxJQUFJLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDekMsK0NBQStDO1lBQy9DLE1BQU0sTUFBTSxHQUNWLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLElBQUksZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUUvRSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDakMsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQWUsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQ0ksQ0FBQztZQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQzt1R0FySFksbUJBQW1COzJHQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgQ2FuQWN0aXZhdGVDaGlsZEZuLFxyXG4gIENhbkFjdGl2YXRlRm4sXHJcbiAgQ2FuTWF0Y2hGbixcclxuICBSb3V0ZSxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICBVcmxTZWdtZW50XHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbmltcG9ydCB7IERFRkFVTFRfUkVESVJFQ1RfS0VZLCBFeGNlcHRGbiwgTmd4UGVybWlzc2lvbnNSb3V0ZXJEYXRhLCBPbmx5Rm4sIFJlZGlyZWN0VG8sIFJlZGlyZWN0VG9GbiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1BsYWluT2JqZWN0LCB0cmFuc2Zvcm1TdHJpbmdUb0FycmF5IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbkNoZWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLWNoZWNrZXIuc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5neFBlcm1pc3Npb25zRGF0YSB7XHJcbiAgb25seT86IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIGV4Y2VwdD86IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIHJlZGlyZWN0VG8/OiBSZWRpcmVjdFRvIHwgUmVkaXJlY3RUb0ZuIHwgYW55O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbmd4UGVybWlzc2lvbnNHdWFyZDogQ2FuQWN0aXZhdGVGbiB8IENhbkFjdGl2YXRlQ2hpbGRGbiB8IENhbk1hdGNoRm4gPSAoXHJcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBSb3V0ZSxcclxuICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCB8IFVybFNlZ21lbnRbXVxyXG4pID0+IHtcclxuICBjb25zdCBndWFyZCA9IGluamVjdChOZ3hQZXJtaXNzaW9uc0d1YXJkKTtcclxuICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcbiAgICByZXR1cm4gZ3VhcmQuaGFzUGVybWlzc2lvbnMocm91dGUsIHN0YXRlKTtcclxuICB9XHJcbiAgcmV0dXJuIGd1YXJkLmhhc1Blcm1pc3Npb25zKHJvdXRlKTtcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hQZXJtaXNzaW9uc0d1YXJkIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25DaGVja2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHt9XHJcblxyXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMocm91dGUsIHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGNhbkFjdGl2YXRlQ2hpbGQocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNQZXJtaXNzaW9ucyhyb3V0ZSwgc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgY2FuTG9hZChyb3V0ZTogUm91dGUpIHtcclxuICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb25zKHJvdXRlKTtcclxuICB9XHJcblxyXG4gIGNhbk1hdGNoKHJvdXRlOiBSb3V0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMocm91dGUpO1xyXG4gIH1cclxuXHJcbmFzeW5jIGhhc1Blcm1pc3Npb25zKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgUm91dGUsIHN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gIGNvbnN0IGRhdGEgPSByb3V0ZS5kYXRhPy5bJ3Blcm1pc3Npb25zJ10gYXMgTmd4UGVybWlzc2lvbnNSb3V0ZXJEYXRhIHwgdW5kZWZpbmVkO1xyXG4gIGNvbnN0IG9ubHk6IHN0cmluZ1tdID0gW107XHJcbiAgY29uc3QgZXhjZXB0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBpZiAoZGF0YT8ub25seSkge1xyXG4gICAgaWYgKGlzRnVuY3Rpb248T25seUZuPihkYXRhLm9ubHkpKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEub25seShyb3V0ZSwgc3RhdGUpO1xyXG4gICAgICBvbmx5LnB1c2goLi4udHJhbnNmb3JtU3RyaW5nVG9BcnJheShyZXN1bHQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9ubHkucHVzaCguLi50cmFuc2Zvcm1TdHJpbmdUb0FycmF5KGRhdGEub25seSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGRhdGE/LmV4Y2VwdCkge1xyXG4gICAgaWYgKGlzRnVuY3Rpb248RXhjZXB0Rm4+KGRhdGEuZXhjZXB0KSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBkYXRhLmV4Y2VwdChyb3V0ZSwgc3RhdGUpO1xyXG4gICAgICBleGNlcHQucHVzaCguLi50cmFuc2Zvcm1TdHJpbmdUb0FycmF5KHJlc3VsdCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhjZXB0LnB1c2goLi4udHJhbnNmb3JtU3RyaW5nVG9BcnJheShkYXRhLmV4Y2VwdCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgcGVybWlzc2lvbnM6IE5neFBlcm1pc3Npb25zRGF0YSA9IHtcclxuICAgIG9ubHksXHJcbiAgICBleGNlcHQsXHJcbiAgICByZWRpcmVjdFRvOiBkYXRhPy5yZWRpcmVjdFRvXHJcbiAgfTtcclxuXHJcbiAgLy8gLS0tIHJlc3Qgb2YgdGhlIGd1YXJkIGxvZ2ljIC0tLVxyXG4gIC8vIEVYQ0VQVCBjaGVja1xyXG4gIGlmIChwZXJtaXNzaW9ucy5leGNlcHQ/Lmxlbmd0aCkge1xyXG4gICAgZm9yIChjb25zdCBwZXJtIG9mIHBlcm1pc3Npb25zLmV4Y2VwdCkge1xyXG4gICAgICBpZiAoYXdhaXQgdGhpcy5wZXJtaXNzaW9ucy5pc0dyYW50ZWQocGVybSkpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVJlZGlyZWN0KHBlcm1pc3Npb25zLCBwZXJtLCByb3V0ZSwgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gT05MWSBjaGVja1xyXG4gIGlmIChwZXJtaXNzaW9ucy5vbmx5Py5sZW5ndGgpIHtcclxuICAgIGZvciAoY29uc3QgcGVybSBvZiBwZXJtaXNzaW9ucy5vbmx5KSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLnBlcm1pc3Npb25zLmlzR3JhbnRlZEFzeW5jKHBlcm0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaGFuZGxlUmVkaXJlY3QocGVybWlzc2lvbnMsIHBlcm1pc3Npb25zLm9ubHlbMF0sIHJvdXRlLCBzdGF0ZSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuXHJcbnByaXZhdGUgaGFuZGxlUmVkaXJlY3QoXHJcbiAgcGVybWlzc2lvbnM6IE5neFBlcm1pc3Npb25zRGF0YSxcclxuICBmYWlsZWRQZXJtaXNzaW9uOiBzdHJpbmcsXHJcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBSb3V0ZSxcclxuICBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3RcclxuKSB7XHJcbiAgY29uc3QgcmVkaXJlY3RUbyA9IHBlcm1pc3Npb25zLnJlZGlyZWN0VG87XHJcblxyXG4gIGlmICghcmVkaXJlY3RUbykgcmV0dXJuO1xyXG5cclxuICAvLyBJZiByZWRpcmVjdFRvIGlzIGEgZnVuY3Rpb25cclxuICBjb25zdCByZXNvbHZlZFJlZGlyZWN0ID1cclxuICAgIGlzRnVuY3Rpb248UmVkaXJlY3RUb0ZuPihyZWRpcmVjdFRvKVxyXG4gICAgICA/IHJlZGlyZWN0VG8oZmFpbGVkUGVybWlzc2lvbiwgcm91dGUsIHN0YXRlKVxyXG4gICAgICA6IHJlZGlyZWN0VG87XHJcblxyXG4gIGlmICh0eXBlb2YgcmVzb2x2ZWRSZWRpcmVjdCA9PT0gJ3N0cmluZycpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZXNvbHZlZFJlZGlyZWN0XSk7IC8vIHdyYXAgc3RyaW5nIGluIGFycmF5XHJcbiAgfVxyXG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzb2x2ZWRSZWRpcmVjdCkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHJlc29sdmVkUmVkaXJlY3QpOyAvLyBhcnJheSBpcyBmaW5lXHJcbiAgfVxyXG4gIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVzb2x2ZWRSZWRpcmVjdCkpIHtcclxuICAgIC8vIE9iamVjdDogY2hlY2sgZm9yIGZhaWxlZFBlcm1pc3Npb24ga2V5IGZpcnN0XHJcbiAgICBjb25zdCB0YXJnZXQgPVxyXG4gICAgICByZXNvbHZlZFJlZGlyZWN0W2ZhaWxlZFBlcm1pc3Npb25dID8/IHJlc29sdmVkUmVkaXJlY3RbREVGQVVMVF9SRURJUkVDVF9LRVldO1xyXG5cclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RhcmdldF0pO1xyXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHRhcmdldCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbjxSZWRpcmVjdFRvRm4+KHRhcmdldCkpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGFyZ2V0KGZhaWxlZFBlcm1pc3Npb24sIHJvdXRlLCBzdGF0ZSldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIGNvbnNvbGUud2FybignVW5rbm93biByZWRpcmVjdCB0eXBlJywgcmVzb2x2ZWRSZWRpcmVjdCk7XHJcbiAgfVxyXG59XHJcblxyXG59XHJcbiJdfQ==","// logger.interface.ts\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"OFF\"] = 4] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL2xvZ2dlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBTixJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIseUNBQVMsQ0FBQTtJQUNULHVDQUFRLENBQUE7SUFDUix1Q0FBUSxDQUFBO0lBQ1IseUNBQVMsQ0FBQTtJQUNULHFDQUFPLENBQUE7QUFDVCxDQUFDLEVBTlcsUUFBUSxLQUFSLFFBQVEsUUFNbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBsb2dnZXIuaW50ZXJmYWNlLnRzXHJcbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcclxuICBERUJVRyA9IDAsXHJcbiAgSU5GTyA9IDEsXHJcbiAgV0FSTiA9IDIsXHJcbiAgRVJST1IgPSAzLFxyXG4gIE9GRiA9IDRcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyU2VydmljZSB7XHJcbiAgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XHJcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcclxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xyXG4gIHNldExvZ0xldmVsKGxldmVsOiBMb2dMZXZlbCk6IHZvaWQ7XHJcbn1cclxuIl19","// logger.service.ts\nimport { Injectable, inject } from '@angular/core';\nimport { LogLevel } from './logger.interface';\nimport { EnvironmentService } from './environment.service';\nimport * as i0 from \"@angular/core\";\n// Remove the separate LoggerConfig interface since we're using EnvironmentConfig\n// and extend EnvironmentConfig to include logger-specific properties\nexport class LoggerService {\n level = LogLevel.DEBUG;\n enableConsole = true;\n prefix = '[App]';\n timestamp = true;\n environmentService = inject(EnvironmentService);\n environment = this.environmentService?.getEnvironment();\n constructor() {\n // Use environment configuration if provided\n if (this.environment) {\n this.configureFromEnvironment(this.environment);\n }\n // Fallback: In production, default to WARN level\n if (typeof window !== 'undefined' && window.location.hostname !== 'localhost') {\n this.level = LogLevel.WARN;\n this.enableConsole = false;\n }\n }\n configureFromEnvironment(env) {\n // Map string log levels from environment to LogLevel enum\n this.level = this.mapLogLevel(env.logLevel);\n // Use production flag to determine console logging\n this.enableConsole = !env.production;\n // Set prefix from environment if available\n this.prefix = `[${env['appName'] || 'App'}]`;\n // Enable timestamp in development, disable in production for performance\n this.timestamp = !env.production;\n }\n mapLogLevel(level) {\n switch (level) {\n case 'debug': return LogLevel.DEBUG;\n case 'info': return LogLevel.INFO;\n case 'warn': return LogLevel.WARN;\n case 'error': return LogLevel.ERROR;\n case 'off': return LogLevel.OFF;\n default: return LogLevel.WARN;\n }\n }\n debug(message, ...args) {\n if (this.shouldLog(LogLevel.DEBUG)) {\n this.log('DEBUG', message, args, 'color: blue');\n }\n }\n info(message, ...args) {\n if (this.shouldLog(LogLevel.INFO)) {\n this.log('INFO', message, args, 'color: green');\n }\n }\n warn(message, ...args) {\n if (this.shouldLog(LogLevel.WARN)) {\n this.log('WARN', message, args, 'color: orange');\n }\n }\n error(message, ...args) {\n if (this.shouldLog(LogLevel.ERROR)) {\n this.log('ERROR', message, args, 'color: red');\n // Send to external services only for errors in production\n if (this.environment?.production) {\n this.sendToExternalService('ERROR', message, args);\n }\n }\n }\n setLogLevel(level) {\n this.level = level;\n }\n shouldLog(level) {\n return level >= this.level && this.enableConsole;\n }\n log(level, message, args, style) {\n if (!this.enableConsole)\n return;\n const timestamp = this.timestamp ? new Date().toISOString() : '';\n const formattedPrefix = this.prefix ? `${this.prefix}` : '';\n const logMessage = `${timestamp} ${formattedPrefix} [${level}] ${message}`;\n if (args.length > 0) {\n console.log(`%c${logMessage}`, style, ...args);\n }\n else {\n console.log(`%c${logMessage}`, style);\n }\n }\n sendToExternalService(level, message, args) {\n // Integrate with external logging services from environment\n try {\n const sentryUrl = this.environment?.externalServices?.['sentry'];\n const logRocketUrl = this.environment?.externalServices?.['logRocket'];\n // Example: Send to configured external services\n if (sentryUrl) {\n // this.sendToSentry(level, message, args);\n }\n if (logRocketUrl) {\n // this.sendToLogRocket(level, message, args);\n }\n // Send to backend if apiUrl is available\n if (this.environment?.apis.default.url) {\n // this.http.post(`${this.environment.apiUrl}/logs`, {\n // level, message, args, timestamp: new Date()\n // }).subscribe();\n }\n }\n catch (error) {\n // Don't use this.error here to avoid infinite loops\n console.error('Failed to send log to external service:', error);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9sb2dnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBb0IsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBa0IsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRzNELGlGQUFpRjtBQUNqRixxRUFBcUU7QUFLckUsTUFBTSxPQUFPLGFBQWE7SUFDaEIsS0FBSyxHQUFhLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDakMsYUFBYSxHQUFZLElBQUksQ0FBQztJQUM5QixNQUFNLEdBQVcsT0FBTyxDQUFDO0lBQ3pCLFNBQVMsR0FBWSxJQUFJLENBQUM7SUFDMUIsa0JBQWtCLEdBQXNCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ25FLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLENBQUE7SUFFL0Q7UUFDRSw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsaURBQWlEO1FBQ2pELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzlFLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixD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QUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN2QyxzREFBc0Q7Z0JBQ3RELGdEQUFnRDtnQkFDaEQsa0JBQWtCO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLG9EQUFvRDtZQUNwRCxPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO3VHQTNIVSxhQUFhOzJHQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGxvZ2dlci5zZXJ2aWNlLnRzXHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJTG9nZ2VyU2VydmljZSwgTG9nTGV2ZWwgfSBmcm9tICcuL2xvZ2dlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuL2Vudmlyb25tZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5cclxuLy8gUmVtb3ZlIHRoZSBzZXBhcmF0ZSBMb2dnZXJDb25maWcgaW50ZXJmYWNlIHNpbmNlIHdlJ3JlIHVzaW5nIEVudmlyb25tZW50Q29uZmlnXHJcbi8vIGFuZCBleHRlbmQgRW52aXJvbm1lbnRDb25maWcgdG8gaW5jbHVkZSBsb2dnZXItc3BlY2lmaWMgcHJvcGVydGllc1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIElMb2dnZXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIGxldmVsOiBMb2dMZXZlbCA9IExvZ0xldmVsLkRFQlVHO1xyXG4gIHByaXZhdGUgZW5hYmxlQ29uc29sZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBwcmVmaXg6IHN0cmluZyA9ICdbQXBwXSc7XHJcbiAgcHJpdmF0ZSB0aW1lc3RhbXA6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOkVudmlyb25tZW50U2VydmljZSA9IGluamVjdChFbnZpcm9ubWVudFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSB0aGlzLmVudmlyb25tZW50U2VydmljZT8uZ2V0RW52aXJvbm1lbnQoKVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIC8vIFVzZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkXHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUZyb21FbnZpcm9ubWVudCh0aGlzLmVudmlyb25tZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGYWxsYmFjazogSW4gcHJvZHVjdGlvbiwgZGVmYXVsdCB0byBXQVJOIGxldmVsXHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSAnbG9jYWxob3N0Jykge1xyXG4gICAgICB0aGlzLmxldmVsID0gTG9nTGV2ZWwuV0FSTjtcclxuICAgICAgdGhpcy5lbmFibGVDb25zb2xlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUZyb21FbnZpcm9ubWVudChlbnY6IEVudmlyb25tZW50KTogdm9pZCB7XHJcbiAgICAvLyBNYXAgc3RyaW5nIGxvZyBsZXZlbHMgZnJvbSBlbnZpcm9ubWVudCB0byBMb2dMZXZlbCBlbnVtXHJcbiAgICB0aGlzLmxldmVsID0gdGhpcy5tYXBMb2dMZXZlbChlbnYubG9nTGV2ZWwpO1xyXG5cclxuICAgIC8vIFVzZSBwcm9kdWN0aW9uIGZsYWcgdG8gZGV0ZXJtaW5lIGNvbnNvbGUgbG9nZ2luZ1xyXG4gICAgdGhpcy5lbmFibGVDb25zb2xlID0gIWVudi5wcm9kdWN0aW9uO1xyXG5cclxuICAgIC8vIFNldCBwcmVmaXggZnJvbSBlbnZpcm9ubWVudCBpZiBhdmFpbGFibGVcclxuICAgIHRoaXMucHJlZml4ID0gYFske2VudlsnYXBwTmFtZSddIHx8ICdBcHAnfV1gO1xyXG5cclxuICAgIC8vIEVuYWJsZSB0aW1lc3RhbXAgaW4gZGV2ZWxvcG1lbnQsIGRpc2FibGUgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZm9ybWFuY2VcclxuICAgIHRoaXMudGltZXN0YW1wID0gIWVudi5wcm9kdWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXBMb2dMZXZlbChsZXZlbDogc3RyaW5nKTogTG9nTGV2ZWwge1xyXG4gICAgc3dpdGNoIChsZXZlbCkge1xyXG4gICAgICBjYXNlICdkZWJ1Zyc6IHJldHVybiBMb2dMZXZlbC5ERUJVRztcclxuICAgICAgY2FzZSAnaW5mbyc6IHJldHVybiBMb2dMZXZlbC5JTkZPO1xyXG4gICAgICBjYXNlICd3YXJuJzogcmV0dXJuIExvZ0xldmVsLldBUk47XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuIExvZ0xldmVsLkVSUk9SO1xyXG4gICAgICBjYXNlICdvZmYnOiByZXR1cm4gTG9nTGV2ZWwuT0ZGO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gTG9nTGV2ZWwuV0FSTjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5ERUJVRykpIHtcclxuICAgICAgdGhpcy5sb2coJ0RFQlVHJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiBibHVlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5JTkZPKSkge1xyXG4gICAgICB0aGlzLmxvZygnSU5GTycsIG1lc3NhZ2UsIGFyZ3MsICdjb2xvcjogZ3JlZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2hvdWxkTG9nKExvZ0xldmVsLldBUk4pKSB7XHJcbiAgICAgIHRoaXMubG9nKCdXQVJOJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiBvcmFuZ2UnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5FUlJPUikpIHtcclxuICAgICAgdGhpcy5sb2coJ0VSUk9SJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiByZWQnKTtcclxuXHJcbiAgICAgIC8vIFNlbmQgdG8gZXh0ZXJuYWwgc2VydmljZXMgb25seSBmb3IgZXJyb3JzIGluIHByb2R1Y3Rpb25cclxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LnByb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNlbmRUb0V4dGVybmFsU2VydmljZSgnRVJST1InLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TG9nTGV2ZWwobGV2ZWw6IExvZ0xldmVsKTogdm9pZCB7XHJcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3VsZExvZyhsZXZlbDogTG9nTGV2ZWwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsZXZlbCA+PSB0aGlzLmxldmVsICYmIHRoaXMuZW5hYmxlQ29uc29sZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9nKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgYXJnczogYW55W10sIHN0eWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbmFibGVDb25zb2xlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy50aW1lc3RhbXAgPyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgOiAnJztcclxuICAgIGNvbnN0IGZvcm1hdHRlZFByZWZpeCA9IHRoaXMucHJlZml4ID8gYCR7dGhpcy5wcmVmaXh9YCA6ICcnO1xyXG5cclxuICAgIGNvbnN0IGxvZ01lc3NhZ2UgPSBgJHt0aW1lc3RhbXB9ICR7Zm9ybWF0dGVkUHJlZml4fSBbJHtsZXZlbH1dICR7bWVzc2FnZX1gO1xyXG5cclxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2coYCVjJHtsb2dNZXNzYWdlfWAsIHN0eWxlLCAuLi5hcmdzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGAlYyR7bG9nTWVzc2FnZX1gLCBzdHlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRUb0V4dGVybmFsU2VydmljZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGFyZ3M6IGFueVtdKTogdm9pZCB7XHJcbiAgICAvLyBJbnRlZ3JhdGUgd2l0aCBleHRlcm5hbCBsb2dnaW5nIHNlcnZpY2VzIGZyb20gZW52aXJvbm1lbnRcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNlbnRyeVVybCA9IHRoaXMuZW52aXJvbm1lbnQ/LmV4dGVybmFsU2VydmljZXM/Llsnc2VudHJ5J107XHJcbiAgICAgIGNvbnN0IGxvZ1JvY2tldFVybCA9IHRoaXMuZW52aXJvbm1lbnQ/LmV4dGVybmFsU2VydmljZXM/LlsnbG9nUm9ja2V0J107XHJcblxyXG4gICAgICAvLyBFeGFtcGxlOiBTZW5kIHRvIGNvbmZpZ3VyZWQgZXh0ZXJuYWwgc2VydmljZXNcclxuICAgICAgaWYgKHNlbnRyeVVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuc2VuZFRvU2VudHJ5KGxldmVsLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGxvZ1JvY2tldFVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuc2VuZFRvTG9nUm9ja2V0KGxldmVsLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2VuZCB0byBiYWNrZW5kIGlmIGFwaVVybCBpcyBhdmFpbGFibGVcclxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LmFwaXMuZGVmYXVsdC51cmwpIHtcclxuICAgICAgICAvLyB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVVybH0vbG9nc2AsIHtcclxuICAgICAgICAvLyAgIGxldmVsLCBtZXNzYWdlLCBhcmdzLCB0aW1lc3RhbXA6IG5ldyBEYXRlKClcclxuICAgICAgICAvLyB9KS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy8gRG9uJ3QgdXNlIHRoaXMuZXJyb3IgaGVyZSB0byBhdm9pZCBpbmZpbml0ZSBsb29wc1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc2VuZCBsb2cgdG8gZXh0ZXJuYWwgc2VydmljZTonLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class IdParserService {\n /**\n * Extract IDs from a model based on comma-separated field names.\n * Example: \"id,biId\" => [model.id, model.biId]\n */\n parseIds(model, idField) {\n if (!idField)\n return null;\n const fields = idField.split(',').map(f => f.trim()).filter(Boolean);\n if (fields.length === 1) {\n return model[fields[0]];\n }\n return fields.map(f => model[f]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtcGFyc2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9pZC1wYXJzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sZUFBZTtJQUMxQjs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBVSxFQUFFLE9BQWU7UUFDbEMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7dUdBZlUsZUFBZTsyR0FBZixlQUFlLGNBREYsTUFBTTs7MkZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIElkUGFyc2VyU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCBJRHMgZnJvbSBhIG1vZGVsIGJhc2VkIG9uIGNvbW1hLXNlcGFyYXRlZCBmaWVsZCBuYW1lcy5cclxuICAgKiBFeGFtcGxlOiBcImlkLGJpSWRcIiA9PiBbbW9kZWwuaWQsIG1vZGVsLmJpSWRdXHJcbiAgICovXHJcbiAgcGFyc2VJZHMobW9kZWw6IGFueSwgaWRGaWVsZDogc3RyaW5nKTogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IGFueSB7XHJcbiAgICBpZiAoIWlkRmllbGQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGZpZWxkcyA9IGlkRmllbGQuc3BsaXQoJywnKS5tYXAoZiA9PiBmLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBtb2RlbFtmaWVsZHNbMF1dO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWVsZHMubWFwKGYgPT4gbW9kZWxbZl0pO1xyXG4gIH1cclxufVxyXG4iXX0=","export class QueryParser {\n static parse(queryString) {\n const params = {\n filters: [],\n orderBy: [],\n groupBy: [],\n select: [],\n aggregates: []\n };\n if (!queryString)\n return params;\n const queryParts = queryString.split('&');\n for (const part of queryParts) {\n if (part.startsWith('$filter=')) {\n this.parseFilter(part.substring('$filter='.length), params);\n }\n else if (part.startsWith('$orderby=')) {\n this.parseOrderBy(part.substring('$orderby='.length), params);\n }\n else if (part.startsWith('$groupby=')) {\n this.parseGroupBy(part.substring('$groupby='.length), params);\n }\n else if (part.startsWith('$select=')) {\n this.parseSelect(part.substring('$select='.length), params);\n }\n else if (part.startsWith('$aggregate=')) {\n this.parseAggregate(part.substring('$aggregate='.length), params);\n }\n else if (part.startsWith('$top=')) {\n params.top = Number(part.substring('$top='.length));\n }\n else if (part.startsWith('$skip=')) {\n params.skip = Number(part.substring('$skip='.length));\n }\n else if (part.startsWith('$expand=')) {\n params.expand = part.substring('$expand='.length).split(',').map(f => f.trim());\n }\n else if (part.startsWith('$count=')) {\n params.includeCount = part.substring('$count='.length).toLowerCase() === 'true';\n }\n }\n return params;\n }\n static toString(params) {\n const parts = [];\n if (params.filters?.length) {\n const filterStr = this.buildFilterString(params.filters);\n parts.push(`$filter=${encodeURIComponent(filterStr)}`);\n }\n if (params.orderBy?.length) {\n const orderByStr = params.orderBy.map(o => `${o.field} ${o.direction}`).join(',');\n parts.push(`$orderby=${encodeURIComponent(orderByStr)}`);\n }\n if (params.groupBy?.length) {\n const groupByStr = this.buildGroupByString(params.groupBy);\n parts.push(`$groupby=${encodeURIComponent(groupByStr)}`);\n }\n if (params.select?.length) {\n const selectStr = this.buildSelectString(params.select);\n parts.push(`$select=${encodeURIComponent(selectStr)}`);\n }\n if (params.aggregates?.length) {\n const aggregateStr = this.buildAggregateString(params.aggregates);\n parts.push(`$aggregate=${encodeURIComponent(aggregateStr)}`);\n }\n if (params.top !== undefined) {\n parts.push(`$top=${params.top}`);\n }\n if (params.skip !== undefined) {\n parts.push(`$skip=${params.skip}`);\n }\n if (params.expand?.length) {\n parts.push(`$expand=${encodeURIComponent(params.expand.join(','))}`);\n }\n if (params.includeCount !== undefined) {\n parts.push(`$count=${params.includeCount}`);\n }\n return parts.join('&');\n }\n static buildFilterString(filters) {\n return filters.map((group, index) => {\n const groupStr = group.conditions\n .map(condition => {\n let val = condition.value;\n if (typeof val === 'string') {\n val = `'${val.replace(/'/g, \"''\")}'`;\n }\n else if (typeof val === 'boolean') {\n val = val ? 'true' : 'false';\n }\n return `${condition.field} ${condition.operator} ${val}`;\n })\n .join(` ${group.logicalOperator} `);\n // For the first group, no groupLogicalOperator is needed\n if (index === 0) {\n return group.conditions.length > 1 ? `(${groupStr})` : groupStr;\n }\n else {\n const joinOp = group.groupLogicalOperator || 'and';\n return group.conditions.length > 1 ? `${joinOp} (${groupStr})` : `${joinOp} ${groupStr}`;\n }\n }).join(' ');\n }\n static buildGroupByString(groupBy) {\n return groupBy\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .map(group => {\n let groupStr = group.propertyName;\n // Add display name if provided\n if (group.displayName) {\n groupStr += ` as ${group.displayName}`;\n }\n // Add metadata for UI\n const metadata = [];\n if (group.showTotal !== undefined) {\n metadata.push(`showTotal:${group.showTotal}`);\n }\n if (group.totalBackground) {\n metadata.push(`totalBg:${group.totalBackground}`);\n }\n if (group.groupHeaderBackground) {\n metadata.push(`headerBg:${group.groupHeaderBackground}`);\n }\n if (metadata.length > 0) {\n groupStr += `(${metadata.join(';')})`;\n }\n return groupStr;\n })\n .join(',');\n }\n static buildSelectString(select) {\n return select\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .map(item => {\n let selectStr = item.propertyName;\n // Add display name if provided\n if (item.displayName) {\n selectStr += ` as ${item.displayName}`;\n }\n // Add aggregate function if provided\n if (item.aggregateFunction) {\n selectStr += ` with ${item.aggregateFunction}`;\n }\n // Add visibility metadata\n const metadata = [];\n if (item.isVisible !== undefined) {\n metadata.push(`visible:${item.isVisible}`);\n }\n if (metadata.length > 0) {\n selectStr += `(${metadata.join(';')})`;\n }\n return selectStr;\n })\n .join(',');\n }\n static buildAggregateString(aggregates) {\n return aggregates\n .map(agg => {\n let aggStr = `${agg.aggregateFunction}(${agg.propertyName})`;\n if (agg.alias) {\n aggStr += ` as ${agg.alias}`;\n }\n return aggStr;\n })\n .join(',');\n }\n static parseFilter(filterString, params) {\n const decodedString = decodeURIComponent(filterString);\n const groups = [];\n // Split by top-level AND/OR operators\n const topLevelPattern = /(?:^|\\s)(and|or)\\s+(?=(?:[^()]*\\([^()]*\\))*[^()]*$)/gi;\n const segments = [];\n let lastIndex = 0;\n let match;\n while ((match = topLevelPattern.exec(decodedString)) !== null) {\n const operator = match[1];\n const segment = decodedString.substring(lastIndex, match.index).trim();\n if (segment) {\n segments.push({ condition: segment, operator });\n }\n lastIndex = match.index + match[0].length;\n }\n // Add the last segment\n const lastSegment = decodedString.substring(lastIndex).trim();\n if (lastSegment) {\n segments.push({ condition: lastSegment, operator: undefined });\n }\n // Parse each segment\n segments.forEach((segment, index) => {\n let conditions = [];\n // Check if it's a group with parentheses\n if (segment.condition.startsWith('(') && segment.condition.endsWith(')')) {\n const innerCondition = segment.condition.slice(1, -1).trim();\n conditions = this.parseConditions(innerCondition);\n }\n else {\n // Individual condition\n conditions = this.parseConditions(segment.condition);\n }\n if (conditions.length > 0) {\n const group = {\n logicalOperator: 'and',\n conditions: conditions\n };\n // For groups after the first, set the groupLogicalOperator\n if (index > 0) {\n group.groupLogicalOperator = segment.operator?.toLowerCase() || 'and';\n }\n // Detect the logical operator used within the group\n if (conditions.length === 1 && segment.condition.includes(' or ')) {\n group.logicalOperator = 'or';\n }\n else if (conditions.length > 1) {\n group.logicalOperator = segment.condition.toLowerCase().includes(' or ') ? 'or' : 'and';\n }\n groups.push(group);\n }\n });\n params.filters = groups;\n }\n static parseConditions(conditionString) {\n const conditions = [];\n // Enhanced pattern to handle more operators and complex values\n const pattern = /(\\w+(?:\\.\\w+)*)\\s+(eq|ne|gt|ge|lt|le|contains|startswith|endswith|in|notin)\\s+('[^']*'|\\[[^\\]]*\\]|\\d+|true|false|null)/gi;\n let match;\n while ((match = pattern.exec(conditionString)) !== null) {\n const [, field, operator, rawValue] = match;\n let value = rawValue.trim();\n if (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\")) {\n value = rawValue.slice(1, -1).replace(/''/g, \"'\");\n }\n else if (rawValue.startsWith('[') && rawValue.endsWith(']')) {\n // Handle array values for IN/NOT IN operators\n value = rawValue.slice(1, -1).split(',').map(v => {\n const trimmed = v.trim().replace(/^'|'$/g, '');\n return isNaN(Number(trimmed)) ? trimmed : Number(trimmed);\n });\n }\n else if (!isNaN(Number(rawValue))) {\n value = Number(rawValue);\n }\n else if (rawValue.toLowerCase() === 'true') {\n value = true;\n }\n else if (rawValue.toLowerCase() === 'false') {\n value = false;\n }\n else if (rawValue.toLowerCase() === 'null') {\n value = null;\n }\n conditions.push({\n field: field.trim(),\n operator: operator.trim().toLowerCase(),\n value\n });\n }\n return conditions;\n }\n static parseOrderBy(orderByString, params) {\n const decodedString = decodeURIComponent(orderByString);\n const clauses = decodedString.split(',');\n for (const clause of clauses) {\n const parts = clause.trim().split(/\\s+/);\n const field = parts[0];\n const direction = parts[1]?.toLowerCase() || 'asc';\n params.orderBy?.push({\n field,\n direction\n });\n }\n }\n static parseGroupBy(groupByString, params) {\n const decodedString = decodeURIComponent(groupByString);\n const groups = decodedString.split(',');\n params.groupBy = groups.map((groupStr, index) => {\n const group = {\n propertyName: '',\n order: index\n };\n // Check for metadata in parentheses\n const metadataMatch = groupStr.match(/^(.*?)\\((.*)\\)$/);\n let baseStr = groupStr;\n let metadataStr = '';\n if (metadataMatch) {\n baseStr = metadataMatch[1];\n metadataStr = metadataMatch[2];\n }\n // Check for display name alias\n const aliasMatch = baseStr.match(/^(.*?)\\s+as\\s+(.*)$/);\n if (aliasMatch) {\n group.propertyName = aliasMatch[1].trim();\n group.displayName = aliasMatch[2].trim();\n }\n else {\n group.propertyName = baseStr.trim();\n }\n // Parse metadata\n if (metadataStr) {\n const metadataParts = metadataStr.split(';');\n metadataParts.forEach(part => {\n const [key, value] = part.split(':');\n switch (key) {\n case 'showTotal':\n group.showTotal = value.toLowerCase() === 'true';\n break;\n case 'totalBg':\n group.totalBackground = value;\n break;\n case 'headerBg':\n group.groupHeaderBackground = value;\n break;\n }\n });\n }\n return group;\n });\n }\n static parseSelect(selectString, params) {\n const decodedString = decodeURIComponent(selectString);\n const items = decodedString.split(',');\n params.select = items.map((itemStr, index) => {\n const item = {\n propertyName: '',\n isVisible: true,\n order: index\n };\n // Check for metadata in parentheses\n const metadataMatch = itemStr.match(/^(.*?)\\((.*)\\)$/);\n let baseStr = itemStr;\n let metadataStr = '';\n if (metadataMatch) {\n baseStr = metadataMatch[1];\n metadataStr = metadataMatch[2];\n }\n // Check for display name alias and aggregate function\n const aliasMatch = baseStr.match(/^(.*?)(?:\\s+as\\s+(.*?))?(?:\\s+with\\s+(\\w+))?$/);\n if (aliasMatch) {\n item.propertyName = aliasMatch[1].trim();\n if (aliasMatch[2]) {\n item.displayName = aliasMatch[2].trim();\n }\n if (aliasMatch[3]) {\n item.aggregateFunction = aliasMatch[3].trim();\n }\n }\n else {\n item.propertyName = baseStr.trim();\n }\n // Parse metadata\n if (metadataStr) {\n const metadataParts = metadataStr.split(';');\n metadataParts.forEach(part => {\n const [key, value] = part.split(':');\n if (key === 'visible') {\n item.isVisible = value.toLowerCase() === 'true';\n }\n });\n }\n return item;\n });\n }\n static parseAggregate(aggregateString, params) {\n const decodedString = decodeURIComponent(aggregateString);\n const aggregates = decodedString.split(',');\n params.aggregates = aggregates.map(aggStr => {\n const agg = {\n propertyName: '',\n aggregateFunction: ''\n };\n // Match pattern: function(property) as alias\n const match = aggStr.match(/^(\\w+)\\((\\w+)\\)(?:\\s+as\\s+(\\w+))?$/);\n if (match) {\n agg.aggregateFunction = match[1];\n agg.propertyName = match[2];\n if (match[3]) {\n agg.alias = match[3];\n }\n }\n return agg;\n });\n }\n // Helper method to convert QueryParameters to ODataQueryParameters (C# equivalent)\n static toODataQueryParameters(params) {\n return {\n Filters: params.filters.map(group => ({\n LogicalOperator: group.logicalOperator,\n GroupLogicalOperator: group.groupLogicalOperator,\n Conditions: group.conditions.map(cond => ({\n Field: cond.field,\n Operator: cond.operator,\n Value: cond.value\n }))\n })),\n OrderBy: params.orderBy?.map(order => ({\n Field: order.field,\n Direction: order.direction\n })) || [],\n GroupBy: params.groupBy?.map(group => ({\n PropertyName: group.propertyName,\n DisplayName: group.displayName,\n ShowTotal: group.showTotal ?? true,\n TotalBackground: group.totalBackground,\n GroupHeaderBackground: group.groupHeaderBackground,\n Order: group.order\n })) || [],\n Select: params.select?.map(sel => ({\n PropertyName: sel.propertyName,\n DisplayName: sel.displayName,\n AggregateFunction: sel.aggregateFunction,\n IsVisible: sel.isVisible ?? true,\n Order: sel.order\n })) || [],\n Aggregates: params.aggregates?.map(agg => ({\n PropertyName: agg.propertyName,\n AggregateFunction: agg.aggregateFunction,\n Alias: agg.alias\n })) || [],\n Top: params.top,\n Skip: params.skip,\n Expand: params.expand,\n IncludeCount: params.includeCount\n };\n }\n // Helper method to create query parameters from UI model\n static fromUIModel(model) {\n const params = {\n filters: model.advancedFilters || [],\n orderBy: model.sorting || [],\n groupBy: model.grouping || [],\n select: model.columns || [],\n aggregates: model.aggregates || [],\n top: model.pagination?.top,\n skip: model.pagination?.skip,\n expand: model.expand,\n includeCount: model.pagination?.includeCount\n };\n return params;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcXVlcnktcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStDQSxNQUFNLE9BQU8sV0FBVztJQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQW1CO1FBQzlCLE1BQU0sTUFBTSxHQUFvQjtZQUM5QixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLEVBQUUsRUFBRTtZQUNWLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFFaEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEUsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNoRSxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDcEUsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO1lBQ2xGLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBdUI7UUFDckMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEYsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0QsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEUsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBc0I7UUFDckQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVO2lCQUM5QixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxHQUFHLEdBQThCLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBRXJELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZDLENBQUM7cUJBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDcEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQy9CLENBQUM7Z0JBRUQsT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUMzRCxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7WUFFdEMseURBQXlEO1lBQ3pELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoQixPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2xFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsb0JBQW9CLElBQUksS0FBSyxDQUFDO2dCQUNuRCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNGLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQXlCO1FBQ3pELE9BQU8sT0FBTzthQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDL0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUVsQywrQkFBK0I7WUFDL0IsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLFFBQVEsSUFBSSxPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1lBRUQsc0JBQXNCO1lBQ3RCLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDaEMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUVELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsUUFBUSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ3hDLENBQUM7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQXNCO1FBQ3JELE9BQU8sTUFBTTthQUNWLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDL0MsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1YsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUVsQywrQkFBK0I7WUFDL0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLFNBQVMsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1lBRUQscUNBQXFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLFNBQVMsSUFBSSxTQUFTLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pELENBQUM7WUFFRCwwQkFBMEI7WUFDMUIsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLFNBQVMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVPLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxVQUE2QjtRQUMvRCxPQUFPLFVBQVU7YUFDZCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVCxJQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUM7WUFFN0QsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFvQixFQUFFLE1BQXVCO1FBQ3RFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUM7UUFFakMsc0NBQXNDO1FBQ3RDLE1BQU0sZUFBZSxHQUFHLHVEQUF1RCxDQUFDO1FBQ2hGLE1BQU0sUUFBUSxHQUErQyxFQUFFLENBQUM7UUFFaEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksS0FBNkIsQ0FBQztRQUVsQyxPQUFPLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM5RCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXZFLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBRUQsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxDQUFDO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztZQUV2Qyx5Q0FBeUM7WUFDekMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0QsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHVCQUF1QjtnQkFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sS0FBSyxHQUFnQjtvQkFDekIsZUFBZSxFQUFFLEtBQUs7b0JBQ3RCLFVBQVUsRUFBRSxVQUFVO2lCQUN2QixDQUFDO2dCQUVGLDJEQUEyRDtnQkFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2QsS0FBSyxDQUFDLG9CQUFvQixHQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFtQixJQUFJLEtBQUssQ0FBQztnQkFDMUYsQ0FBQztnQkFFRCxvREFBb0Q7Z0JBQ3BELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDbEUsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNqQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDMUYsQ0FBQztnQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFTyxNQUFNLENBQUMsZUFBZSxDQUFDLGVBQXVCO1FBQ3BELE1BQU0sVUFBVSxHQUFzQixFQUFFLENBQUM7UUFFekMsK0RBQStEO1FBQy9ELE1BQU0sT0FBTyxHQUFHLDBIQUEwSCxDQUFDO1FBQzNJLElBQUksS0FBNkIsQ0FBQztRQUVsQyxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUU1QyxJQUFJLEtBQUssR0FBUSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFakMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlELDhDQUE4QztnQkFDOUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDL0MsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQy9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM3QyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2YsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDOUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNoQixDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM3QyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2YsQ0FBQztZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ25CLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUN2QyxLQUFLO2FBQ04sQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQXFCLEVBQUUsTUFBdUI7UUFDeEUsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sU0FBUyxHQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQXFCLElBQUksS0FBSyxDQUFDO1lBRXZFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO2dCQUNuQixLQUFLO2dCQUNMLFNBQVM7YUFDVixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZLENBQUMsYUFBcUIsRUFBRSxNQUF1QjtRQUN4RSxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBbUI7Z0JBQzVCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUM7WUFFRixvQ0FBb0M7WUFDcEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3hELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQztZQUN2QixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFFckIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBRUQsK0JBQStCO1lBQy9CLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN4RCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLEtBQUssQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMxQyxLQUFLLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUVELGlCQUFpQjtZQUNqQixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMzQixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JDLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQ1osS0FBSyxXQUFXOzRCQUNkLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQzs0QkFDakQsTUFBTTt3QkFDUixLQUFLLFNBQVM7NEJBQ1osS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7NEJBQzlCLE1BQU07d0JBQ1IsS0FBSyxVQUFVOzRCQUNiLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7NEJBQ3BDLE1BQU07b0JBQ1YsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBb0IsRUFBRSxNQUF1QjtRQUN0RSxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBaUI7Z0JBQ3pCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixTQUFTLEVBQUUsSUFBSTtnQkFDZixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUM7WUFFRixvQ0FBb0M7WUFDcEMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN0QixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFFckIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBRUQsc0RBQXNEO1lBQ3RELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNsRixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLENBQUM7WUFFRCxpQkFBaUI7WUFDakIsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDM0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO29CQUNsRCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUF1QixFQUFFLE1BQXVCO1FBQzVFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFDLE1BQU0sR0FBRyxHQUFvQjtnQkFDM0IsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLGlCQUFpQixFQUFFLEVBQUU7YUFDdEIsQ0FBQztZQUVGLDZDQUE2QztZQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDakUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixHQUFHLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxHQUFHLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDYixHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1GQUFtRjtJQUNuRixNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBdUI7UUFDbkQsT0FBTztZQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtnQkFDdEMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtnQkFDaEQsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDeEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7YUFDM0IsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtnQkFDaEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJO2dCQUNsQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7Z0JBQ3RDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQ2xELEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzthQUNuQixDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDakMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO2dCQUM5QixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7Z0JBQzVCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUI7Z0JBQ3hDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUk7Z0JBQ2hDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSzthQUNqQixDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ1QsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO2dCQUM5QixpQkFBaUIsRUFBRSxHQUFHLENBQUMsaUJBQWlCO2dCQUN4QyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7YUFDakIsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNULEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQseURBQXlEO0lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBVTtRQUMzQixNQUFNLE1BQU0sR0FBb0I7WUFDOUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxlQUFlLElBQUksRUFBRTtZQUNwQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDN0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRTtZQUMzQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ2xDLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUc7WUFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSTtZQUM1QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsWUFBWTtTQUM3QyxDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb24ge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwIHtcclxuICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnIHwgJ29yJztcclxuICBncm91cExvZ2ljYWxPcGVyYXRvcj86ICdhbmQnIHwgJ29yJztcclxuICBjb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cGluZ0NvbmZpZyB7XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgc2hvd1RvdGFsPzogYm9vbGVhbjtcclxuICB0b3RhbEJhY2tncm91bmQ/OiBzdHJpbmc7XHJcbiAgZ3JvdXBIZWFkZXJCYWNrZ3JvdW5kPzogc3RyaW5nO1xyXG4gIG9yZGVyPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdENvbmZpZyB7XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgYWdncmVnYXRlRnVuY3Rpb24/OiBzdHJpbmc7XHJcbiAgaXNWaXNpYmxlPzogYm9vbGVhbjtcclxuICBvcmRlcj86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVDb25maWcge1xyXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xyXG4gIGFnZ3JlZ2F0ZUZ1bmN0aW9uOiBzdHJpbmc7XHJcbiAgYWxpYXM/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlQYXJhbWV0ZXJzIHtcclxuICBmaWx0ZXJzOiBGaWx0ZXJHcm91cFtdO1xyXG4gIG9yZGVyQnk/OiB7IGZpZWxkOiBzdHJpbmc7IGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfVtdO1xyXG4gIGdyb3VwQnk/OiBHcm91cGluZ0NvbmZpZ1tdO1xyXG4gIHNlbGVjdD86IFNlbGVjdENvbmZpZ1tdO1xyXG4gIGFnZ3JlZ2F0ZXM/OiBBZ2dyZWdhdGVDb25maWdbXTtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgc2tpcD86IG51bWJlcjtcclxuICBleHBhbmQ/OiBzdHJpbmdbXTtcclxuICBpbmNsdWRlQ291bnQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xyXG4gIHN0YXRpYyBwYXJzZShxdWVyeVN0cmluZzogc3RyaW5nKTogUXVlcnlQYXJhbWV0ZXJzIHtcclxuICAgIGNvbnN0IHBhcmFtczogUXVlcnlQYXJhbWV0ZXJzID0ge1xyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgb3JkZXJCeTogW10sXHJcbiAgICAgIGdyb3VwQnk6IFtdLFxyXG4gICAgICBzZWxlY3Q6IFtdLFxyXG4gICAgICBhZ2dyZWdhdGVzOiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gcGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5UGFydHMgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpO1xyXG5cclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBxdWVyeVBhcnRzKSB7XHJcbiAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRmaWx0ZXI9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRmlsdGVyKHBhcnQuc3Vic3RyaW5nKCckZmlsdGVyPScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRvcmRlcmJ5PScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZU9yZGVyQnkocGFydC5zdWJzdHJpbmcoJyRvcmRlcmJ5PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRncm91cGJ5PScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUdyb3VwQnkocGFydC5zdWJzdHJpbmcoJyRncm91cGJ5PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRzZWxlY3Q9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlU2VsZWN0KHBhcnQuc3Vic3RyaW5nKCckc2VsZWN0PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRhZ2dyZWdhdGU9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlQWdncmVnYXRlKHBhcnQuc3Vic3RyaW5nKCckYWdncmVnYXRlPScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyR0b3A9JykpIHtcclxuICAgICAgICBwYXJhbXMudG9wID0gTnVtYmVyKHBhcnQuc3Vic3RyaW5nKCckdG9wPScubGVuZ3RoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydC5zdGFydHNXaXRoKCckc2tpcD0nKSkge1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gTnVtYmVyKHBhcnQuc3Vic3RyaW5nKCckc2tpcD0nLmxlbmd0aCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnQuc3RhcnRzV2l0aCgnJGV4cGFuZD0nKSkge1xyXG4gICAgICAgIHBhcmFtcy5leHBhbmQgPSBwYXJ0LnN1YnN0cmluZygnJGV4cGFuZD0nLmxlbmd0aCkuc3BsaXQoJywnKS5tYXAoZiA9PiBmLnRyaW0oKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydC5zdGFydHNXaXRoKCckY291bnQ9JykpIHtcclxuICAgICAgICBwYXJhbXMuaW5jbHVkZUNvdW50ID0gcGFydC5zdWJzdHJpbmcoJyRjb3VudD0nLmxlbmd0aCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0b1N0cmluZyhwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAocGFyYW1zLmZpbHRlcnM/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBmaWx0ZXJTdHIgPSB0aGlzLmJ1aWxkRmlsdGVyU3RyaW5nKHBhcmFtcy5maWx0ZXJzKTtcclxuICAgICAgcGFydHMucHVzaChgJGZpbHRlcj0ke2VuY29kZVVSSUNvbXBvbmVudChmaWx0ZXJTdHIpfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMub3JkZXJCeT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBwYXJhbXMub3JkZXJCeS5tYXAobyA9PiBgJHtvLmZpZWxkfSAke28uZGlyZWN0aW9ufWApLmpvaW4oJywnKTtcclxuICAgICAgcGFydHMucHVzaChgJG9yZGVyYnk9JHtlbmNvZGVVUklDb21wb25lbnQob3JkZXJCeVN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5ncm91cEJ5Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZ3JvdXBCeVN0ciA9IHRoaXMuYnVpbGRHcm91cEJ5U3RyaW5nKHBhcmFtcy5ncm91cEJ5KTtcclxuICAgICAgcGFydHMucHVzaChgJGdyb3VwYnk9JHtlbmNvZGVVUklDb21wb25lbnQoZ3JvdXBCeVN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5zZWxlY3Q/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RTdHIgPSB0aGlzLmJ1aWxkU2VsZWN0U3RyaW5nKHBhcmFtcy5zZWxlY3QpO1xyXG4gICAgICBwYXJ0cy5wdXNoKGAkc2VsZWN0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdFN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5hZ2dyZWdhdGVzPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgYWdncmVnYXRlU3RyID0gdGhpcy5idWlsZEFnZ3JlZ2F0ZVN0cmluZyhwYXJhbXMuYWdncmVnYXRlcyk7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRhZ2dyZWdhdGU9JHtlbmNvZGVVUklDb21wb25lbnQoYWdncmVnYXRlU3RyKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zLnRvcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCR0b3A9JHtwYXJhbXMudG9wfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMuc2tpcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRza2lwPSR7cGFyYW1zLnNraXB9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5leHBhbmQ/Lmxlbmd0aCkge1xyXG4gICAgICBwYXJ0cy5wdXNoKGAkZXhwYW5kPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5leHBhbmQuam9pbignLCcpKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zLmluY2x1ZGVDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRjb3VudD0ke3BhcmFtcy5pbmNsdWRlQ291bnR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyYnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkRmlsdGVyU3RyaW5nKGZpbHRlcnM6IEZpbHRlckdyb3VwW10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGZpbHRlcnMubWFwKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXBTdHIgPSBncm91cC5jb25kaXRpb25zXHJcbiAgICAgICAgLm1hcChjb25kaXRpb24gPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbDogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiA9IGNvbmRpdGlvbi52YWx1ZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsID0gYCcke3ZhbC5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwgPyAndHJ1ZScgOiAnZmFsc2UnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBgJHtjb25kaXRpb24uZmllbGR9ICR7Y29uZGl0aW9uLm9wZXJhdG9yfSAke3ZhbH1gO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmpvaW4oYCAke2dyb3VwLmxvZ2ljYWxPcGVyYXRvcn0gYCk7XHJcblxyXG4gICAgICAvLyBGb3IgdGhlIGZpcnN0IGdyb3VwLCBubyBncm91cExvZ2ljYWxPcGVyYXRvciBpcyBuZWVkZWRcclxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwLmNvbmRpdGlvbnMubGVuZ3RoID4gMSA/IGAoJHtncm91cFN0cn0pYCA6IGdyb3VwU3RyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGpvaW5PcCA9IGdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yIHx8ICdhbmQnO1xyXG4gICAgICAgIHJldHVybiBncm91cC5jb25kaXRpb25zLmxlbmd0aCA+IDEgPyBgJHtqb2luT3B9ICgke2dyb3VwU3RyfSlgIDogYCR7am9pbk9wfSAke2dyb3VwU3RyfWA7XHJcbiAgICAgIH1cclxuICAgIH0pLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkR3JvdXBCeVN0cmluZyhncm91cEJ5OiBHcm91cGluZ0NvbmZpZ1tdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBncm91cEJ5XHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciB8fCAwKSAtIChiLm9yZGVyIHx8IDApKVxyXG4gICAgICAubWFwKGdyb3VwID0+IHtcclxuICAgICAgICBsZXQgZ3JvdXBTdHIgPSBncm91cC5wcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgICAgIC8vIEFkZCBkaXNwbGF5IG5hbWUgaWYgcHJvdmlkZWRcclxuICAgICAgICBpZiAoZ3JvdXAuZGlzcGxheU5hbWUpIHtcclxuICAgICAgICAgIGdyb3VwU3RyICs9IGAgYXMgJHtncm91cC5kaXNwbGF5TmFtZX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWRkIG1ldGFkYXRhIGZvciBVSVxyXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChncm91cC5zaG93VG90YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgbWV0YWRhdGEucHVzaChgc2hvd1RvdGFsOiR7Z3JvdXAuc2hvd1RvdGFsfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZ3JvdXAudG90YWxCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICBtZXRhZGF0YS5wdXNoKGB0b3RhbEJnOiR7Z3JvdXAudG90YWxCYWNrZ3JvdW5kfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZ3JvdXAuZ3JvdXBIZWFkZXJCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICBtZXRhZGF0YS5wdXNoKGBoZWFkZXJCZzoke2dyb3VwLmdyb3VwSGVhZGVyQmFja2dyb3VuZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXRhZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBncm91cFN0ciArPSBgKCR7bWV0YWRhdGEuam9pbignOycpfSlgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyb3VwU3RyO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignLCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRTZWxlY3RTdHJpbmcoc2VsZWN0OiBTZWxlY3RDb25maWdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc2VsZWN0XHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciB8fCAwKSAtIChiLm9yZGVyIHx8IDApKVxyXG4gICAgICAubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGxldCBzZWxlY3RTdHIgPSBpdGVtLnByb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgLy8gQWRkIGRpc3BsYXkgbmFtZSBpZiBwcm92aWRlZFxyXG4gICAgICAgIGlmIChpdGVtLmRpc3BsYXlOYW1lKSB7XHJcbiAgICAgICAgICBzZWxlY3RTdHIgKz0gYCBhcyAke2l0ZW0uZGlzcGxheU5hbWV9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBhZ2dyZWdhdGUgZnVuY3Rpb24gaWYgcHJvdmlkZWRcclxuICAgICAgICBpZiAoaXRlbS5hZ2dyZWdhdGVGdW5jdGlvbikge1xyXG4gICAgICAgICAgc2VsZWN0U3RyICs9IGAgd2l0aCAke2l0ZW0uYWdncmVnYXRlRnVuY3Rpb259YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCB2aXNpYmlsaXR5IG1ldGFkYXRhXHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIG1ldGFkYXRhLnB1c2goYHZpc2libGU6JHtpdGVtLmlzVmlzaWJsZX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXRhZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBzZWxlY3RTdHIgKz0gYCgke21ldGFkYXRhLmpvaW4oJzsnKX0pYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzZWxlY3RTdHI7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBidWlsZEFnZ3JlZ2F0ZVN0cmluZyhhZ2dyZWdhdGVzOiBBZ2dyZWdhdGVDb25maWdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYWdncmVnYXRlc1xyXG4gICAgICAubWFwKGFnZyA9PiB7XHJcbiAgICAgICAgbGV0IGFnZ1N0ciA9IGAke2FnZy5hZ2dyZWdhdGVGdW5jdGlvbn0oJHthZ2cucHJvcGVydHlOYW1lfSlgO1xyXG5cclxuICAgICAgICBpZiAoYWdnLmFsaWFzKSB7XHJcbiAgICAgICAgICBhZ2dTdHIgKz0gYCBhcyAke2FnZy5hbGlhc31gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFnZ1N0cjtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJywnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlRmlsdGVyKGZpbHRlclN0cmluZzogc3RyaW5nLCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVjb2RlZFN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChmaWx0ZXJTdHJpbmcpO1xyXG4gICAgY29uc3QgZ3JvdXBzOiBGaWx0ZXJHcm91cFtdID0gW107XHJcblxyXG4gICAgLy8gU3BsaXQgYnkgdG9wLWxldmVsIEFORC9PUiBvcGVyYXRvcnNcclxuICAgIGNvbnN0IHRvcExldmVsUGF0dGVybiA9IC8oPzpefFxccykoYW5kfG9yKVxccysoPz0oPzpbXigpXSpcXChbXigpXSpcXCkpKlteKCldKiQpL2dpO1xyXG4gICAgY29uc3Qgc2VnbWVudHM6IHsgY29uZGl0aW9uOiBzdHJpbmc7IG9wZXJhdG9yPzogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIGxldCBsYXN0SW5kZXggPSAwO1xyXG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xyXG5cclxuICAgIHdoaWxlICgobWF0Y2ggPSB0b3BMZXZlbFBhdHRlcm4uZXhlYyhkZWNvZGVkU3RyaW5nKSkgIT09IG51bGwpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBtYXRjaFsxXTtcclxuICAgICAgY29uc3Qgc2VnbWVudCA9IGRlY29kZWRTdHJpbmcuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpLnRyaW0oKTtcclxuXHJcbiAgICAgIGlmIChzZWdtZW50KSB7XHJcbiAgICAgICAgc2VnbWVudHMucHVzaCh7IGNvbmRpdGlvbjogc2VnbWVudCwgb3BlcmF0b3IgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCB0aGUgbGFzdCBzZWdtZW50XHJcbiAgICBjb25zdCBsYXN0U2VnbWVudCA9IGRlY29kZWRTdHJpbmcuc3Vic3RyaW5nKGxhc3RJbmRleCkudHJpbSgpO1xyXG4gICAgaWYgKGxhc3RTZWdtZW50KSB7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goeyBjb25kaXRpb246IGxhc3RTZWdtZW50LCBvcGVyYXRvcjogdW5kZWZpbmVkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhcnNlIGVhY2ggc2VnbWVudFxyXG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgbGV0IGNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZ3JvdXAgd2l0aCBwYXJlbnRoZXNlc1xyXG4gICAgICBpZiAoc2VnbWVudC5jb25kaXRpb24uc3RhcnRzV2l0aCgnKCcpICYmIHNlZ21lbnQuY29uZGl0aW9uLmVuZHNXaXRoKCcpJykpIHtcclxuICAgICAgICBjb25zdCBpbm5lckNvbmRpdGlvbiA9IHNlZ21lbnQuY29uZGl0aW9uLnNsaWNlKDEsIC0xKS50cmltKCk7XHJcbiAgICAgICAgY29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGlubmVyQ29uZGl0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBJbmRpdmlkdWFsIGNvbmRpdGlvblxyXG4gICAgICAgIGNvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhzZWdtZW50LmNvbmRpdGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBncm91cDogRmlsdGVyR3JvdXAgPSB7XHJcbiAgICAgICAgICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9uc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIEZvciBncm91cHMgYWZ0ZXIgdGhlIGZpcnN0LCBzZXQgdGhlIGdyb3VwTG9naWNhbE9wZXJhdG9yXHJcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgPSAoc2VnbWVudC5vcGVyYXRvcj8udG9Mb3dlckNhc2UoKSBhcyAnYW5kJyB8ICdvcicpIHx8ICdhbmQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSBsb2dpY2FsIG9wZXJhdG9yIHVzZWQgd2l0aGluIHRoZSBncm91cFxyXG4gICAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMSAmJiBzZWdtZW50LmNvbmRpdGlvbi5pbmNsdWRlcygnIG9yICcpKSB7XHJcbiAgICAgICAgICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSAnb3InO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uZGl0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSBzZWdtZW50LmNvbmRpdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCcgb3IgJykgPyAnb3InIDogJ2FuZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHBhcmFtcy5maWx0ZXJzID0gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VDb25kaXRpb25zKGNvbmRpdGlvblN0cmluZzogc3RyaW5nKTogRmlsdGVyQ29uZGl0aW9uW10ge1xyXG4gICAgY29uc3QgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcclxuXHJcbiAgICAvLyBFbmhhbmNlZCBwYXR0ZXJuIHRvIGhhbmRsZSBtb3JlIG9wZXJhdG9ycyBhbmQgY29tcGxleCB2YWx1ZXNcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKFxcdysoPzpcXC5cXHcrKSopXFxzKyhlcXxuZXxndHxnZXxsdHxsZXxjb250YWluc3xzdGFydHN3aXRofGVuZHN3aXRofGlufG5vdGluKVxccysoJ1teJ10qJ3xcXFtbXlxcXV0qXFxdfFxcZCt8dHJ1ZXxmYWxzZXxudWxsKS9naTtcclxuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcclxuXHJcbiAgICB3aGlsZSAoKG1hdGNoID0gcGF0dGVybi5leGVjKGNvbmRpdGlvblN0cmluZykpICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IFssIGZpZWxkLCBvcGVyYXRvciwgcmF3VmFsdWVdID0gbWF0Y2g7XHJcblxyXG4gICAgICBsZXQgdmFsdWU6IGFueSA9IHJhd1ZhbHVlLnRyaW0oKTtcclxuXHJcbiAgICAgIGlmIChyYXdWYWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiByYXdWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcclxuICAgICAgICB2YWx1ZSA9IHJhd1ZhbHVlLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUuc3RhcnRzV2l0aCgnWycpICYmIHJhd1ZhbHVlLmVuZHNXaXRoKCddJykpIHtcclxuICAgICAgICAvLyBIYW5kbGUgYXJyYXkgdmFsdWVzIGZvciBJTi9OT1QgSU4gb3BlcmF0b3JzXHJcbiAgICAgICAgdmFsdWUgPSByYXdWYWx1ZS5zbGljZSgxLCAtMSkuc3BsaXQoJywnKS5tYXAodiA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0cmltbWVkID0gdi50cmltKCkucmVwbGFjZSgvXid8JyQvZywgJycpO1xyXG4gICAgICAgICAgcmV0dXJuIGlzTmFOKE51bWJlcih0cmltbWVkKSkgPyB0cmltbWVkIDogTnVtYmVyKHRyaW1tZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIocmF3VmFsdWUpKSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHJhd1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIGlmIChyYXdWYWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIHtcclxuICAgICAgICB2YWx1ZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgIHZhbHVlID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ251bGwnKSB7XHJcbiAgICAgICAgdmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25kaXRpb25zLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBmaWVsZC50cmltKCksXHJcbiAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHZhbHVlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb25kaXRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VPcmRlckJ5KG9yZGVyQnlTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQob3JkZXJCeVN0cmluZyk7XHJcbiAgICBjb25zdCBjbGF1c2VzID0gZGVjb2RlZFN0cmluZy5zcGxpdCgnLCcpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIGNsYXVzZXMpIHtcclxuICAgICAgY29uc3QgcGFydHMgPSBjbGF1c2UudHJpbSgpLnNwbGl0KC9cXHMrLyk7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gcGFydHNbMF07XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IChwYXJ0c1sxXT8udG9Mb3dlckNhc2UoKSBhcyAnYXNjJyB8ICdkZXNjJykgfHwgJ2FzYyc7XHJcblxyXG4gICAgICBwYXJhbXMub3JkZXJCeT8ucHVzaCh7XHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VHcm91cEJ5KGdyb3VwQnlTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoZ3JvdXBCeVN0cmluZyk7XHJcbiAgICBjb25zdCBncm91cHMgPSBkZWNvZGVkU3RyaW5nLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgcGFyYW1zLmdyb3VwQnkgPSBncm91cHMubWFwKChncm91cFN0ciwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXA6IEdyb3VwaW5nQ29uZmlnID0ge1xyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJycsXHJcbiAgICAgICAgb3JkZXI6IGluZGV4XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgbWV0YWRhdGEgaW4gcGFyZW50aGVzZXNcclxuICAgICAgY29uc3QgbWV0YWRhdGFNYXRjaCA9IGdyb3VwU3RyLm1hdGNoKC9eKC4qPylcXCgoLiopXFwpJC8pO1xyXG4gICAgICBsZXQgYmFzZVN0ciA9IGdyb3VwU3RyO1xyXG4gICAgICBsZXQgbWV0YWRhdGFTdHIgPSAnJztcclxuXHJcbiAgICAgIGlmIChtZXRhZGF0YU1hdGNoKSB7XHJcbiAgICAgICAgYmFzZVN0ciA9IG1ldGFkYXRhTWF0Y2hbMV07XHJcbiAgICAgICAgbWV0YWRhdGFTdHIgPSBtZXRhZGF0YU1hdGNoWzJdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgZGlzcGxheSBuYW1lIGFsaWFzXHJcbiAgICAgIGNvbnN0IGFsaWFzTWF0Y2ggPSBiYXNlU3RyLm1hdGNoKC9eKC4qPylcXHMrYXNcXHMrKC4qKSQvKTtcclxuICAgICAgaWYgKGFsaWFzTWF0Y2gpIHtcclxuICAgICAgICBncm91cC5wcm9wZXJ0eU5hbWUgPSBhbGlhc01hdGNoWzFdLnRyaW0oKTtcclxuICAgICAgICBncm91cC5kaXNwbGF5TmFtZSA9IGFsaWFzTWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3VwLnByb3BlcnR5TmFtZSA9IGJhc2VTdHIudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQYXJzZSBtZXRhZGF0YVxyXG4gICAgICBpZiAobWV0YWRhdGFTdHIpIHtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YVBhcnRzID0gbWV0YWRhdGFTdHIuc3BsaXQoJzsnKTtcclxuICAgICAgICBtZXRhZGF0YVBhcnRzLmZvckVhY2gocGFydCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0LnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgICAgICBjYXNlICdzaG93VG90YWwnOlxyXG4gICAgICAgICAgICAgIGdyb3VwLnNob3dUb3RhbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndG90YWxCZyc6XHJcbiAgICAgICAgICAgICAgZ3JvdXAudG90YWxCYWNrZ3JvdW5kID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hlYWRlckJnJzpcclxuICAgICAgICAgICAgICBncm91cC5ncm91cEhlYWRlckJhY2tncm91bmQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBwYXJzZVNlbGVjdChzZWxlY3RTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoc2VsZWN0U3RyaW5nKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gZGVjb2RlZFN0cmluZy5zcGxpdCgnLCcpO1xyXG5cclxuICAgIHBhcmFtcy5zZWxlY3QgPSBpdGVtcy5tYXAoKGl0ZW1TdHIsIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW06IFNlbGVjdENvbmZpZyA9IHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICcnLFxyXG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBvcmRlcjogaW5kZXhcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciBtZXRhZGF0YSBpbiBwYXJlbnRoZXNlc1xyXG4gICAgICBjb25zdCBtZXRhZGF0YU1hdGNoID0gaXRlbVN0ci5tYXRjaCgvXiguKj8pXFwoKC4qKVxcKSQvKTtcclxuICAgICAgbGV0IGJhc2VTdHIgPSBpdGVtU3RyO1xyXG4gICAgICBsZXQgbWV0YWRhdGFTdHIgPSAnJztcclxuXHJcbiAgICAgIGlmIChtZXRhZGF0YU1hdGNoKSB7XHJcbiAgICAgICAgYmFzZVN0ciA9IG1ldGFkYXRhTWF0Y2hbMV07XHJcbiAgICAgICAgbWV0YWRhdGFTdHIgPSBtZXRhZGF0YU1hdGNoWzJdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgZGlzcGxheSBuYW1lIGFsaWFzIGFuZCBhZ2dyZWdhdGUgZnVuY3Rpb25cclxuICAgICAgY29uc3QgYWxpYXNNYXRjaCA9IGJhc2VTdHIubWF0Y2goL14oLio/KSg/Olxccythc1xccysoLio/KSk/KD86XFxzK3dpdGhcXHMrKFxcdyspKT8kLyk7XHJcbiAgICAgIGlmIChhbGlhc01hdGNoKSB7XHJcbiAgICAgICAgaXRlbS5wcm9wZXJ0eU5hbWUgPSBhbGlhc01hdGNoWzFdLnRyaW0oKTtcclxuICAgICAgICBpZiAoYWxpYXNNYXRjaFsyXSkge1xyXG4gICAgICAgICAgaXRlbS5kaXNwbGF5TmFtZSA9IGFsaWFzTWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWxpYXNNYXRjaFszXSkge1xyXG4gICAgICAgICAgaXRlbS5hZ2dyZWdhdGVGdW5jdGlvbiA9IGFsaWFzTWF0Y2hbM10udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpdGVtLnByb3BlcnR5TmFtZSA9IGJhc2VTdHIudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQYXJzZSBtZXRhZGF0YVxyXG4gICAgICBpZiAobWV0YWRhdGFTdHIpIHtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YVBhcnRzID0gbWV0YWRhdGFTdHIuc3BsaXQoJzsnKTtcclxuICAgICAgICBtZXRhZGF0YVBhcnRzLmZvckVhY2gocGFydCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0LnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICAgICAgaXRlbS5pc1Zpc2libGUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUFnZ3JlZ2F0ZShhZ2dyZWdhdGVTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoYWdncmVnYXRlU3RyaW5nKTtcclxuICAgIGNvbnN0IGFnZ3JlZ2F0ZXMgPSBkZWNvZGVkU3RyaW5nLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgcGFyYW1zLmFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGVzLm1hcChhZ2dTdHIgPT4ge1xyXG4gICAgICBjb25zdCBhZ2c6IEFnZ3JlZ2F0ZUNvbmZpZyA9IHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICcnLFxyXG4gICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uOiAnJ1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gTWF0Y2ggcGF0dGVybjogZnVuY3Rpb24ocHJvcGVydHkpIGFzIGFsaWFzXHJcbiAgICAgIGNvbnN0IG1hdGNoID0gYWdnU3RyLm1hdGNoKC9eKFxcdyspXFwoKFxcdyspXFwpKD86XFxzK2FzXFxzKyhcXHcrKSk/JC8pO1xyXG4gICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICBhZ2cuYWdncmVnYXRlRnVuY3Rpb24gPSBtYXRjaFsxXTtcclxuICAgICAgICBhZ2cucHJvcGVydHlOYW1lID0gbWF0Y2hbMl07XHJcbiAgICAgICAgaWYgKG1hdGNoWzNdKSB7XHJcbiAgICAgICAgICBhZ2cuYWxpYXMgPSBtYXRjaFszXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhZ2c7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gY29udmVydCBRdWVyeVBhcmFtZXRlcnMgdG8gT0RhdGFRdWVyeVBhcmFtZXRlcnMgKEMjIGVxdWl2YWxlbnQpXHJcbiAgc3RhdGljIHRvT0RhdGFRdWVyeVBhcmFtZXRlcnMocGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgRmlsdGVyczogcGFyYW1zLmZpbHRlcnMubWFwKGdyb3VwID0+ICh7XHJcbiAgICAgICAgTG9naWNhbE9wZXJhdG9yOiBncm91cC5sb2dpY2FsT3BlcmF0b3IsXHJcbiAgICAgICAgR3JvdXBMb2dpY2FsT3BlcmF0b3I6IGdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yLFxyXG4gICAgICAgIENvbmRpdGlvbnM6IGdyb3VwLmNvbmRpdGlvbnMubWFwKGNvbmQgPT4gKHtcclxuICAgICAgICAgIEZpZWxkOiBjb25kLmZpZWxkLFxyXG4gICAgICAgICAgT3BlcmF0b3I6IGNvbmQub3BlcmF0b3IsXHJcbiAgICAgICAgICBWYWx1ZTogY29uZC52YWx1ZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICB9KSksXHJcbiAgICAgIE9yZGVyQnk6IHBhcmFtcy5vcmRlckJ5Py5tYXAob3JkZXIgPT4gKHtcclxuICAgICAgICBGaWVsZDogb3JkZXIuZmllbGQsXHJcbiAgICAgICAgRGlyZWN0aW9uOiBvcmRlci5kaXJlY3Rpb25cclxuICAgICAgfSkpIHx8IFtdLFxyXG4gICAgICBHcm91cEJ5OiBwYXJhbXMuZ3JvdXBCeT8ubWFwKGdyb3VwID0+ICh7XHJcbiAgICAgICAgUHJvcGVydHlOYW1lOiBncm91cC5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgRGlzcGxheU5hbWU6IGdyb3VwLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgIFNob3dUb3RhbDogZ3JvdXAuc2hvd1RvdGFsID8/IHRydWUsXHJcbiAgICAgICAgVG90YWxCYWNrZ3JvdW5kOiBncm91cC50b3RhbEJhY2tncm91bmQsXHJcbiAgICAgICAgR3JvdXBIZWFkZXJCYWNrZ3JvdW5kOiBncm91cC5ncm91cEhlYWRlckJhY2tncm91bmQsXHJcbiAgICAgICAgT3JkZXI6IGdyb3VwLm9yZGVyXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgU2VsZWN0OiBwYXJhbXMuc2VsZWN0Py5tYXAoc2VsID0+ICh7XHJcbiAgICAgICAgUHJvcGVydHlOYW1lOiBzZWwucHJvcGVydHlOYW1lLFxyXG4gICAgICAgIERpc3BsYXlOYW1lOiBzZWwuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgQWdncmVnYXRlRnVuY3Rpb246IHNlbC5hZ2dyZWdhdGVGdW5jdGlvbixcclxuICAgICAgICBJc1Zpc2libGU6IHNlbC5pc1Zpc2libGUgPz8gdHJ1ZSxcclxuICAgICAgICBPcmRlcjogc2VsLm9yZGVyXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgQWdncmVnYXRlczogcGFyYW1zLmFnZ3JlZ2F0ZXM/Lm1hcChhZ2cgPT4gKHtcclxuICAgICAgICBQcm9wZXJ0eU5hbWU6IGFnZy5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgQWdncmVnYXRlRnVuY3Rpb246IGFnZy5hZ2dyZWdhdGVGdW5jdGlvbixcclxuICAgICAgICBBbGlhczogYWdnLmFsaWFzXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgVG9wOiBwYXJhbXMudG9wLFxyXG4gICAgICBTa2lwOiBwYXJhbXMuc2tpcCxcclxuICAgICAgRXhwYW5kOiBwYXJhbXMuZXhwYW5kLFxyXG4gICAgICBJbmNsdWRlQ291bnQ6IHBhcmFtcy5pbmNsdWRlQ291bnRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gVUkgbW9kZWxcclxuICBzdGF0aWMgZnJvbVVJTW9kZWwobW9kZWw6IGFueSk6IFF1ZXJ5UGFyYW1ldGVycyB7XHJcbiAgICBjb25zdCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyA9IHtcclxuICAgICAgZmlsdGVyczogbW9kZWwuYWR2YW5jZWRGaWx0ZXJzIHx8IFtdLFxyXG4gICAgICBvcmRlckJ5OiBtb2RlbC5zb3J0aW5nIHx8IFtdLFxyXG4gICAgICBncm91cEJ5OiBtb2RlbC5ncm91cGluZyB8fCBbXSxcclxuICAgICAgc2VsZWN0OiBtb2RlbC5jb2x1bW5zIHx8IFtdLFxyXG4gICAgICBhZ2dyZWdhdGVzOiBtb2RlbC5hZ2dyZWdhdGVzIHx8IFtdLFxyXG4gICAgICB0b3A6IG1vZGVsLnBhZ2luYXRpb24/LnRvcCxcclxuICAgICAgc2tpcDogbW9kZWwucGFnaW5hdGlvbj8uc2tpcCxcclxuICAgICAgZXhwYW5kOiBtb2RlbC5leHBhbmQsXHJcbiAgICAgIGluY2x1ZGVDb3VudDogbW9kZWwucGFnaW5hdGlvbj8uaW5jbHVkZUNvdW50XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { filter, take } from 'rxjs/operators';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport { ConfigStateService } from './config-state.service';\nimport { SsrCookieService } from './ssr-cookie.service';\nimport compare from 'just-compare';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./config-state.service\";\nimport * as i2 from \"./ssr-cookie.service\";\nexport class SessionStateService {\n configState;\n localStorageService;\n store = new InternalStore({});\n document = inject(DOCUMENT);\n updateLocalStorage = () => {\n this.localStorageService.set('abpSession', JSON.stringify(this.store.state), { expires: new Date(new Date().getTime() + 365 * 86400000), path: '/' });\n };\n constructor(configState, localStorageService) {\n this.configState = configState;\n this.localStorageService = localStorageService;\n this.init();\n this.setInitialLanguage();\n }\n init() {\n const session = this.localStorageService.get('abpSession');\n if (session) {\n this.store.set(JSON.parse(session));\n }\n this.store.sliceUpdate(state => state).subscribe(this.updateLocalStorage);\n }\n setInitialLanguage() {\n const appLanguage = this.getLanguage();\n this.configState\n .getDeep$('localization.currentCulture.cultureName')\n .pipe(filter(cultureName => !!cultureName), take(1))\n .subscribe(lang => {\n if (lang.includes(';')) {\n lang = lang.split(';')[0];\n }\n this.setLanguage(lang);\n });\n }\n onLanguageChange$() {\n return this.store.sliceUpdate(state => state.language);\n }\n onTenantChange$() {\n return this.store.sliceUpdate(state => state.tenant);\n }\n getLanguage() {\n return this.store.state.language;\n }\n getLanguage$() {\n return this.store.sliceState(state => state.language);\n }\n getTenant() {\n return this.store.state.tenant;\n }\n getTenant$() {\n return this.store.sliceState(state => state.tenant);\n }\n setTenant(tenant) {\n if (compare(tenant, this.store.state.tenant))\n return;\n this.store.set({ ...this.store.state, tenant });\n }\n setState(session) {\n if (compare(session, this.store.state))\n return;\n this.store.set({ ...this.store.state, ...session });\n }\n setLanguage(language) {\n const currentLanguage = this.store.state.language;\n if (language !== currentLanguage) {\n this.store.patch({ language });\n }\n const currentAttribute = this.document.documentElement.getAttribute('lang');\n if (language !== currentAttribute) {\n this.document.documentElement.setAttribute('lang', language);\n }\n }\n get application() {\n return this.store.state.application;\n }\n get user() {\n return this.store.state.user;\n }\n get userId() {\n return this.user ? this.user.id : 0;\n }\n get tenant() {\n return this.store.state.tenant;\n }\n get branch() {\n return this.store.state.branch;\n }\n /* get branchName(): BranchLoginInfoDto {\n return this._branch ? this.branch.Name : '';\n\n } */\n get tenancyName() {\n return this.store.state.tenant ? this.tenant?.tenancyName : '';\n }\n get branchId() {\n // return this.branch ? this.branch.id : this.configState.Session?.branchId ? this.configState.Session.branchId:null;\n return this.branch ? this.branch.id : 0;\n }\n get tenantId() {\n return this.tenant ? this.tenant.id : 0;\n }\n getShownLoginName() {\n const userName = this.store.state.user?.userName ?? '';\n if (!this.multiTenancySide) {\n return userName;\n }\n return (this.store.state.tenant ? this.store.state.tenant.tenancyName : '.') + '\\\\' + userName;\n }\n changeTenantIfNeeded(tenantId) {\n if (this.isCurrentTenant(tenantId)) {\n return false;\n }\n // this.configState.SetTenantIdCookie(tenantId);\n location.reload();\n return true;\n }\n isCurrentTenant(tenantId) {\n let isTenant = tenantId ?? 0 > 0;\n if (!isTenant && !this.tenant) { // this is host\n return true;\n }\n if (!tenantId && this.tenant) {\n return false;\n }\n else if (tenantId && (!this.tenant || this.tenant.id !== tenantId)) {\n return false;\n }\n return true;\n }\n get impersonatorUser() {\n return this.store.state.impersonatorUser;\n }\n get impersonatorUserId() {\n return this.impersonatorUser ? this.impersonatorUser.id : 0;\n }\n get impersonatorTenant() {\n return this.store.state.impersonatorTenant;\n }\n get impersonatorTenancyName() {\n return this.impersonatorTenant ? this.impersonatorTenant?.tenancyName ?? '' : '';\n }\n get impersonatorTenantId() {\n return this.impersonatorTenant ? this.impersonatorTenant.id : 0;\n }\n get multiTenancySide() {\n // return this.configState.session?.multiTenancySide;\n return 0;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SessionStateService, deps: [{ token: i1.ConfigStateService }, { token: i2.SsrCookieService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SessionStateService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SessionStateService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.ConfigStateService }, { type: i2.SsrCookieService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvc2Vzc2lvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7Ozs7QUFLbkMsTUFBTSxPQUFPLG1CQUFtQjtJQVVwQjtJQUNBO0lBVk8sS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQW1CLENBQUMsQ0FBQztJQUM3QyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBR3ZDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUMsRUFBQyxPQUFPLEVBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDbkosQ0FBQyxDQUFDO0lBRUYsWUFDVSxXQUErQixFQUMvQixtQkFB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QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBSUQsSUFBSSxnQkFBZ0I7UUFDaEIscURBQXFEO1FBQ3JELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzt1R0E3TFEsbUJBQW1COzJHQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW50ZXJuYWxTdG9yZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS91dGlscyc7XG5pbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNzckNvb2tpZVNlcnZpY2UgfSBmcm9tICcuL3Nzci1jb29raWUuc2VydmljZSc7XG5pbXBvcnQgeyBDdXJyZW50VGVuYW50RHRvLCBTZXNzaW9uIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5pbXBvcnQgY29tcGFyZSBmcm9tICdqdXN0LWNvbXBhcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2Vzc2lvblN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZSh7fSBhcyBTZXNzaW9uLlN0YXRlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuXG4gIHByaXZhdGUgdXBkYXRlTG9jYWxTdG9yYWdlID0gKCkgPT4ge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXQoJ2FicFNlc3Npb24nLCBKU09OLnN0cmluZ2lmeSh0aGlzLnN0b3JlLnN0YXRlKSx7ZXhwaXJlczpuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDM2NSAqIDg2NDAwMDAwKSwgcGF0aDonLyd9KTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBTc3JDb29raWVTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLnNldEluaXRpYWxMYW5ndWFnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0KCdhYnBTZXNzaW9uJyk7XG4gICAgaWYgKHNlc3Npb24pIHtcbiAgICAgIHRoaXMuc3RvcmUuc2V0KEpTT04ucGFyc2Uoc2Vzc2lvbikpO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcmUuc2xpY2VVcGRhdGUoc3RhdGUgPT4gc3RhdGUpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsU3RvcmFnZSk7XG4gIH1cblxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbExhbmd1YWdlKCkge1xuICAgIGNvbnN0IGFwcExhbmd1YWdlID0gdGhpcy5nZXRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5jb25maWdTdGF0ZVxuICAgICAgLmdldERlZXAkKCdsb2NhbGl6YXRpb24uY3VycmVudEN1bHR1cmUuY3VsdHVyZU5hbWUnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihjdWx0dXJlTmFtZSA9PiAhIWN1bHR1cmVOYW1lKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUobGFuZyA9PiB7XG4gICAgICAgIGlmIChsYW5nLmluY2x1ZGVzKCc7JykpIHtcbiAgICAgICAgICBsYW5nID0gbGFuZy5zcGxpdCgnOycpWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRMYW5ndWFnZShsYW5nKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VVcGRhdGUoc3RhdGUgPT4gc3RhdGUubGFuZ3VhZ2UpO1xuICB9XG5cbiAgb25UZW5hbnRDaGFuZ2UkKCkge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlVXBkYXRlKHN0YXRlID0+IHN0YXRlLnRlbmFudCk7XG4gIH1cblxuICBnZXRMYW5ndWFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS5sYW5ndWFnZTtcbiAgfVxuXG4gIGdldExhbmd1YWdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlLmxhbmd1YWdlKTtcbiAgfVxuXG4gIGdldFRlbmFudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS50ZW5hbnQ7XG4gIH1cblxuICBnZXRUZW5hbnQkKCkge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlU3RhdGUoc3RhdGUgPT4gc3RhdGUudGVuYW50KTtcbiAgfVxuXG4gIHNldFRlbmFudCh0ZW5hbnQ6IEN1cnJlbnRUZW5hbnREdG8gfCBudWxsKSB7XG4gICAgaWYgKGNvbXBhcmUodGVuYW50LCB0aGlzLnN0b3JlLnN0YXRlLnRlbmFudCkpIHJldHVybjtcblxuICAgIHRoaXMuc3RvcmUuc2V0KHsgLi4udGhpcy5zdG9yZS5zdGF0ZSwgdGVuYW50IH0pO1xuICB9XG4gIHNldFN0YXRlKHNlc3Npb246IFNlc3Npb24uU3RhdGUgfCBudWxsKSB7XG4gICAgaWYgKGNvbXBhcmUoc2Vzc2lvbiwgdGhpcy5zdG9yZS5zdGF0ZSkpIHJldHVybjtcblxuICAgIHRoaXMuc3RvcmUuc2V0KHsgLi4udGhpcy5zdG9yZS5zdGF0ZSwgLi4uc2Vzc2lvbiB9KTtcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UgPSB0aGlzLnN0b3JlLnN0YXRlLmxhbmd1YWdlO1xuXG4gICAgaWYgKGxhbmd1YWdlICE9PSBjdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuc3RvcmUucGF0Y2goeyBsYW5ndWFnZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50QXR0cmlidXRlID0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYW5nJyk7XG4gICAgaWYgKGxhbmd1YWdlICE9PSBjdXJyZW50QXR0cmlidXRlKSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBsYW5ndWFnZSk7XG4gICAgfVxuICB9XG5cblxuICAgIGdldCBhcHBsaWNhdGlvbigpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS5hcHBsaWNhdGlvbjtcbiAgICB9XG5cblxuXG4gICAgZ2V0IHVzZXIoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGUudXNlcjtcbiAgICB9XG5cbiAgICBnZXQgdXNlcklkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXIgPyB0aGlzLnVzZXIuaWQgOiAwO1xuICAgIH1cblxuICAgIGdldCB0ZW5hbnQoKTogYW55IHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLnRlbmFudDtcbiAgICB9XG4gICAgZ2V0IGJyYW5jaCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS5icmFuY2g7XG4gICAgfVxuICAgIC8qIGdldCBicmFuY2hOYW1lKCk6IEJyYW5jaExvZ2luSW5mb0R0byB7XG4gICAgICAgIHJldHVybiB0aGlzLl9icmFuY2ggPyB0aGlzLmJyYW5jaC5OYW1lIDogJyc7XG5cbiAgICB9ICovXG4gICAgZ2V0IHRlbmFuY3lOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGx8YW55e1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZS50ZW5hbnQgPyB0aGlzLnRlbmFudD8udGVuYW5jeU5hbWUgOiAnJztcbiAgICB9XG4gICAgZ2V0IGJyYW5jaElkKCk6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICAvLyByZXR1cm4gdGhpcy5icmFuY2ggPyB0aGlzLmJyYW5jaC5pZCA6IHRoaXMuY29uZmlnU3RhdGUuU2Vzc2lvbj8uYnJhbmNoSWQgPyB0aGlzLmNvbmZpZ1N0YXRlLlNlc3Npb24uYnJhbmNoSWQ6bnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoID8gdGhpcy5icmFuY2guaWQgOiAwO1xuICAgIH1cbiAgICBnZXQgdGVuYW50SWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVuYW50ID8gdGhpcy50ZW5hbnQuaWQgOiAwO1xuICAgIH1cblxuICAgIGdldFNob3duTG9naW5OYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHVzZXJOYW1lID0gdGhpcy5zdG9yZS5zdGF0ZS51c2VyPy51c2VyTmFtZSA/PyAnJztcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpVGVuYW5jeVNpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1c2VyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAodGhpcy5zdG9yZS5zdGF0ZS50ZW5hbnQgPyB0aGlzLnN0b3JlLnN0YXRlLnRlbmFudC50ZW5hbmN5TmFtZSA6ICcuJykgKyAnXFxcXCcgKyB1c2VyTmFtZTtcbiAgICB9XG5cblxuXG5cblxuICAgIGNoYW5nZVRlbmFudElmTmVlZGVkKHRlbmFudElkPzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzQ3VycmVudFRlbmFudCh0ZW5hbnRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuY29uZmlnU3RhdGUuU2V0VGVuYW50SWRDb29raWUodGVuYW50SWQpO1xuICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0N1cnJlbnRUZW5hbnQodGVuYW50SWQ/OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGlzVGVuYW50ID0gdGVuYW50SWQgPz8gMCA+IDA7XG5cbiAgICAgICAgaWYgKCFpc1RlbmFudCAmJiAhdGhpcy50ZW5hbnQpIHsgLy8gdGhpcyBpcyBob3N0XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGVuYW50SWQgJiYgdGhpcy50ZW5hbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZW5hbnRJZCAmJiAoIXRoaXMudGVuYW50IHx8IHRoaXMudGVuYW50LmlkICE9PSB0ZW5hbnRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldCBpbXBlcnNvbmF0b3JVc2VyKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLmltcGVyc29uYXRvclVzZXI7XG4gICAgfVxuICAgIGdldCBpbXBlcnNvbmF0b3JVc2VySWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wZXJzb25hdG9yVXNlciA/IHRoaXMuaW1wZXJzb25hdG9yVXNlci5pZCA6IDA7XG4gICAgfVxuICAgIGdldCBpbXBlcnNvbmF0b3JUZW5hbnQoKTogYW55ICB8IG51bGx7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLmltcGVyc29uYXRvclRlbmFudDtcbiAgICB9XG4gICAgZ2V0IGltcGVyc29uYXRvclRlbmFuY3lOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmltcGVyc29uYXRvclRlbmFudCA/IHRoaXMuaW1wZXJzb25hdG9yVGVuYW50Py50ZW5hbmN5TmFtZSA/PyAnJyA6ICcnO1xuICAgIH1cbiAgICBnZXQgaW1wZXJzb25hdG9yVGVuYW50SWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wZXJzb25hdG9yVGVuYW50ID8gdGhpcy5pbXBlcnNvbmF0b3JUZW5hbnQuaWQgOiAwO1xuICAgIH1cblxuXG5cbiAgICBnZXQgbXVsdGlUZW5hbmN5U2lkZSgpOiBhbnkge1xuICAgICAgICAvLyByZXR1cm4gdGhpcy5jb25maWdTdGF0ZS5zZXNzaW9uPy5tdWx0aVRlbmFuY3lTaWRlO1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbn1cbiJdfQ==","import { registerLocaleData } from '@angular/common';\nimport { Injectable, Injector, isDevMode, Optional, SkipSelf } from '@angular/core';\nimport { localizations$, CORE_OPTIONS } from '@elite.framework/ng.core/tokens';\nimport { BehaviorSubject, combineLatest, from, Subject } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { ConfigStateService } from './config-state.service';\nimport { createLocalizer, createLocalizerWithFallback, interpolate } from '@elite.framework/ng.core/utils';\nimport { SessionStateService } from './session-state.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./session-state.service\";\nimport * as i2 from \"./config-state.service\";\nexport class LocalizationService {\n sessionState;\n injector;\n configState;\n latestLang = 'ar';\n _languageChange$ = new Subject();\n uiLocalizations$ = new BehaviorSubject(new Map());\n localizations$ = new BehaviorSubject(new Map());\n /**\n * Returns currently selected language\n * Even though this looks like it's redundant to return the same value as `getLanguage()`,\n * it's actually not. This could be invoked any time, and the latestLang could be different from the\n * sessionState.getLanguage() value.\n */\n get currentLanguage() {\n return this.latestLang || this.sessionState.getLanguage();\n }\n get currentLang() {\n return this.latestLang || this.sessionState.getLanguage();\n }\n get currentLang$() {\n return this.sessionState.getLanguage$();\n }\n get languageChange$() {\n return this._languageChange$.asObservable();\n }\n constructor(sessionState, injector, otherInstance, configState) {\n this.sessionState = sessionState;\n this.injector = injector;\n this.configState = configState;\n if (otherInstance)\n throw new Error('LocalizationService should have only one instance.');\n this.listenToSetLanguage();\n this.initLocalizationValues();\n this.latestLang = this.sessionState.getLanguage();\n }\n initLocalizationValues() {\n localizations$.subscribe(val => this.addLocalization(val));\n const legacyResources$ = this.configState.getDeep$('localization.values');\n const remoteLocalizations$ = this.configState.getDeep$('localization.resources');\n const currentLanguage$ = this.sessionState.getLanguage$();\n const uiLocalizations$ = combineLatest([currentLanguage$, this.uiLocalizations$]).pipe(map(([currentLang, localizations]) => localizations.get(currentLang)));\n combineLatest([legacyResources$, remoteLocalizations$, uiLocalizations$])\n .pipe(map(([legacy, resource, local]) => {\n if (!resource) {\n return null;\n }\n const remote = combineLegacyandNewResources(legacy || {}, resource);\n if (remote) {\n if (!local) {\n local = new Map();\n }\n Object.entries(remote).forEach(entry => {\n const resourceName = entry[0];\n const remoteTexts = entry[1];\n let resource = local?.get(resourceName) || {};\n resource = { ...resource, ...remoteTexts };\n local?.set(resourceName, resource);\n });\n }\n return local;\n }), filter(Boolean))\n .subscribe(val => this.localizations$.next(val));\n }\n addLocalization(localizations) {\n if (!localizations)\n return;\n const localizationMap = this.uiLocalizations$.value;\n localizations.forEach(loc => {\n const cultureMap = localizationMap.get(loc.culture) || new Map();\n loc.resources.forEach(res => {\n let resource = cultureMap.get(res.resourceName) || {};\n resource = { ...resource, ...res.texts };\n cultureMap.set(res.resourceName, resource);\n });\n localizationMap.set(loc.culture, cultureMap);\n });\n this.uiLocalizations$.next(localizationMap);\n }\n listenToSetLanguage() {\n this.sessionState\n .onLanguageChange$()\n .pipe(filter(lang => this.configState.getDeep('localization.currentCulture.cultureName') !== lang), switchMap((lang) => this.configState.refreshLocalization(lang).pipe(map(() => lang))), filter(Boolean), switchMap((lang) => from(this.registerLocale(lang).then(() => lang))))\n .subscribe((lang) => this._languageChange$.next(lang));\n }\n registerLocale(locale) {\n const { registerLocaleFn } = this.injector.get(CORE_OPTIONS);\n return registerLocaleFn(locale).then(module => {\n if (module?.default)\n registerLocaleData(module.default);\n this.latestLang = locale;\n });\n }\n /**\n * Returns an observable localized text with the given interpolation parameters in current language.\n * @param key Localizaton key to replace with localized text\n * @param interpolateParams Values to interpolate\n */\n get(key, ...interpolateParams) {\n return this.configState\n .getAll$()\n .pipe(map(state => this.getLocalization(state, key, ...interpolateParams)));\n }\n getResource(resourceName) {\n return this.localizations$.value.get(resourceName);\n }\n getResource$(resourceName) {\n return this.localizations$.pipe(map(res => res.get(resourceName)));\n }\n /**\n * Returns localized text with the given interpolation parameters in current language.\n * @param key Localization key to replace with localized text\n * @param interpolateParams Values to intepolate.\n */\n instant(key, ...interpolateParams) {\n return this.getLocalization(this.configState.getAll(), key, ...interpolateParams);\n }\n localize(resourceName, key, defaultValue) {\n return this.configState.getOne$('localization').pipe(map(createLocalizer), map((localize) => localize(resourceName, key, defaultValue)));\n }\n get defaultResourceName() {\n return this.configState.getAll().localization ? this.configState.getAll().localization.defaultResourceName : 'FrameworkLocalization';\n }\n l(key) {\n const localization = this.configState.getOne('localization');\n return createLocalizer(localization)(this.defaultResourceName ?? '', key, key);\n }\n localizeSync(resourceName, key, defaultValue) {\n const localization = this.configState.getOne('localization');\n return createLocalizer(localization)(resourceName, key, defaultValue);\n }\n localizeWithFallback(resourceNames, keys, defaultValue) {\n return this.configState.getOne$('localization').pipe(map(createLocalizerWithFallback), map((localizeWithFallback) => localizeWithFallback(resourceNames, keys, defaultValue)));\n }\n localizeWithFallbackSync(resourceNames, keys, defaultValue) {\n const localization = this.configState.getOne('localization');\n return createLocalizerWithFallback(localization)(resourceNames, keys, defaultValue);\n }\n getLocalization(state, key, ...interpolateParams) {\n let defaultValue = '';\n if (!key) {\n return defaultValue;\n }\n if (typeof key !== 'string') {\n defaultValue = key.defaultValue;\n key = key.key;\n }\n const keys = key.split('::');\n const warn = (message) => {\n if (isDevMode())\n console.warn(message);\n };\n if (keys.length < 2) {\n warn('The localization source separator (::) not found.');\n return defaultValue || key;\n }\n if (!state.localization)\n return defaultValue || keys[1];\n const sourceName = keys[0] || state.localization.defaultResourceName;\n const sourceKey = keys[1];\n if (sourceName === '_') {\n return defaultValue || sourceKey;\n }\n if (!sourceName) {\n warn('Localization source name is not specified and the defaultResourceName was not defined!');\n return defaultValue || sourceKey;\n }\n const source = this.localizations$.value.get(sourceName);\n if (!source) {\n warn('Could not find localization source: ' + sourceName);\n return defaultValue || sourceKey;\n }\n let localization = source[sourceKey];\n if (typeof localization === 'undefined') {\n return defaultValue || sourceKey;\n }\n interpolateParams = interpolateParams.filter(params => params != null);\n if (localization)\n localization = interpolate(localization, interpolateParams);\n if (typeof localization !== 'string')\n localization = '';\n return localization || defaultValue || key;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalizationService, deps: [{ token: i1.SessionStateService }, { token: i0.Injector }, { token: LocalizationService, optional: true, skipSelf: true }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalizationService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalizationService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.SessionStateService }, { type: i0.Injector }, { type: LocalizationService, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: i2.ConfigStateService }] });\nfunction recursivelyMergeBaseResources(baseResourceName, source) {\n const item = source[baseResourceName];\n if (item.baseResources.length === 0) {\n return item;\n }\n return item.baseResources.reduce((acc, baseResource) => {\n const baseItem = recursivelyMergeBaseResources(baseResource, source);\n const texts = { ...baseItem.texts, ...item.texts };\n return { ...acc, texts };\n }, item);\n}\nfunction mergeResourcesWithBaseResource(resource) {\n const entities = Object.keys(resource).map(key => {\n const newValue = recursivelyMergeBaseResources(key, resource);\n return [key, newValue];\n });\n return entities.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});\n}\nfunction combineLegacyandNewResources(legacy, resource) {\n const mergedResource = mergeResourcesWithBaseResource(resource);\n return Object.entries(mergedResource).reduce((acc, [key, value]) => {\n return { ...acc, [key]: value.texts };\n }, legacy);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9sb2NhbGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUs5RCxNQUFNLE9BQU8sbUJBQW1CO0lBZ0NwQjtJQUNBO0lBSUE7SUFwQ0gsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNqQixnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0lBRXpDLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUM1QyxJQUFJLEdBQUcsRUFBK0MsQ0FDdkQsQ0FBQztJQUVNLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEdBQUcsRUFBa0MsQ0FBQyxDQUFDO0lBRXhGOzs7OztPQUtHO0lBQ0YsSUFBSSxlQUFlO1FBQ2xCLE9B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Q0FBQyxFQUFFLEVBQUU7UUFDakUsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIGlzRGV2TW9kZSwgT3B0aW9uYWwsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvLCBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8sIExvY2FsaXphdGlvbiwgUm9vdCwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcbmltcG9ydCB7IGxvY2FsaXphdGlvbnMkLCBDT1JFX09QVElPTlMgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgY3JlYXRlTG9jYWxpemVyLCBjcmVhdGVMb2NhbGl6ZXJXaXRoRmFsbGJhY2ssIGludGVycG9sYXRlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tc3RhdGUuc2VydmljZSc7XG5cblxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExvY2FsaXphdGlvblNlcnZpY2Uge1xuIHByaXZhdGUgbGF0ZXN0TGFuZyA9ICdhcic7XG4gIHByaXZhdGUgX2xhbmd1YWdlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIHVpTG9jYWxpemF0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj4oKSxcbiAgKTtcblxuICBwcml2YXRlIGxvY2FsaXphdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudGx5IHNlbGVjdGVkIGxhbmd1YWdlXG4gICAqIEV2ZW4gdGhvdWdoIHRoaXMgbG9va3MgbGlrZSBpdCdzIHJlZHVuZGFudCB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgYGdldExhbmd1YWdlKClgLFxuICAgKiBpdCdzIGFjdHVhbGx5IG5vdC4gVGhpcyBjb3VsZCBiZSBpbnZva2VkIGFueSB0aW1lLCBhbmQgdGhlIGxhdGVzdExhbmcgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlXG4gICAqIHNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpIHZhbHVlLlxuICAgKi9cbiAgIGdldCBjdXJyZW50TGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYXRlc3RMYW5nIHx8IHRoaXMuc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnRMYW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGF0ZXN0TGFuZyB8fCB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMYW5nJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSQoKTtcbiAgfVxuXG4gIGdldCBsYW5ndWFnZUNoYW5nZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VDaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RhdGU6IFNlc3Npb25TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQE9wdGlvbmFsKClcbiAgICBAU2tpcFNlbGYoKVxuICAgIG90aGVySW5zdGFuY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxuICApIHtcbiAgICBpZiAob3RoZXJJbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGl6YXRpb25TZXJ2aWNlIHNob3VsZCBoYXZlIG9ubHkgb25lIGluc3RhbmNlLicpO1xuXG4gICAgdGhpcy5saXN0ZW5Ub1NldExhbmd1YWdlKCk7XG4gICAgdGhpcy5pbml0TG9jYWxpemF0aW9uVmFsdWVzKCk7XG4gICAgIHRoaXMubGF0ZXN0TGFuZyA9IHRoaXMuc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRMb2NhbGl6YXRpb25WYWx1ZXMoKSB7XG4gICAgbG9jYWxpemF0aW9ucyQuc3Vic2NyaWJlKHZhbCA9PiB0aGlzLmFkZExvY2FsaXphdGlvbih2YWwpKTtcblxuICAgIGNvbnN0IGxlZ2FjeVJlc291cmNlcyQgPSB0aGlzLmNvbmZpZ1N0YXRlLmdldERlZXAkKCdsb2NhbGl6YXRpb24udmFsdWVzJykgYXMgT2JzZXJ2YWJsZTxcbiAgICAgIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+XG4gICAgPjtcblxuICAgIGNvbnN0IHJlbW90ZUxvY2FsaXphdGlvbnMkID0gdGhpcy5jb25maWdTdGF0ZS5nZXREZWVwJCgnbG9jYWxpemF0aW9uLnJlc291cmNlcycpIGFzIE9ic2VydmFibGU8XG4gICAgICBSZWNvcmQ8c3RyaW5nLCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvPlxuICAgID47XG5cbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UkID0gdGhpcy5zZXNzaW9uU3RhdGUuZ2V0TGFuZ3VhZ2UkKCk7XG5cbiAgICBjb25zdCB1aUxvY2FsaXphdGlvbnMkID0gY29tYmluZUxhdGVzdChbY3VycmVudExhbmd1YWdlJCwgdGhpcy51aUxvY2FsaXphdGlvbnMkXSkucGlwZShcbiAgICAgIG1hcCgoW2N1cnJlbnRMYW5nLCBsb2NhbGl6YXRpb25zXSkgPT4gbG9jYWxpemF0aW9ucy5nZXQoY3VycmVudExhbmcpKSxcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbbGVnYWN5UmVzb3VyY2VzJCwgcmVtb3RlTG9jYWxpemF0aW9ucyQsIHVpTG9jYWxpemF0aW9ucyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW2xlZ2FjeSwgcmVzb3VyY2UsIGxvY2FsXSkgPT4ge1xuICAgICAgICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZW1vdGUgPSBjb21iaW5lTGVnYWN5YW5kTmV3UmVzb3VyY2VzKGxlZ2FjeSB8fCB7fSwgcmVzb3VyY2UpO1xuICAgICAgICAgIGlmIChyZW1vdGUpIHtcbiAgICAgICAgICAgIGlmICghbG9jYWwpIHtcbiAgICAgICAgICAgICAgbG9jYWwgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlbW90ZSkuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGVudHJ5WzBdO1xuICAgICAgICAgICAgICBjb25zdCByZW1vdGVUZXh0cyA9IGVudHJ5WzFdO1xuICAgICAgICAgICAgICBsZXQgcmVzb3VyY2UgPSBsb2NhbD8uZ2V0KHJlc291cmNlTmFtZSkgfHwge307XG4gICAgICAgICAgICAgIHJlc291cmNlID0geyAuLi5yZXNvdXJjZSwgLi4ucmVtb3RlVGV4dHMgfTtcblxuICAgICAgICAgICAgICBsb2NhbD8uc2V0KHJlc291cmNlTmFtZSwgcmVzb3VyY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGxvY2FsO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh2YWwgPT4gdGhpcy5sb2NhbGl6YXRpb25zJC5uZXh0KHZhbCkpO1xuICB9XG5cbiAgYWRkTG9jYWxpemF0aW9uKGxvY2FsaXphdGlvbnM/OiBMb2NhbGl6YXRpb25bXSkge1xuICAgIGlmICghbG9jYWxpemF0aW9ucykgcmV0dXJuO1xuXG4gICAgY29uc3QgbG9jYWxpemF0aW9uTWFwID0gdGhpcy51aUxvY2FsaXphdGlvbnMkLnZhbHVlO1xuXG4gICAgbG9jYWxpemF0aW9ucy5mb3JFYWNoKGxvYyA9PiB7XG4gICAgICBjb25zdCBjdWx0dXJlTWFwID1cbiAgICAgICAgbG9jYWxpemF0aW9uTWFwLmdldChsb2MuY3VsdHVyZSkgfHwgbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCk7XG5cbiAgICAgIGxvYy5yZXNvdXJjZXMuZm9yRWFjaChyZXMgPT4ge1xuICAgICAgICBsZXQgcmVzb3VyY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBjdWx0dXJlTWFwLmdldChyZXMucmVzb3VyY2VOYW1lKSB8fCB7fTtcblxuICAgICAgICByZXNvdXJjZSA9IHsgLi4ucmVzb3VyY2UsIC4uLnJlcy50ZXh0cyB9O1xuXG4gICAgICAgIGN1bHR1cmVNYXAuc2V0KHJlcy5yZXNvdXJjZU5hbWUsIHJlc291cmNlKTtcbiAgICAgIH0pO1xuXG4gICAgICBsb2NhbGl6YXRpb25NYXAuc2V0KGxvYy5jdWx0dXJlLCBjdWx0dXJlTWFwKTtcbiAgICB9KTtcblxuICAgIHRoaXMudWlMb2NhbGl6YXRpb25zJC5uZXh0KGxvY2FsaXphdGlvbk1hcCk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRvU2V0TGFuZ3VhZ2UoKSB7XG4gICAgdGhpcy5zZXNzaW9uU3RhdGVcbiAgICAgIC5vbkxhbmd1YWdlQ2hhbmdlJCgpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIGxhbmcgPT4gdGhpcy5jb25maWdTdGF0ZS5nZXREZWVwKCdsb2NhbGl6YXRpb24uY3VycmVudEN1bHR1cmUuY3VsdHVyZU5hbWUnKSAhPT0gbGFuZyxcbiAgICAgICAgKSxcbiAgICAgICAgc3dpdGNoTWFwKChsYW5nOmFueSkgPT4gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoTG9jYWxpemF0aW9uKGxhbmcpLnBpcGUobWFwKCgpID0+IGxhbmcpKSksXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgc3dpdGNoTWFwKChsYW5nOmFueSkgPT4gZnJvbSh0aGlzLnJlZ2lzdGVyTG9jYWxlKGxhbmcpLnRoZW4oKCkgPT4gbGFuZykpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxhbmc6YW55KSA9PiB0aGlzLl9sYW5ndWFnZUNoYW5nZSQubmV4dChsYW5nKSk7XG4gIH1cblxuICByZWdpc3RlckxvY2FsZShsb2NhbGU6IHN0cmluZykge1xuICAgIGNvbnN0IHsgcmVnaXN0ZXJMb2NhbGVGbiB9OiBSb290ID0gdGhpcy5pbmplY3Rvci5nZXQoQ09SRV9PUFRJT05TKTtcblxuICAgIHJldHVybiByZWdpc3RlckxvY2FsZUZuKGxvY2FsZSkudGhlbihtb2R1bGUgPT4ge1xuICAgICAgaWYgKG1vZHVsZT8uZGVmYXVsdCkgcmVnaXN0ZXJMb2NhbGVEYXRhKG1vZHVsZS5kZWZhdWx0KTtcbiAgICAgIHRoaXMubGF0ZXN0TGFuZyA9IGxvY2FsZTtcbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIGxvY2FsaXplZCB0ZXh0IHdpdGggdGhlIGdpdmVuIGludGVycG9sYXRpb24gcGFyYW1ldGVycyBpbiBjdXJyZW50IGxhbmd1YWdlLlxuICAgKiBAcGFyYW0ga2V5IExvY2FsaXphdG9uIGtleSB0byByZXBsYWNlIHdpdGggbG9jYWxpemVkIHRleHRcbiAgICogQHBhcmFtIGludGVycG9sYXRlUGFyYW1zIFZhbHVlcyB0byBpbnRlcnBvbGF0ZVxuICAgKi9cbiAgZ2V0KGtleTogc3RyaW5nIHwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQsIC4uLmludGVycG9sYXRlUGFyYW1zOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RhdGVcbiAgICAgIC5nZXRBbGwkKClcbiAgICAgIC5waXBlKG1hcChzdGF0ZSA9PiB0aGlzLmdldExvY2FsaXphdGlvbihzdGF0ZSwga2V5LCAuLi5pbnRlcnBvbGF0ZVBhcmFtcykpKTtcbiAgfVxuXG4gIGdldFJlc291cmNlKHJlc291cmNlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9ucyQudmFsdWUuZ2V0KHJlc291cmNlTmFtZSk7XG4gIH1cblxuICBnZXRSZXNvdXJjZSQocmVzb3VyY2VOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25zJC5waXBlKG1hcChyZXMgPT4gcmVzLmdldChyZXNvdXJjZU5hbWUpKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBsb2NhbGl6ZWQgdGV4dCB3aXRoIHRoZSBnaXZlbiBpbnRlcnBvbGF0aW9uIHBhcmFtZXRlcnMgaW4gY3VycmVudCBsYW5ndWFnZS5cbiAgICogQHBhcmFtIGtleSBMb2NhbGl6YXRpb24ga2V5IHRvIHJlcGxhY2Ugd2l0aCBsb2NhbGl6ZWQgdGV4dFxuICAgKiBAcGFyYW0gaW50ZXJwb2xhdGVQYXJhbXMgVmFsdWVzIHRvIGludGVwb2xhdGUuXG4gICAqL1xuICBpbnN0YW50KGtleTogc3RyaW5nIHwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQsIC4uLmludGVycG9sYXRlUGFyYW1zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemF0aW9uKHRoaXMuY29uZmlnU3RhdGUuZ2V0QWxsKCksIGtleSwgLi4uaW50ZXJwb2xhdGVQYXJhbXMpO1xuICB9XG5cbiAgbG9jYWxpemUocmVzb3VyY2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSQoJ2xvY2FsaXphdGlvbicpLnBpcGUoXG4gICAgICBtYXAoY3JlYXRlTG9jYWxpemVyKSxcbiAgICAgIG1hcCgobG9jYWxpemU6YW55KSA9PiBsb2NhbGl6ZShyZXNvdXJjZU5hbWUsIGtleSwgZGVmYXVsdFZhbHVlKSksXG4gICAgKTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0UmVzb3VyY2VOYW1lKCl7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RhdGUuZ2V0QWxsKCkubG9jYWxpemF0aW9uID8gdGhpcy5jb25maWdTdGF0ZS5nZXRBbGwoKS5sb2NhbGl6YXRpb24uZGVmYXVsdFJlc291cmNlTmFtZSA6ICdGcmFtZXdvcmtMb2NhbGl6YXRpb24nO1xuICB9XG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBsb2NhbGl6YXRpb24gPSB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSgnbG9jYWxpemF0aW9uJyk7XG4gICAgcmV0dXJuIGNyZWF0ZUxvY2FsaXplcihsb2NhbGl6YXRpb24pKHRoaXMuZGVmYXVsdFJlc291cmNlTmFtZSA/PyAnJywga2V5LCBrZXkpO1xuICB9XG4gIGxvY2FsaXplU3luYyhyZXNvdXJjZU5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbG9jYWxpemF0aW9uID0gdGhpcy5jb25maWdTdGF0ZS5nZXRPbmUoJ2xvY2FsaXphdGlvbicpO1xuICAgIHJldHVybiBjcmVhdGVMb2NhbGl6ZXIobG9jYWxpemF0aW9uKShyZXNvdXJjZU5hbWUsIGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIGxvY2FsaXplV2l0aEZhbGxiYWNrKFxuICAgIHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLFxuICAgIGtleXM6IHN0cmluZ1tdLFxuICAgIGRlZmF1bHRWYWx1ZTogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSQoJ2xvY2FsaXphdGlvbicpLnBpcGUoXG4gICAgICBtYXAoY3JlYXRlTG9jYWxpemVyV2l0aEZhbGxiYWNrKSxcbiAgICAgIG1hcCgobG9jYWxpemVXaXRoRmFsbGJhY2s6YW55KSA9PiBsb2NhbGl6ZVdpdGhGYWxsYmFjayhyZXNvdXJjZU5hbWVzLCBrZXlzLCBkZWZhdWx0VmFsdWUpKSxcbiAgICApO1xuICB9XG5cbiAgbG9jYWxpemVXaXRoRmFsbGJhY2tTeW5jKHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLCBrZXlzOiBzdHJpbmdbXSwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2FsaXphdGlvbiA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdsb2NhbGl6YXRpb24nKTtcbiAgICByZXR1cm4gY3JlYXRlTG9jYWxpemVyV2l0aEZhbGxiYWNrKGxvY2FsaXphdGlvbikocmVzb3VyY2VOYW1lcywga2V5cywgZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxpemF0aW9uKFxuICAgIHN0YXRlOiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8sXG4gICAga2V5OiBzdHJpbmcgfCBMb2NhbGl6YXRpb25XaXRoRGVmYXVsdCxcbiAgICAuLi5pbnRlcnBvbGF0ZVBhcmFtczogc3RyaW5nW11cbiAgKSB7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZSA9ICcnO1xuXG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBrZXkuZGVmYXVsdFZhbHVlO1xuICAgICAga2V5ID0ga2V5LmtleTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCc6OicpIGFzIHN0cmluZ1tdO1xuICAgIGNvbnN0IHdhcm4gPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9O1xuXG4gICAgaWYgKGtleXMubGVuZ3RoIDwgMikge1xuICAgICAgd2FybignVGhlIGxvY2FsaXphdGlvbiBzb3VyY2Ugc2VwYXJhdG9yICg6Oikgbm90IGZvdW5kLicpO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCAoa2V5IGFzIHN0cmluZyk7XG4gICAgfVxuICAgIGlmICghc3RhdGUubG9jYWxpemF0aW9uKSByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IGtleXNbMV07XG5cbiAgICBjb25zdCBzb3VyY2VOYW1lID0ga2V5c1swXSB8fCBzdGF0ZS5sb2NhbGl6YXRpb24uZGVmYXVsdFJlc291cmNlTmFtZTtcbiAgICBjb25zdCBzb3VyY2VLZXkgPSBrZXlzWzFdO1xuXG4gICAgaWYgKHNvdXJjZU5hbWUgPT09ICdfJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBzb3VyY2VLZXk7XG4gICAgfVxuXG4gICAgaWYgKCFzb3VyY2VOYW1lKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnTG9jYWxpemF0aW9uIHNvdXJjZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBkZWZhdWx0UmVzb3VyY2VOYW1lIHdhcyBub3QgZGVmaW5lZCEnLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBzb3VyY2VLZXk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5sb2NhbGl6YXRpb25zJC52YWx1ZS5nZXQoc291cmNlTmFtZSk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHdhcm4oJ0NvdWxkIG5vdCBmaW5kIGxvY2FsaXphdGlvbiBzb3VyY2U6ICcgKyBzb3VyY2VOYW1lKTtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgc291cmNlS2V5O1xuICAgIH1cblxuICAgIGxldCBsb2NhbGl6YXRpb24gPSBzb3VyY2Vbc291cmNlS2V5XTtcbiAgICBpZiAodHlwZW9mIGxvY2FsaXphdGlvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgc291cmNlS2V5O1xuICAgIH1cblxuICAgIGludGVycG9sYXRlUGFyYW1zID0gaW50ZXJwb2xhdGVQYXJhbXMuZmlsdGVyKHBhcmFtcyA9PiBwYXJhbXMgIT0gbnVsbCk7XG4gICAgaWYgKGxvY2FsaXphdGlvbikgbG9jYWxpemF0aW9uID0gaW50ZXJwb2xhdGUobG9jYWxpemF0aW9uLCBpbnRlcnBvbGF0ZVBhcmFtcyk7XG5cbiAgICBpZiAodHlwZW9mIGxvY2FsaXphdGlvbiAhPT0gJ3N0cmluZycpIGxvY2FsaXphdGlvbiA9ICcnO1xuXG4gICAgcmV0dXJuIGxvY2FsaXphdGlvbiB8fCBkZWZhdWx0VmFsdWUgfHwgKGtleSBhcyBzdHJpbmcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5TWVyZ2VCYXNlUmVzb3VyY2VzKFxuICBiYXNlUmVzb3VyY2VOYW1lOiBzdHJpbmcsXG4gIHNvdXJjZTogUmVzb3VyY2VEdG8sXG4pOiBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvIHtcbiAgY29uc3QgaXRlbSA9IHNvdXJjZVtiYXNlUmVzb3VyY2VOYW1lXTtcblxuICBpZiAoaXRlbS5iYXNlUmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW0uYmFzZVJlc291cmNlcy5yZWR1Y2UoKGFjYywgYmFzZVJlc291cmNlKSA9PiB7XG4gICAgY29uc3QgYmFzZUl0ZW0gPSByZWN1cnNpdmVseU1lcmdlQmFzZVJlc291cmNlcyhiYXNlUmVzb3VyY2UsIHNvdXJjZSk7XG4gICAgY29uc3QgdGV4dHMgPSB7IC4uLmJhc2VJdGVtLnRleHRzLCAuLi5pdGVtLnRleHRzIH07XG4gICAgcmV0dXJuIHsgLi4uYWNjLCB0ZXh0cyB9O1xuICB9LCBpdGVtKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VSZXNvdXJjZXNXaXRoQmFzZVJlc291cmNlKHJlc291cmNlOiBSZXNvdXJjZUR0byk6IFJlc291cmNlRHRvIHtcbiAgY29uc3QgZW50aXRpZXM6IEFycmF5PFtzdHJpbmcsIEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uUmVzb3VyY2VEdG9dPiA9IE9iamVjdC5rZXlzKHJlc291cmNlKS5tYXAoXG4gICAga2V5ID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVjdXJzaXZlbHlNZXJnZUJhc2VSZXNvdXJjZXMoa2V5LCByZXNvdXJjZSk7XG4gICAgICByZXR1cm4gW2tleSwgbmV3VmFsdWVdO1xuICAgIH0sXG4gICk7XG4gIHJldHVybiBlbnRpdGllcy5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoeyAuLi5hY2MsIFtrZXldOiB2YWx1ZSB9KSwge30pO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lTGVnYWN5YW5kTmV3UmVzb3VyY2VzKFxuICBsZWdhY3k6IExlZ2FjeUxhbmd1YWdlRHRvLFxuICByZXNvdXJjZTogUmVzb3VyY2VEdG8sXG4pOiBMZWdhY3lMYW5ndWFnZUR0byB7XG4gIGNvbnN0IG1lcmdlZFJlc291cmNlID0gbWVyZ2VSZXNvdXJjZXNXaXRoQmFzZVJlc291cmNlKHJlc291cmNlKTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMobWVyZ2VkUmVzb3VyY2UpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiB2YWx1ZS50ZXh0cyB9O1xuICB9LCBsZWdhY3kpO1xufVxuXG5leHBvcnQgdHlwZSBMZWdhY3lMYW5ndWFnZUR0byA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VEdG8gPSBSZWNvcmQ8c3RyaW5nLCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvPjtcbiJdfQ==","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class LocalStorageListenerService {\n window = inject(DOCUMENT).defaultView;\n constructor() {\n this.window?.addEventListener('storage', event => {\n if (event.key === 'access_token') {\n const tokenRemoved = event.newValue === null;\n const tokenAdded = event.oldValue === null && event.newValue !== null;\n if (tokenRemoved || tokenAdded) {\n this.window?.location.assign('/');\n }\n }\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageListenerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageListenerService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageListenerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1saXN0ZW5lci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvbG9jYWwtc3RvcmFnZS1saXN0ZW5lci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJbkQsTUFBTSxPQUFPLDJCQUEyQjtJQUNuQixNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUV6RDtRQUNFLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQy9DLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7Z0JBQzdDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO2dCQUV0RSxJQUFJLFlBQVksSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0FkVSwyQkFBMkI7MkdBQTNCLDJCQUEyQixjQUYxQixNQUFNOzsyRkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlTGlzdGVuZXJTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChET0NVTUVOVCkuZGVmYXVsdFZpZXc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy53aW5kb3c/LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnYWNjZXNzX3Rva2VuJykge1xuICAgICAgICBjb25zdCB0b2tlblJlbW92ZWQgPSBldmVudC5uZXdWYWx1ZSA9PT0gbnVsbDtcbiAgICAgICAgY29uc3QgdG9rZW5BZGRlZCA9IGV2ZW50Lm9sZFZhbHVlID09PSBudWxsICYmIGV2ZW50Lm5ld1ZhbHVlICE9PSBudWxsO1xuXG4gICAgICAgIGlmICh0b2tlblJlbW92ZWQgfHwgdG9rZW5BZGRlZCkge1xuICAgICAgICAgIHRoaXMud2luZG93Py5sb2NhdGlvbi5hc3NpZ24oJy8nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { SsrCookieService } from './ssr-cookie.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./ssr-cookie.service\";\nexport class LocalStorageService {\n cookieService;\n constructor(cookieService) {\n this.cookieService = cookieService;\n }\n getItem(key, callback) {\n if (!this.cookieService) {\n return '';\n }\n var value = this.cookieService.get(key);\n if (callback) {\n callback();\n }\n return value;\n }\n setItem(key, value, callback) {\n if (!this.cookieService) {\n return;\n }\n if (value === null) {\n value = undefined;\n }\n this.cookieService.set(key, value, { expires: new Date(new Date().getTime() + 365 * 86400000), path: '/' });\n // debugger\n if (callback) {\n callback();\n }\n }\n removeItem(key, callback) {\n if (!this.cookieService) {\n return;\n }\n this.cookieService.delete(key);\n if (callback) {\n callback();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageService, deps: [{ token: i1.SsrCookieService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LocalStorageService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.SsrCookieService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUt4RCxNQUFNLE9BQU8sbUJBQW1CO0lBSXRCO0lBRFIsWUFDUSxhQUErQjtRQUEvQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7SUFDckMsQ0FBQztJQUdELE9BQU8sQ0FBQyxHQUFXLEVBQUUsUUFBYztRQUUvQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsQ0FBQztRQUNiLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBR0QsT0FBTyxDQUFDLEdBQVcsRUFBRSxLQUE2QixFQUFFLFFBQWM7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2pCLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDdkcsV0FBVztRQUNYLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsQ0FBQztRQUNiLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQU8sRUFBRSxRQUFjO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDO0lBQ0wsQ0FBQzt1R0FqRFEsbUJBQW1COzJHQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNzckNvb2tpZVNlcnZpY2UgfSBmcm9tICcuL3Nzci1jb29raWUuc2VydmljZSc7XG5cblxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlU2VydmljZSB7XG5cblxuICBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGNvb2tpZVNlcnZpY2U6IFNzckNvb2tpZVNlcnZpY2UsXG5cdCkge31cblxuXG4gICAgZ2V0SXRlbShrZXk6IHN0cmluZywgY2FsbGJhY2s/OiBhbnkpOiBhbnkge1xuXG4gICAgICAgIGlmICghdGhpcy5jb29raWVTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cblxuICAgIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBudWxsIHwgdW5kZWZpbmVkIHwgYW55LCBjYWxsYmFjaz86IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29va2llU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoa2V5LCB2YWx1ZSx7ZXhwaXJlczpuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDM2NSAqIDg2NDAwMDAwKSwgcGF0aDonLyd9KTtcbiAgICAgICAgLy8gZGVidWdnZXJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUl0ZW0oa2V5OmFueSwgY2FsbGJhY2s/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvb2tpZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29va2llU2VydmljZS5kZWxldGUoa2V5KTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cblxuXG5cblxuXG59XG4iXX0=","import { Injectable, effect, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TitleStrategy } from '@angular/router';\nimport { Title } from '@angular/platform-browser';\nimport { LocalizationService } from './localization.service';\nimport { DISABLE_PROJECT_NAME } from '@elite.framework/ng.core/tokens';\nimport * as i0 from \"@angular/core\";\nexport class FrameworkTitleStrategy extends TitleStrategy {\n title = inject(Title);\n localizationService = inject(LocalizationService);\n disableProjectName = inject(DISABLE_PROJECT_NAME, { optional: true });\n routerState;\n langugageChange = toSignal(this.localizationService.languageChange$);\n constructor() {\n super();\n effect(() => {\n if (this.langugageChange()) {\n this.updateTitle(this.routerState);\n }\n });\n }\n updateTitle(routerState) {\n this.routerState = routerState;\n const title = this.buildTitle(routerState);\n const projectName = this.localizationService.instant({\n key: '::AppName',\n defaultValue: 'MyProjectName',\n });\n if (!title) {\n return this.title.setTitle(projectName);\n }\n let localizedText = this.localizationService.instant({ key: title, defaultValue: title });\n if (!this.disableProjectName) {\n localizedText += ` | ${projectName}`;\n }\n this.title.setTitle(localizedText);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: FrameworkTitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: FrameworkTitleStrategy, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: FrameworkTitleStrategy, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtc3RyYXRlZ3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3RpdGxlLXN0cmF0ZWd5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFLdkUsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGFBQWE7SUFDcEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxrQkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMvRSxXQUFXLENBQWtDO0lBRXZELGVBQWUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXJFO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLFdBQVcsQ0FBQyxXQUFvQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7WUFDbkQsR0FBRyxFQUFFLFdBQVc7WUFDaEIsWUFBWSxFQUFFLGVBQWU7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLGFBQWEsSUFBSSxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyQyxDQUFDO3VHQXBDVSxzQkFBc0I7MkdBQXRCLHNCQUFzQixjQUZyQixNQUFNOzsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVGl0bGVTdHJhdGVneSwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4vbG9jYWxpemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRElTQUJMRV9QUk9KRUNUX05BTUUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEZyYW1ld29ya1RpdGxlU3RyYXRlZ3kgZXh0ZW5kcyBUaXRsZVN0cmF0ZWd5IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpdGxlID0gaW5qZWN0KFRpdGxlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsaXphdGlvblNlcnZpY2UgPSBpbmplY3QoTG9jYWxpemF0aW9uU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkaXNhYmxlUHJvamVjdE5hbWUgPSBpbmplY3QoRElTQUJMRV9QUk9KRUNUX05BTUUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByb3RlY3RlZCByb3V0ZXJTdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCB8IHVuZGVmaW5lZDtcblxuICBsYW5ndWdhZ2VDaGFuZ2UgPSB0b1NpZ25hbCh0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UubGFuZ3VhZ2VDaGFuZ2UkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sYW5ndWdhZ2VDaGFuZ2UoKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKHRoaXMucm91dGVyU3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgdXBkYXRlVGl0bGUocm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3R8YW55KSB7XG4gICAgdGhpcy5yb3V0ZXJTdGF0ZSA9IHJvdXRlclN0YXRlO1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5idWlsZFRpdGxlKHJvdXRlclN0YXRlKTtcblxuICAgIGNvbnN0IHByb2plY3ROYW1lID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoe1xuICAgICAga2V5OiAnOjpBcHBOYW1lJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ015UHJvamVjdE5hbWUnLFxuICAgIH0pO1xuXG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGl0bGUuc2V0VGl0bGUocHJvamVjdE5hbWUpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbGl6ZWRUZXh0ID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoeyBrZXk6IHRpdGxlLCBkZWZhdWx0VmFsdWU6IHRpdGxlIH0pO1xuICAgIGlmICghdGhpcy5kaXNhYmxlUHJvamVjdE5hbWUpIHtcbiAgICAgIGxvY2FsaXplZFRleHQgKz0gYCB8ICR7cHJvamVjdE5hbWV9YDtcbiAgICB9XG5cbiAgICB0aGlzLnRpdGxlLnNldFRpdGxlKGxvY2FsaXplZFRleHQpO1xuICB9XG59XG4iXX0=","import { InjectionToken, inject } from '@angular/core';\nimport { LocalizationService } from '../localization.service';\nexport const SORT_COMPARE_FUNC = new InjectionToken('SORT_COMPARE_FUNC');\nexport function compareFuncFactory() {\n const localizationService = inject(LocalizationService);\n const fn = (a, b) => {\n const aNumber = a.order;\n const bNumber = b.order;\n if (aNumber > bNumber)\n return 1;\n if (aNumber < bNumber)\n return -1;\n if (a.id > b.id)\n return 1;\n if (a.id < b.id)\n return -1;\n if (!Number.isInteger(aNumber))\n return 1;\n if (!Number.isInteger(bNumber))\n return -1;\n const aName = localizationService.instant(a.name);\n const bName = localizationService.instant(b.name);\n // const aName = localizationService.localize(a.name,'ERP');\n // const bName = localizationService.localize(b.name,'ERP');\n if (aName > bName)\n return 1;\n if (aName < bName)\n return -1;\n return 0;\n };\n return fn;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS1mdW5jLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvdXRpbHMvY29tcGFyZS1mdW5jLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUNqRCxtQkFBbUIsQ0FDcEIsQ0FBQztBQUVGLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQW1CLEVBQUUsQ0FBbUIsRUFBRSxFQUFFO1FBQ3RELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUU7UUFDekIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBRTtRQUV6QixJQUFJLE9BQU8sR0FBRyxPQUFPO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLEdBQUcsT0FBTztZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCw0REFBNEQ7UUFDNUQsNERBQTREO1FBQzVELElBQUksS0FBSyxHQUFHLEtBQUs7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssR0FBRyxLQUFLO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUU3QixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlSXRlbSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IFNPUlRfQ09NUEFSRV9GVU5DID0gbmV3IEluamVjdGlvblRva2VuPChhOiBTb3J0YWJsZUl0ZW0sIGI6IFNvcnRhYmxlSXRlbSkgPT4gbnVtYmVyPihcbiAgJ1NPUlRfQ09NUEFSRV9GVU5DJyxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlRnVuY0ZhY3RvcnkoKSB7XG4gIGNvbnN0IGxvY2FsaXphdGlvblNlcnZpY2UgPSBpbmplY3QoTG9jYWxpemF0aW9uU2VydmljZSk7XG4gIGNvbnN0IGZuID0gKGE6IFNvcnRhYmxlSXRlbXxhbnksIGI6IFNvcnRhYmxlSXRlbXxhbnkpID0+IHtcbiAgICBjb25zdCBhTnVtYmVyID0gYS5vcmRlciA7XG4gICAgY29uc3QgYk51bWJlciA9IGIub3JkZXIgO1xuXG4gICAgaWYgKGFOdW1iZXIgPiBiTnVtYmVyKSByZXR1cm4gMTtcbiAgICBpZiAoYU51bWJlciA8IGJOdW1iZXIpIHJldHVybiAtMTtcblxuICAgIGlmIChhLmlkID4gYi5pZCkgcmV0dXJuIDE7XG4gICAgaWYgKGEuaWQgPCBiLmlkKSByZXR1cm4gLTE7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYU51bWJlcikpIHJldHVybiAxO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihiTnVtYmVyKSkgcmV0dXJuIC0xO1xuXG4gICAgY29uc3QgYU5hbWUgPSBsb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYS5uYW1lKTtcbiAgICBjb25zdCBiTmFtZSA9IGxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChiLm5hbWUpO1xuICAgIC8vIGNvbnN0IGFOYW1lID0gbG9jYWxpemF0aW9uU2VydmljZS5sb2NhbGl6ZShhLm5hbWUsJ0VSUCcpO1xuICAgIC8vIGNvbnN0IGJOYW1lID0gbG9jYWxpemF0aW9uU2VydmljZS5sb2NhbGl6ZShiLm5hbWUsJ0VSUCcpO1xuICAgIGlmIChhTmFtZSA+IGJOYW1lKSByZXR1cm4gMTtcbiAgICBpZiAoYU5hbWUgPCBiTmFtZSkgcmV0dXJuIC0xO1xuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgcmV0dXJuIGZuO1xufVxuIl19","import { Injectable, Injector } from '@angular/core';\nimport { BaseTreeNode, createGroupMap, createTreeFromList, pushValueTo } from '@elite.framework/ng.core/utils';\nimport { BehaviorSubject, map } from 'rxjs';\nimport { PermissionCheckerService } from './permission-checker.service';\nimport { OTHERS_GROUP } from '@elite.framework/ng.core/tokens';\nimport { ConfigStateService } from './config-state.service';\nimport { SORT_COMPARE_FUNC } from './utils/compare-func.token';\nimport * as i0 from \"@angular/core\";\nexport class AbstractTreeService {\n _flat$ = new BehaviorSubject([]);\n _tree$ = new BehaviorSubject([]);\n _visible$ = new BehaviorSubject([]);\n othersGroup;\n shouldSingularizeRoutes = true;\n get flat() {\n return this._flat$.value;\n }\n get flat$() {\n return this._flat$.asObservable();\n }\n get tree() {\n return this._tree$.value;\n }\n get tree$() {\n return this._tree$.asObservable();\n }\n get visible() {\n return this._visible$.value;\n }\n get visible$() {\n return this._visible$.asObservable();\n }\n filterWith(setOrMap) {\n return this._flat$.value.filter(item => !setOrMap.has(item[this.id]));\n }\n findItemsToRemove(set) {\n return this._flat$.value.reduce((acc, item) => {\n if (!acc.has(item[this.parentId])) {\n return acc;\n }\n const childSet = new Set([item[this.id]]);\n const children = this.findItemsToRemove(childSet);\n return new Set([...acc, ...children]);\n }, set);\n }\n publish(flatItems) {\n this._flat$.next(flatItems);\n this._tree$.next(this.createTree(flatItems));\n this._visible$.next(this.createTree(flatItems.filter(item => !this.hide(item))));\n return flatItems;\n }\n createTree(items) {\n return createTreeFromList(items, item => item[this.id], item => item[this.parentId], item => BaseTreeNode.create(item));\n }\n createGroupedTree(list) {\n const map = createGroupMap(list, this.othersGroup);\n if (!map) {\n return undefined;\n }\n return Array.from(map, ([key, items]) => ({ group: key, items }));\n }\n add(items) {\n let flatItems = [];\n if (!this.shouldSingularizeRoutes) {\n flatItems = [...this.flat, ...items];\n }\n if (this.shouldSingularizeRoutes) {\n const map = new Map();\n items.forEach(item => map.set(item[this.id], item));\n flatItems = this.filterWith(map);\n map.forEach(pushValueTo(flatItems));\n }\n flatItems.sort(this.sort);\n return this.publish(flatItems);\n }\n find(predicate, tree = this.tree) {\n return tree.reduce((acc, node) => {\n if (acc) {\n return acc;\n }\n if (predicate(node)) {\n return node;\n }\n return this.find(predicate, node.children);\n }, null);\n }\n patch(identifier, props) {\n const flatItems = this._flat$.value;\n const index = flatItems.findIndex(item => item[this.id] === identifier);\n if (index < 0) {\n return false;\n }\n flatItems[index] = { ...flatItems[index], ...props };\n flatItems.sort(this.sort);\n return this.publish(flatItems);\n }\n refresh() {\n return this.add([]);\n }\n remove(identifiers) {\n const set = new Set();\n identifiers.forEach(id => set.add(id));\n const setToRemove = this.findItemsToRemove(set);\n const flatItems = this.filterWith(setToRemove);\n return this.publish(flatItems);\n }\n removeByParam(params) {\n if (!params) {\n return null;\n }\n const keys = Object.keys(params);\n if (keys.length === 0) {\n return null;\n }\n const excludedList = this.flat.filter(item => keys.every(key => item[key] === params[key]));\n if (!excludedList?.length) {\n return null;\n }\n for (const item of excludedList) {\n this.removeByParam({ [this.parentId]: item[this.id] });\n }\n const flatItems = this.flat.filter(item => !excludedList.includes(item));\n return this.publish(flatItems);\n }\n search(params, tree = this.tree) {\n const searchKeys = Object.keys(params);\n return tree.reduce((acc, node) => {\n if (acc) {\n return acc;\n }\n if (searchKeys.every(key => node[key] === params[key])) {\n return node;\n }\n return this.search(params, node.children);\n }, null);\n }\n setSingularizeStatus(singularize = true) {\n this.shouldSingularizeRoutes = singularize;\n }\n}\nexport class AbstractNavTreeService extends AbstractTreeService {\n injector;\n subscription;\n permissionService;\n compareFunc;\n id = 'name';\n parentId = 'parentName';\n hide = (item) => item.invisible || !this.isGranted(item);\n sort = (a, b) => {\n return this.compareFunc(a, b);\n };\n constructor(injector) {\n super();\n this.injector = injector;\n // TODO Merge Dynamic Nav Too!\n const configState = this.injector.get(ConfigStateService);\n this.subscription = configState\n .createOnUpdateStream((state) => state)\n .subscribe(() => this.refresh());\n this.permissionService = injector.get(PermissionCheckerService);\n this.othersGroup = injector.get(OTHERS_GROUP);\n this.compareFunc = injector.get(SORT_COMPARE_FUNC);\n }\n isGranted({ requiredPolicy }) {\n return this.permissionService.getGrantedPolicy(requiredPolicy);\n }\n hasChildren(identifier) {\n const node = this.find(item => item[this.id] === identifier);\n return Boolean(node?.children?.length);\n }\n hasInvisibleChild(identifier) {\n const node = this.find(item => item[this.id] === identifier);\n return node?.children?.some(child => child.invisible) || false;\n }\n /* istanbul ignore next */\n ngOnDestroy() {\n // this.subscription.unsubscribe();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AbstractNavTreeService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AbstractNavTreeService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AbstractNavTreeService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i0.Injector }] });\nexport class RoutesService extends AbstractNavTreeService {\n hasPathOrChild(item) {\n return Boolean(item.path) || this.hasChildren(item.name);\n }\n get groupedVisible() {\n return this.createGroupedTree(this.visible.filter(item => this.hasPathOrChild(item)));\n }\n get groupedVisible$() {\n return this.visible$.pipe(map(items => items.filter(item => this.hasPathOrChild(item))), map(visible => this.createGroupedTree(visible)));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9yb3V0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQXdCLE1BQU0sZ0NBQWdDLENBQUM7QUFDckksT0FBTyxFQUFFLGVBQWUsRUFBNEIsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFL0QsTUFBTSxPQUFnQixtQkFBbUI7SUFNL0IsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7SUFDaEQsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUVqRCxXQUFXLENBQWE7SUFDeEIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0lBRXpDLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVPLFVBQVUsQ0FBQyxRQUFzQztRQUN2RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8saUJBQWlCLENBQUMsR0FBZ0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVPLE9BQU8sQ0FBQyxTQUFjO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVTLFVBQVUsQ0FBQyxLQUFVO1FBQzdCLE9BQU8sa0JBQWtCLENBQ3ZCLEtBQUssRUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDM0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVTLGlCQUFpQixDQUFDLElBQW1CO1FBQzdDLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQVU7UUFDWixJQUFJLFNBQVMsR0FBUSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFhLENBQUM7WUFDakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BELFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQXlDLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJO1FBQzlELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBcUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUM7WUFFRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQWtCLEVBQUUsS0FBaUI7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDeEUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1FBRXJELFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQXFCO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDOUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFrQjtRQUM5QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBNEIsQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFnQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBa0IsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUk7UUFDekMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQTRCLENBQUM7UUFFbEUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFxQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNuRCxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUVELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsV0FBVyxHQUFHLElBQUk7UUFDckMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFdBQVcsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFHRCxNQUFNLE9BQWdCLHNCQUNwQixTQUFRLG1CQUFzQjtJQWFSO0lBVmQsWUFBWSxDQUFlO0lBQzNCLGlCQUFpQixDQUEyQjtJQUM1QyxXQUFXLENBQUM7SUFDWCxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ1osUUFBUSxHQUFHLFlBQVksQ0FBQztJQUN4QixJQUFJLEdBQUcsQ0FBQyxJQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELElBQUksR0FBRyxDQUFDLENBQUksRUFBRSxDQUFJLEVBQUUsRUFBRTtRQUM3QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQztJQUVGLFlBQXNCLFFBQWtCO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRFksYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUV0Qyw4QkFBOEI7UUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVc7YUFDNUIsb0JBQW9CLENBQUMsQ0FBQyxLQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQzthQUMxQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVTLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBSztRQUN2QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsV0FBVyxDQUFDLFVBQWtCO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFVBQWtCO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ2pFLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsV0FBVztRQUNULG1DQUFtQztJQUNyQyxDQUFDO3VHQTNDbUIsc0JBQXNCOzJHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRDNDLFVBQVU7O0FBZ0RYLE1BQU0sT0FBTyxhQUFjLFNBQVEsc0JBQTZCO0lBQ3RELGNBQWMsQ0FBQyxJQUFxQjtRQUMxQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUM3RCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDaEQsQ0FBQztJQUNKLENBQUM7dUdBZFUsYUFBYTsyR0FBYixhQUFhLGNBREEsTUFBTTs7MkZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2LCBSb3V0ZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVRyZWVOb2RlLCBjcmVhdGVHcm91cE1hcCwgY3JlYXRlVHJlZUZyb21MaXN0LCBwdXNoVmFsdWVUbywgUm91dGVHcm91cCwgVHJlZU5vZGUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkNoZWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLWNoZWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPVEhFUlNfR1JPVVAgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU09SVF9DT01QQVJFX0ZVTkMgfSBmcm9tICcuL3V0aWxzL2NvbXBhcmUtZnVuYy50b2tlbic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRyZWVTZXJ2aWNlPFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueSB9PiB7XG4gIGFic3RyYWN0IGlkOiBzdHJpbmc7XG4gIGFic3RyYWN0IHBhcmVudElkOiBzdHJpbmc7XG4gIGFic3RyYWN0IGhpZGU6IChpdGVtOiBUKSA9PiBib29sZWFuO1xuICBhYnN0cmFjdCBzb3J0OiAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xuXG4gIHByaXZhdGUgX2ZsYXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcbiAgcHJpdmF0ZSBfdHJlZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRyZWVOb2RlPFQ+W10+KFtdKTtcbiAgcHJpdmF0ZSBfdmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRyZWVOb2RlPFQ+W10+KFtdKTtcblxuICBwcm90ZWN0ZWQgb3RoZXJzR3JvdXA6IHN0cmluZ3xhbnk7XG4gIHByb3RlY3RlZCBzaG91bGRTaW5ndWxhcml6ZVJvdXRlcyA9IHRydWU7XG5cbiAgZ2V0IGZsYXQoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmxhdCQudmFsdWU7XG4gIH1cblxuICBnZXQgZmxhdCQoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5fZmxhdCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdHJlZSgpOiBUcmVlTm9kZTxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJlZSQudmFsdWU7XG4gIH1cblxuICBnZXQgdHJlZSQoKTogT2JzZXJ2YWJsZTxUcmVlTm9kZTxUPltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHZpc2libGUoKTogVHJlZU5vZGU8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGUkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZpc2libGUkKCk6IE9ic2VydmFibGU8VHJlZU5vZGU8VD5bXT4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyV2l0aChzZXRPck1hcDogU2V0PHN0cmluZz4gfCBNYXA8c3RyaW5nLCBUPik6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZsYXQkLnZhbHVlLmZpbHRlcihpdGVtID0+ICFzZXRPck1hcC5oYXMoaXRlbVt0aGlzLmlkXSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSXRlbXNUb1JlbW92ZShzZXQ6IFNldDxzdHJpbmc+KTogU2V0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9mbGF0JC52YWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFhY2MuaGFzKGl0ZW1bdGhpcy5wYXJlbnRJZF0pKSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoaWxkU2V0ID0gbmV3IFNldChbaXRlbVt0aGlzLmlkXV0pO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmZpbmRJdGVtc1RvUmVtb3ZlKGNoaWxkU2V0KTtcbiAgICAgIHJldHVybiBuZXcgU2V0KFsuLi5hY2MsIC4uLmNoaWxkcmVuXSk7XG4gICAgfSwgc2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaChmbGF0SXRlbXM6IFRbXSk6IFRbXSB7XG4gICAgdGhpcy5fZmxhdCQubmV4dChmbGF0SXRlbXMpO1xuICAgIHRoaXMuX3RyZWUkLm5leHQodGhpcy5jcmVhdGVUcmVlKGZsYXRJdGVtcykpO1xuICAgIHRoaXMuX3Zpc2libGUkLm5leHQodGhpcy5jcmVhdGVUcmVlKGZsYXRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhdGhpcy5oaWRlKGl0ZW0pKSkpO1xuICAgIHJldHVybiBmbGF0SXRlbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlVHJlZShpdGVtczogVFtdKTogVHJlZU5vZGU8VD5bXSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRyZWVGcm9tTGlzdDxULCBUcmVlTm9kZTxUPj4oXG4gICAgICBpdGVtcyxcbiAgICAgIGl0ZW0gPT4gaXRlbVt0aGlzLmlkXSxcbiAgICAgIGl0ZW0gPT4gaXRlbVt0aGlzLnBhcmVudElkXSxcbiAgICAgIGl0ZW0gPT4gQmFzZVRyZWVOb2RlLmNyZWF0ZShpdGVtKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUdyb3VwZWRUcmVlKGxpc3Q6IFRyZWVOb2RlPFQ+W10pOiBSb3V0ZUdyb3VwPFQ+W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1hcCA9IGNyZWF0ZUdyb3VwTWFwPFQ+KGxpc3QsIHRoaXMub3RoZXJzR3JvdXApO1xuICAgIGlmICghbWFwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKG1hcCwgKFtrZXksIGl0ZW1zXSkgPT4gKHsgZ3JvdXA6IGtleSwgaXRlbXMgfSkpO1xuICB9XG5cbiAgYWRkKGl0ZW1zOiBUW10pOiBUW10ge1xuICAgIGxldCBmbGF0SXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLnNob3VsZFNpbmd1bGFyaXplUm91dGVzKSB7XG4gICAgICBmbGF0SXRlbXMgPSBbLi4udGhpcy5mbGF0LCAuLi5pdGVtc107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2luZ3VsYXJpemVSb3V0ZXMpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUPigpO1xuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IG1hcC5zZXQoaXRlbVt0aGlzLmlkXSwgaXRlbSkpO1xuICAgICAgZmxhdEl0ZW1zID0gdGhpcy5maWx0ZXJXaXRoKG1hcCk7XG4gICAgICBtYXAuZm9yRWFjaChwdXNoVmFsdWVUbyhmbGF0SXRlbXMpKTtcbiAgICB9XG5cbiAgICBmbGF0SXRlbXMuc29ydCh0aGlzLnNvcnQpO1xuXG4gICAgcmV0dXJuIHRoaXMucHVibGlzaChmbGF0SXRlbXMpO1xuICB9XG5cbiAgZmluZChwcmVkaWNhdGU6IChpdGVtOiBUcmVlTm9kZTxUPikgPT4gYm9vbGVhbiwgdHJlZSA9IHRoaXMudHJlZSk6IFRyZWVOb2RlPFQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRyZWUucmVkdWNlPFRyZWVOb2RlPFQ+IHwgbnVsbD4oKGFjYywgbm9kZSkgPT4ge1xuICAgICAgaWYgKGFjYykge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5maW5kKHByZWRpY2F0ZSwgbm9kZS5jaGlsZHJlbik7XG4gICAgfSwgbnVsbCk7XG4gIH1cblxuICBwYXRjaChpZGVudGlmaWVyOiBzdHJpbmcsIHByb3BzOiBQYXJ0aWFsPFQ+KTogVFtdIHwgZmFsc2Uge1xuICAgIGNvbnN0IGZsYXRJdGVtcyA9IHRoaXMuX2ZsYXQkLnZhbHVlO1xuICAgIGNvbnN0IGluZGV4ID0gZmxhdEl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdGhpcy5pZF0gPT09IGlkZW50aWZpZXIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmbGF0SXRlbXNbaW5kZXhdID0geyAuLi5mbGF0SXRlbXNbaW5kZXhdLCAuLi5wcm9wcyB9O1xuXG4gICAgZmxhdEl0ZW1zLnNvcnQodGhpcy5zb3J0KTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaXNoKGZsYXRJdGVtcyk7XG4gIH1cblxuICByZWZyZXNoKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkKFtdKTtcbiAgfVxuXG4gIHJlbW92ZShpZGVudGlmaWVyczogc3RyaW5nW10pOiBUW10ge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlkZW50aWZpZXJzLmZvckVhY2goaWQgPT4gc2V0LmFkZChpZCkpO1xuXG4gICAgY29uc3Qgc2V0VG9SZW1vdmUgPSB0aGlzLmZpbmRJdGVtc1RvUmVtb3ZlKHNldCk7XG4gICAgY29uc3QgZmxhdEl0ZW1zID0gdGhpcy5maWx0ZXJXaXRoKHNldFRvUmVtb3ZlKTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaXNoKGZsYXRJdGVtcyk7XG4gIH1cblxuICByZW1vdmVCeVBhcmFtKHBhcmFtczogUGFydGlhbDxUPik6IFRbXSB8IG51bGwge1xuICAgIGlmICghcGFyYW1zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKSBhcyBBcnJheTxrZXlvZiBQYXJ0aWFsPFQ+PjtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4Y2x1ZGVkTGlzdCA9IHRoaXMuZmxhdC5maWx0ZXIoaXRlbSA9PiBrZXlzLmV2ZXJ5KGtleSA9PiBpdGVtW2tleV0gPT09IHBhcmFtc1trZXldKSk7XG4gICAgaWYgKCFleGNsdWRlZExpc3Q/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGV4Y2x1ZGVkTGlzdCkge1xuICAgICAgdGhpcy5yZW1vdmVCeVBhcmFtKHsgW3RoaXMucGFyZW50SWRdOiBpdGVtW3RoaXMuaWRdIH0gYXMgUGFydGlhbDxUPik7XG4gICAgfVxuXG4gICAgY29uc3QgZmxhdEl0ZW1zID0gdGhpcy5mbGF0LmZpbHRlcihpdGVtID0+ICFleGNsdWRlZExpc3QuaW5jbHVkZXMoaXRlbSkpO1xuICAgIHJldHVybiB0aGlzLnB1Ymxpc2goZmxhdEl0ZW1zKTtcbiAgfVxuXG4gIHNlYXJjaChwYXJhbXM6IFBhcnRpYWw8VD4sIHRyZWUgPSB0aGlzLnRyZWUpOiBUcmVlTm9kZTxUPiB8IG51bGwge1xuICAgIGNvbnN0IHNlYXJjaEtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpIGFzIEFycmF5PGtleW9mIFBhcnRpYWw8VD4+O1xuXG4gICAgcmV0dXJuIHRyZWUucmVkdWNlPFRyZWVOb2RlPFQ+IHwgbnVsbD4oKGFjYywgbm9kZSkgPT4ge1xuICAgICAgaWYgKGFjYykge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VhcmNoS2V5cy5ldmVyeShrZXkgPT4gbm9kZVtrZXldID09PSBwYXJhbXNba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaChwYXJhbXMsIG5vZGUuY2hpbGRyZW4pO1xuICAgIH0sIG51bGwpO1xuICB9XG5cbiAgc2V0U2luZ3VsYXJpemVTdGF0dXMoc2luZ3VsYXJpemUgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5zaG91bGRTaW5ndWxhcml6ZVJvdXRlcyA9IHNpbmd1bGFyaXplO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdlRyZWVTZXJ2aWNlPFQgZXh0ZW5kcyBOYXY+XG4gIGV4dGVuZHMgQWJzdHJhY3RUcmVlU2VydmljZTxUPlxuICBpbXBsZW1lbnRzIE9uRGVzdHJveVxue1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uQ2hlY2tlclNlcnZpY2U7XG4gIHByaXZhdGUgY29tcGFyZUZ1bmM7XG4gIHJlYWRvbmx5IGlkID0gJ25hbWUnO1xuICByZWFkb25seSBwYXJlbnRJZCA9ICdwYXJlbnROYW1lJztcbiAgcmVhZG9ubHkgaGlkZSA9IChpdGVtOiBUKSA9PiBpdGVtLmludmlzaWJsZSB8fCAhdGhpcy5pc0dyYW50ZWQoaXRlbSk7XG4gIHJlYWRvbmx5IHNvcnQgPSAoYTogVCwgYjogVCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmVGdW5jKGEsIGIpO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFRPRE8gTWVyZ2UgRHluYW1pYyBOYXYgVG9vIVxuICAgIGNvbnN0IGNvbmZpZ1N0YXRlID0gdGhpcy5pbmplY3Rvci5nZXQoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGNvbmZpZ1N0YXRlXG4gICAgICAuY3JlYXRlT25VcGRhdGVTdHJlYW0oKHN0YXRlOmFueSkgPT4gc3RhdGUpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaCgpKTtcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25DaGVja2VyU2VydmljZSk7XG4gICAgdGhpcy5vdGhlcnNHcm91cCA9IGluamVjdG9yLmdldChPVEhFUlNfR1JPVVApO1xuICAgIHRoaXMuY29tcGFyZUZ1bmMgPSBpbmplY3Rvci5nZXQoU09SVF9DT01QQVJFX0ZVTkMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzR3JhbnRlZCh7IHJlcXVpcmVkUG9saWN5IH06IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRHcmFudGVkUG9saWN5KHJlcXVpcmVkUG9saWN5KTtcbiAgfVxuXG4gIGhhc0NoaWxkcmVuKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMuaWRdID09PSBpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gQm9vbGVhbihub2RlPy5jaGlsZHJlbj8ubGVuZ3RoKTtcbiAgfVxuXG4gIGhhc0ludmlzaWJsZUNoaWxkKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMuaWRdID09PSBpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gbm9kZT8uY2hpbGRyZW4/LnNvbWUoY2hpbGQgPT4gY2hpbGQuaW52aXNpYmxlKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXNTZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3ROYXZUcmVlU2VydmljZTxSb3V0ZT4ge1xuICBwcml2YXRlIGhhc1BhdGhPckNoaWxkKGl0ZW06IFRyZWVOb2RlPFJvdXRlPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKGl0ZW0ucGF0aCkgfHwgdGhpcy5oYXNDaGlsZHJlbihpdGVtLm5hbWUpO1xuICB9XG5cbiAgZ2V0IGdyb3VwZWRWaXNpYmxlKCk6IFJvdXRlR3JvdXA8Um91dGU+W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUdyb3VwZWRUcmVlKHRoaXMudmlzaWJsZS5maWx0ZXIoaXRlbSA9PiB0aGlzLmhhc1BhdGhPckNoaWxkKGl0ZW0pKSk7XG4gIH1cblxuICBnZXQgZ3JvdXBlZFZpc2libGUkKCk6IE9ic2VydmFibGU8Um91dGVHcm91cDxSb3V0ZT5bXSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGUkLnBpcGUoXG4gICAgICBtYXAoaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gdGhpcy5oYXNQYXRoT3JDaGlsZChpdGVtKSkpLFxuICAgICAgbWFwKHZpc2libGUgPT4gdGhpcy5jcmVhdGVHcm91cGVkVHJlZSh2aXNpYmxlKSksXG4gICAgKTtcbiAgfVxufVxuIl19","import { Injectable, Optional } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { RoutesService } from './routes.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./routes.service\";\nimport * as i2 from \"@angular/router\";\nexport class RoutesHandler {\n routes;\n router;\n constructor(routes, router) {\n this.routes = routes;\n this.router = router;\n this.addRoutes();\n }\n addRoutes() {\n this.router?.config?.forEach(({ path = '', data }) => {\n const routes = data?.routes;\n if (!routes)\n return;\n if (Array.isArray(routes)) {\n this.routes.add(routes);\n }\n else {\n const routesFlatten = flatRoutes([{ path, ...routes }], { path: '' });\n this.routes.add(routesFlatten);\n }\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesHandler, deps: [{ token: i1.RoutesService }, { token: i2.Router, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesHandler, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RoutesHandler, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RoutesService }, { type: i2.Router, decorators: [{\n type: Optional\n }] }] });\nfunction flatRoutes(routes, parent) {\n if (!routes)\n return [];\n return routes.reduce((acc, route) => {\n const { children, ...current } = {\n ...route,\n parentName: parent.name,\n path: (parent.path + '/' + route.path).replace(/\\/\\//g, '/'),\n };\n acc.push(current, ...flatRoutes(children, current));\n return acc;\n }, []);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmhhbmRsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3JvdXRlcy5oYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFHLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU1qRCxNQUFNLE9BQU8sYUFBYTtJQUVkO0lBQ1k7SUFGdEIsWUFDVSxNQUFxQixFQUNULE1BQWM7UUFEMUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNULFdBQU0sR0FBTixNQUFNLENBQVE7UUFFbEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxTQUFTO1FBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQWEsRUFBRSxFQUFFO1lBQy9FLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVwQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3VHQXBCVSxhQUFhOzJHQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSUksUUFBUTs7QUFvQmIsU0FBUyxVQUFVLENBQUMsTUFBa0IsRUFBRSxNQUFXO0lBQ2pELElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFdkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2xDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRztZQUMvQixHQUFHLEtBQUs7WUFDUixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDdkIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO1NBQzdELENBQUM7UUFFRixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVwRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFjLENBQUMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ICBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUm91dGVzU2VydmljZSB9IGZyb20gJy4vcm91dGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlc0hhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlczogUm91dGVzU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICApIHtcbiAgICB0aGlzLmFkZFJvdXRlcygpO1xuICB9XG5cbiAgYWRkUm91dGVzKCkge1xuICAgICh0aGlzLnJvdXRlcj8uY29uZmlnIGFzIFJvdXRlRGF0YVtdKT8uZm9yRWFjaCgoeyBwYXRoID0gJycsIGRhdGEgfTogUm91dGVEYXRhKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZXMgPSBkYXRhPy5yb3V0ZXM7XG4gICAgICBpZiAoIXJvdXRlcykgcmV0dXJuO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZXMpKSB7XG4gICAgICAgIHRoaXMucm91dGVzLmFkZChyb3V0ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm91dGVzRmxhdHRlbiA9IGZsYXRSb3V0ZXMoW3sgcGF0aCwgLi4ucm91dGVzIH1dLCB7IHBhdGg6ICcnIH0pO1xuICAgICAgICB0aGlzLnJvdXRlcy5hZGQocm91dGVzRmxhdHRlbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdFJvdXRlcyhyb3V0ZXM6IFJvdXRlRGVmW10sIHBhcmVudDogYW55KSB7XG4gIGlmICghcm91dGVzKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIHJvdXRlcy5yZWR1Y2UoKGFjYywgcm91dGUpID0+IHtcbiAgICBjb25zdCB7IGNoaWxkcmVuLCAuLi5jdXJyZW50IH0gPSB7XG4gICAgICAuLi5yb3V0ZSxcbiAgICAgIHBhcmVudE5hbWU6IHBhcmVudC5uYW1lLFxuICAgICAgcGF0aDogKHBhcmVudC5wYXRoICsgJy8nICsgcm91dGUucGF0aCkucmVwbGFjZSgvXFwvXFwvL2csICcvJyksXG4gICAgfTtcblxuICAgIGFjYy5wdXNoKGN1cnJlbnQsIC4uLmZsYXRSb3V0ZXMoY2hpbGRyZW4sIGN1cnJlbnQpKTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzICBSb3V0ZVtdKTtcbn1cblxudHlwZSBSb3V0ZURlZiA9IFJvdXRlICYgeyBjaGlsZHJlbjogUm91dGVEZWZbXSB9O1xudHlwZSBSb3V0ZURhdGEgPSBSb3V0ZSAmIHsgZGF0YTogeyByb3V0ZXM6IFJvdXRlRGVmIHwgQXJyYXk8Um91dGVEZWY+IH0gfTtcbiJdfQ==","import { Inject, Injectable } from '@angular/core';\nimport { TENANT_KEY } from '@elite.framework/ng.core/tokens';\nimport { map, switchMap } from 'rxjs';\nimport { ConfigStateService } from './config-state.service';\nimport { RestService } from './rest.service';\nimport { SessionStateService } from './session-state.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nimport * as i2 from \"./session-state.service\";\nimport * as i3 from \"./config-state.service\";\nexport class MultiTenancyService {\n restService;\n sessionState;\n configStateService;\n tenantKey;\n get isEnabled() {\n // return this.framework.multiTenancy.isEnabled;\n return true;\n }\n domainTenant = null;\n isTenantBoxVisible = true;\n apiName = 'framework';\n setTenantToState = (tenant) => {\n this.sessionState.setTenant({ id: tenant.id, name: tenant.name, /* isAvailable: true */ });\n return this.configStateService.refreshAppState().pipe(map(_ => tenant));\n };\n constructor(restService, sessionState, configStateService, tenantKey) {\n this.restService = restService;\n this.sessionState = sessionState;\n this.configStateService = configStateService;\n this.tenantKey = tenantKey;\n }\n setTenantByName(tenantName) {\n return this\n .findTenantByName(tenantName)\n .pipe(switchMap(this.setTenantToState));\n }\n setTenantById(tenantId) {\n return this\n .findTenantById(tenantId)\n .pipe(switchMap(this.setTenantToState));\n }\n findTenantById = (id, config) => this.restService.request({\n method: 'GET',\n url: `/api/framework/multi-tenancy/tenants/by-id/${id}`,\n }, { apiName: this.apiName, ...config });\n findTenantByName = (name, config) => this.restService.request({\n method: 'GET',\n url: `/api/framework/multi-tenancy/tenants/by-name/${name}`,\n }, { apiName: this.apiName, ...config });\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: MultiTenancyService, deps: [{ token: i1.RestService }, { token: i2.SessionStateService }, { token: i3.ConfigStateService }, { token: TENANT_KEY }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: MultiTenancyService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: MultiTenancyService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.SessionStateService }, { type: i3.ConfigStateService }, { type: undefined, decorators: [{\n type: Inject,\n args: [TENANT_KEY]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvbXVsdGktdGVuYW5jeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBSzlELE1BQU0sT0FBTyxtQkFBbUI7SUFrQnBCO0lBQ0E7SUFDQTtJQUNtQjtJQW5CM0IsSUFBSSxTQUFTO1FBQ1gsZ0RBQWdEO1FBQ2hELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNILFlBQVksR0FBOEIsSUFBSSxDQUFDO0lBRS9DLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUUxQixPQUFPLEdBQUcsV0FBVyxDQUFDO0lBRWQsZ0JBQWdCLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUU7UUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQyxDQUFDO0lBRUYsWUFDVSxXQUF3QixFQUN4QixZQUFpQyxFQUNqQyxrQkFBc0MsRUFDbkIsU0FBaUI7UUFIcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUMxQyxDQUFDO0lBRUwsZUFBZSxDQUFDLFVBQWtCO1FBQ2hDLE9BQU8sSUFBSTthQUNSLGdCQUFnQixDQUFDLFVBQVUsQ0FBQzthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFnQjtRQUM1QixPQUFPLElBQUk7YUFDUixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUEsY0FBYyxHQUFHLENBQUMsRUFBVSxFQUFFLE1BQTZCLEVBQUUsRUFBRSxDQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBMEI7UUFDaEQsTUFBTSxFQUFFLEtBQUs7UUFDYixHQUFHLEVBQUUsOENBQThDLEVBQUUsRUFBRTtLQUN4RCxFQUNELEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBR3ZDLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUFFLE1BQTZCLEVBQUUsRUFBRSxDQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBMEI7UUFDaEQsTUFBTSxFQUFFLEtBQUs7UUFDYixHQUFHLEVBQUUsZ0RBQWdELElBQUksRUFBRTtLQUM1RCxFQUNELEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO3VHQWpENUIsbUJBQW1CLGtIQXFCcEIsVUFBVTsyR0FyQlQsbUJBQW1CLGNBRmhCLE1BQU07OzJGQUVULG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQXNCSSxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlc3QsIFRlbmFudExvZ2luSW5mb0R0byB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgVEVOQU5UX0tFWSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuL3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLXN0YXRlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpVGVuYW5jeVNlcnZpY2Uge1xuXG4gICAgZ2V0IGlzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgIC8vIHJldHVybiB0aGlzLmZyYW1ld29yay5tdWx0aVRlbmFuY3kuaXNFbmFibGVkO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICBkb21haW5UZW5hbnQ6IFRlbmFudExvZ2luSW5mb0R0byB8IG51bGwgPSBudWxsO1xuXG4gIGlzVGVuYW50Qm94VmlzaWJsZSA9IHRydWU7XG5cbiAgYXBpTmFtZSA9ICdmcmFtZXdvcmsnO1xuXG4gIHByaXZhdGUgc2V0VGVuYW50VG9TdGF0ZSA9ICh0ZW5hbnQ6IFRlbmFudExvZ2luSW5mb0R0bykgPT4ge1xuICAgIHRoaXMuc2Vzc2lvblN0YXRlLnNldFRlbmFudCh7IGlkOiB0ZW5hbnQuaWQsIG5hbWU6IHRlbmFudC5uYW1lLCAvKiBpc0F2YWlsYWJsZTogdHJ1ZSAqLyB9KTtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdGF0ZVNlcnZpY2UucmVmcmVzaEFwcFN0YXRlKCkucGlwZShtYXAoXyA9PiB0ZW5hbnQpKTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHNlc3Npb25TdGF0ZTogU2Vzc2lvblN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N0YXRlU2VydmljZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoVEVOQU5UX0tFWSkgcHVibGljIHRlbmFudEtleTogc3RyaW5nLFxuICApIHsgfVxuXG4gIHNldFRlbmFudEJ5TmFtZSh0ZW5hbnROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLmZpbmRUZW5hbnRCeU5hbWUodGVuYW50TmFtZSlcbiAgICAgIC5waXBlKHN3aXRjaE1hcCh0aGlzLnNldFRlbmFudFRvU3RhdGUpKTtcbiAgfVxuXG4gIHNldFRlbmFudEJ5SWQodGVuYW50SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzXG4gICAgICAuZmluZFRlbmFudEJ5SWQodGVuYW50SWQpXG4gICAgICAucGlwZShzd2l0Y2hNYXAodGhpcy5zZXRUZW5hbnRUb1N0YXRlKSk7XG4gIH1cblxuICAgZmluZFRlbmFudEJ5SWQgPSAoaWQ6IHN0cmluZywgY29uZmlnPzogUGFydGlhbDxSZXN0LkNvbmZpZz4pID0+XG4gICAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgVGVuYW50TG9naW5JbmZvRHRvPih7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgdXJsOiBgL2FwaS9mcmFtZXdvcmsvbXVsdGktdGVuYW5jeS90ZW5hbnRzL2J5LWlkLyR7aWR9YCxcbiAgICB9LFxuICAgIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lLC4uLmNvbmZpZyB9KTtcblxuXG4gIGZpbmRUZW5hbnRCeU5hbWUgPSAobmFtZTogc3RyaW5nLCBjb25maWc/OiBQYXJ0aWFsPFJlc3QuQ29uZmlnPikgPT5cbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBUZW5hbnRMb2dpbkluZm9EdG8+KHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB1cmw6IGAvYXBpL2ZyYW1ld29yay9tdWx0aS10ZW5hbmN5L3RlbmFudHMvYnktbmFtZS8ke25hbWV9YCxcbiAgICB9LFxuICAgIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lLC4uLmNvbmZpZyB9KTtcbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class HttpErrorReporterService {\n _reporter$ = new Subject();\n _errors$ = new BehaviorSubject([]);\n get reporter$() {\n return this._reporter$.asObservable();\n }\n get errors$() {\n return this._errors$.asObservable();\n }\n get errors() {\n return this._errors$.value;\n }\n reportError(error) {\n this._reporter$.next(error);\n this._errors$.next([...this.errors, error]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpErrorReporterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpErrorReporterService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpErrorReporterService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1lcnJvci1yZXBvcnRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvaHR0cC1lcnJvci1yZXBvcnRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBR2hELE1BQU0sT0FBTyx3QkFBd0I7SUFDM0IsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO0lBQzlDLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsRUFBRSxDQUFDLENBQUM7SUFFaEUsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUF3QjtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7dUdBbkJVLHdCQUF3QjsyR0FBeEIsd0JBQXdCLGNBRFgsTUFBTTs7MkZBQ25CLHdCQUF3QjtrQkFEcEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSB7XG4gIHByaXZhdGUgX3JlcG9ydGVyJCA9IG5ldyBTdWJqZWN0PEh0dHBFcnJvclJlc3BvbnNlPigpO1xuICBwcml2YXRlIF9lcnJvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIdHRwRXJyb3JSZXNwb25zZVtdPihbXSk7XG5cbiAgZ2V0IHJlcG9ydGVyJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0ZXIkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGVycm9ycyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9ycyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9lcnJvcnMkLnZhbHVlO1xuICB9XG5cbiAgcmVwb3J0RXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgdGhpcy5fcmVwb3J0ZXIkLm5leHQoZXJyb3IpO1xuICAgIHRoaXMuX2Vycm9ycyQubmV4dChbLi4udGhpcy5lcnJvcnMsIGVycm9yXSk7XG4gIH1cbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class SubscriptionService {\n subscription = new Subscription();\n get isClosed() {\n return this.subscription.closed;\n }\n addOne(source$, nextOrObserver, error) {\n const subscription = source$.subscribe(nextOrObserver, error);\n this.subscription.add(subscription);\n return subscription;\n }\n closeAll() {\n this.subscription.unsubscribe();\n }\n closeOne(subscription) {\n this.removeOne(subscription);\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n removeOne(subscription) {\n if (!subscription)\n return;\n this.subscription.remove(subscription);\n }\n reset() {\n this.subscription.unsubscribe();\n this.subscription = new Subscription();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SubscriptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SubscriptionService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SubscriptionService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9zdWJzY3JpcHRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBR3BDLE1BQU0sT0FBTyxtQkFBbUI7SUFDdEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFMUMsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBUUQsTUFBTSxDQUNKLE9BQXNCLEVBQ3RCLGNBQTZDLEVBQzdDLEtBQTRCO1FBRTVCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxZQUE2QztRQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxZQUE2QztRQUNyRCxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUN6QyxDQUFDO3VHQTlDVSxtQkFBbUI7MkdBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUsIFBhcnRpYWxPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdWJzY3JpcHRpb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgZ2V0IGlzQ2xvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbi5jbG9zZWQ7XG4gIH1cblxuICBhZGRPbmU8VD4oXG4gICAgc291cmNlJDogT2JzZXJ2YWJsZTxUPixcbiAgICBuZXh0PzogKHZhbHVlOiBUKSA9PiB2b2lkLFxuICAgIGVycm9yPzogKGVycm9yOiBhbnkpID0+IHZvaWQsXG4gICk6IFN1YnNjcmlwdGlvbjtcbiAgYWRkT25lPFQ+KHNvdXJjZSQ6IE9ic2VydmFibGU8VD4sIG9ic2VydmVyPzogUGFydGlhbE9ic2VydmVyPFQ+KTogU3Vic2NyaXB0aW9uO1xuICBhZGRPbmU8VD4oXG4gICAgc291cmNlJDogT2JzZXJ2YWJsZTxUPixcbiAgICBuZXh0T3JPYnNlcnZlcj86IFBhcnRpYWxPYnNlcnZlcjxUPiB8IE5leHQ8VD4sXG4gICAgZXJyb3I/OiAoZXJyb3I6IGFueSkgPT4gdm9pZCxcbiAgKTogU3Vic2NyaXB0aW9uIHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzb3VyY2UkLnN1YnNjcmliZShuZXh0T3JPYnNlcnZlciBhcyBOZXh0PFQ+LCBlcnJvcik7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIGNsb3NlQWxsKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBjbG9zZU9uZShzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICB0aGlzLnJlbW92ZU9uZShzdWJzY3JpcHRpb24pO1xuICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICByZW1vdmVPbmUoc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKCFzdWJzY3JpcHRpb24pIHJldHVybjtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5yZW1vdmUoc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIH1cbn1cblxudHlwZSBOZXh0PFQ+ID0gKHZhbHVlOiBUKSA9PiB2b2lkO1xuIl19","import { Injectable, inject, signal } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router, } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nexport const NavigationEvent = {\n Cancel: NavigationCancel,\n End: NavigationEnd,\n Error: NavigationError,\n Start: NavigationStart,\n};\nexport class RouterEvents {\n router = inject(Router);\n #previousNavigation = signal(undefined, ...(ngDevMode ? [{ debugName: \"#previousNavigation\" }] : []));\n previousNavigation = this.#previousNavigation.asReadonly();\n #currentNavigation = signal(undefined, ...(ngDevMode ? [{ debugName: \"#currentNavigation\" }] : []));\n currentNavigation = this.#currentNavigation.asReadonly();\n constructor() {\n this.listenToNavigation();\n }\n listenToNavigation() {\n const routerEvent$ = this.router.events.pipe(filter(e => e instanceof NavigationEvent.End && !e.url.includes('error')));\n routerEvent$.subscribe(event => {\n this.#previousNavigation.set(this.currentNavigation());\n this.#currentNavigation.set(event.url);\n });\n }\n getEvents(...eventTypes) {\n const filterRouterEvents = (event) => eventTypes.some(type => event instanceof type);\n return this.router.events.pipe(filter(filterRouterEvents));\n }\n getNavigationEvents(...navigationEventKeys) {\n const filterNavigationEvents = (event) => navigationEventKeys.some(key => event instanceof NavigationEvent[key]);\n return this.router.events.pipe(filter(filterNavigationEvents));\n }\n getAllEvents() {\n return this.router.events;\n }\n getAllNavigationEvents() {\n const keys = Object.keys(NavigationEvent);\n return this.getNavigationEvents(...keys);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterEvents, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterEvents, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterEvents, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWV2ZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcm91dGVyLWV2ZW50cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsZUFBZSxFQUNmLE1BQU0sR0FJUCxNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFeEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE1BQU0sRUFBRSxnQkFBZ0I7SUFDeEIsR0FBRyxFQUFFLGFBQWE7SUFDbEIsS0FBSyxFQUFFLGVBQWU7SUFDdEIsS0FBSyxFQUFFLGVBQWU7Q0FDdkIsQ0FBQztBQUdGLE1BQU0sT0FBTyxZQUFZO0lBQ0osTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsQyxtQkFBbUIsR0FBRyxNQUFNLENBQXFCLFNBQVMsK0RBQUMsQ0FBQztJQUNyRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFbEQsa0JBQWtCLEdBQUcsTUFBTSxDQUFxQixTQUFTLDhEQUFDLENBQUM7SUFDcEUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRXpEO1FBQ0UsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDN0MsQ0FBQztRQUUvQixZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQW9DLEdBQUcsVUFBYTtRQUMzRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDO1FBRTVGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELG1CQUFtQixDQUFnQyxHQUFHLG1CQUFzQjtRQU8xRSxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBWSxFQUFvQyxFQUFFLENBQ2hGLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV6RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUF3QixDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQzt1R0FsRFUsWUFBWTsyR0FBWixZQUFZLGNBREMsTUFBTTs7MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE5hdmlnYXRpb25DYW5jZWwsXG4gIE5hdmlnYXRpb25FbmQsXG4gIE5hdmlnYXRpb25FcnJvcixcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBSb3V0ZXIsXG4gIFJvdXRlckV2ZW50LFxuICBFdmVudCxcbiAgUm91dGVyU3RhdGUsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBOYXZpZ2F0aW9uRXZlbnQgPSB7XG4gIENhbmNlbDogTmF2aWdhdGlvbkNhbmNlbCxcbiAgRW5kOiBOYXZpZ2F0aW9uRW5kLFxuICBFcnJvcjogTmF2aWdhdGlvbkVycm9yLFxuICBTdGFydDogTmF2aWdhdGlvblN0YXJ0LFxufTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXJFdmVudHMge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcmVhZG9ubHkgI3ByZXZpb3VzTmF2aWdhdGlvbiA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByZXZpb3VzTmF2aWdhdGlvbiA9IHRoaXMuI3ByZXZpb3VzTmF2aWdhdGlvbi5hc1JlYWRvbmx5KCk7XG5cbiAgcmVhZG9ubHkgI2N1cnJlbnROYXZpZ2F0aW9uID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY3VycmVudE5hdmlnYXRpb24gPSB0aGlzLiNjdXJyZW50TmF2aWdhdGlvbi5hc1JlYWRvbmx5KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0ZW5Ub05hdmlnYXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0ZW5Ub05hdmlnYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGVyRXZlbnQkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkV2ZW50LkVuZCAmJiAhZS51cmwuaW5jbHVkZXMoJ2Vycm9yJykpXG4gICAgKSBhcyBPYnNlcnZhYmxlPE5hdmlnYXRpb25FbmQ+O1xuICAgIFxuICAgIHJvdXRlckV2ZW50JC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgdGhpcy4jcHJldmlvdXNOYXZpZ2F0aW9uLnNldCh0aGlzLmN1cnJlbnROYXZpZ2F0aW9uKCkpO1xuICAgICAgdGhpcy4jY3VycmVudE5hdmlnYXRpb24uc2V0KGV2ZW50LnVybCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRFdmVudHM8VCBleHRlbmRzIFJvdXRlckV2ZW50Q29uc3RydWN0b3JzPiguLi5ldmVudFR5cGVzOiBUKSB7XG4gICAgY29uc3QgZmlsdGVyUm91dGVyRXZlbnRzID0gKGV2ZW50OiBFdmVudCkgPT4gZXZlbnRUeXBlcy5zb21lKHR5cGUgPT4gZXZlbnQgaW5zdGFuY2VvZiB0eXBlKTtcblxuICAgIHJldHVybiB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZmlsdGVyUm91dGVyRXZlbnRzKSk7XG4gIH1cblxuICBnZXROYXZpZ2F0aW9uRXZlbnRzPFQgZXh0ZW5kcyBOYXZpZ2F0aW9uRXZlbnRLZXlzPiguLi5uYXZpZ2F0aW9uRXZlbnRLZXlzOiBUKSB7XG4gICAgdHlwZSBGaWx0ZXJlZE5hdmlnYXRpb25FdmVudCA9IFQgZXh0ZW5kcyAoaW5mZXIgS2V5KVtdXG4gICAgICA/IEtleSBleHRlbmRzIE5hdmlnYXRpb25FdmVudEtleVxuICAgICAgICA/IEluc3RhbmNlVHlwZTxOYXZpZ2F0aW9uRXZlbnRUeXBlW0tleV0+XG4gICAgICAgIDogbmV2ZXJcbiAgICAgIDogbmV2ZXI7XG5cbiAgICBjb25zdCBmaWx0ZXJOYXZpZ2F0aW9uRXZlbnRzID0gKGV2ZW50OiBFdmVudCk6IGV2ZW50IGlzIEZpbHRlcmVkTmF2aWdhdGlvbkV2ZW50ID0+XG4gICAgICBuYXZpZ2F0aW9uRXZlbnRLZXlzLnNvbWUoa2V5ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkV2ZW50W2tleV0pO1xuXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihmaWx0ZXJOYXZpZ2F0aW9uRXZlbnRzKSk7XG4gIH1cblxuICBnZXRBbGxFdmVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cztcbiAgfVxuXG4gIGdldEFsbE5hdmlnYXRpb25FdmVudHMoKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE5hdmlnYXRpb25FdmVudCkgYXMgTmF2aWdhdGlvbkV2ZW50S2V5cztcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uRXZlbnRzKC4uLmtleXMpO1xuICB9XG59XG5cbnR5cGUgUm91dGVyRXZlbnRDb25zdHJ1Y3RvcnMgPSBbVHlwZTxSb3V0ZXJFdmVudD4sIC4uLlR5cGU8Um91dGVyRXZlbnQ+W11dO1xuXG50eXBlIE5hdmlnYXRpb25FdmVudEtleXMgPSBbTmF2aWdhdGlvbkV2ZW50S2V5LCAuLi5OYXZpZ2F0aW9uRXZlbnRLZXlbXV07XG5cbnR5cGUgTmF2aWdhdGlvbkV2ZW50VHlwZSA9IHR5cGVvZiBOYXZpZ2F0aW9uRXZlbnQ7XG5cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25FdmVudEtleSA9IGtleW9mIE5hdmlnYXRpb25FdmVudFR5cGU7XG4iXX0=","import { Injectable, Injector } from '@angular/core';\nimport { NavigationStart } from '@angular/router';\nimport { of, Subject, timer } from 'rxjs';\nimport { map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { RouterEvents } from './router-events.service';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./router-events.service\";\nexport class RouterWaitService {\n routerEvents;\n store = new InternalStore({ loading: false });\n destroy$ = new Subject();\n delay;\n constructor(routerEvents, injector) {\n this.routerEvents = routerEvents;\n // this.delay = injector.get(LOADER_DELAY, 500);\n this.delay = 500;\n this.updateLoadingStatusOnNavigationEvents();\n }\n updateLoadingStatusOnNavigationEvents() {\n this.routerEvents\n .getAllNavigationEvents()\n .pipe(map(event => event instanceof NavigationStart), switchMap(condition => condition\n ? this.delay === 0\n ? of(true)\n : timer(this.delay || 0).pipe(mapTo(true), takeUntil(this.destroy$))\n : of(false)), tap(() => this.destroy$.next()))\n .subscribe(status => {\n this.setLoading(status);\n });\n }\n getLoading() {\n return this.store.state.loading;\n }\n getLoading$() {\n return this.store.sliceState(({ loading }) => loading);\n }\n updateLoading$() {\n return this.store.sliceUpdate(({ loading }) => loading);\n }\n setLoading(loading) {\n this.store.patch({ loading });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterWaitService, deps: [{ token: i1.RouterEvents }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterWaitService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RouterWaitService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RouterEvents }, { type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXdhaXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3JvdXRlci13YWl0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVMvRCxNQUFNLE9BQU8saUJBQWlCO0lBSVI7SUFIWixLQUFLLEdBQUcsSUFBSSxhQUFhLENBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0QsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDL0IsS0FBSyxDQUFTO0lBQ3RCLFlBQW9CLFlBQTBCLEVBQUUsUUFBa0I7UUFBOUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDNUMsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFTyxxQ0FBcUM7UUFDM0MsSUFBSSxDQUFDLFlBQVk7YUFDZCxzQkFBc0IsRUFBRTthQUN4QixJQUFJLENBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLGVBQWUsQ0FBQyxFQUM5QyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDcEIsU0FBUztZQUNQLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNWLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FDZCxFQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQ2hDO2FBQ0EsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0I7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7dUdBM0NVLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IG9mLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtYXBUbywgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJvdXRlckV2ZW50cyB9IGZyb20gJy4vcm91dGVyLWV2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IEludGVybmFsU3RvcmUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlcldhaXRTdGF0ZSB7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXJXYWl0U2VydmljZSB7XG4gIHByaXZhdGUgc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZTxSb3V0ZXJXYWl0U3RhdGU+KHsgbG9hZGluZzogZmFsc2UgfSk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGRlbGF5OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyRXZlbnRzOiBSb3V0ZXJFdmVudHMsIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIC8vIHRoaXMuZGVsYXkgPSBpbmplY3Rvci5nZXQoTE9BREVSX0RFTEFZLCA1MDApO1xuICAgIHRoaXMuZGVsYXkgPSA1MDA7XG4gICAgdGhpcy51cGRhdGVMb2FkaW5nU3RhdHVzT25OYXZpZ2F0aW9uRXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxvYWRpbmdTdGF0dXNPbk5hdmlnYXRpb25FdmVudHMoKSB7XG4gICAgdGhpcy5yb3V0ZXJFdmVudHNcbiAgICAgIC5nZXRBbGxOYXZpZ2F0aW9uRXZlbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpLFxuICAgICAgICBzd2l0Y2hNYXAoY29uZGl0aW9uID0+XG4gICAgICAgICAgY29uZGl0aW9uXG4gICAgICAgICAgICA/IHRoaXMuZGVsYXkgPT09IDBcbiAgICAgICAgICAgICAgPyBvZih0cnVlKVxuICAgICAgICAgICAgICA6IHRpbWVyKHRoaXMuZGVsYXkgfHwgMCkucGlwZShtYXBUbyh0cnVlKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgOiBvZihmYWxzZSksXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmRlc3Ryb3kkLm5leHQoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhzdGF0dXMpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRMb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlLmxvYWRpbmc7XG4gIH1cblxuICBnZXRMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKCh7IGxvYWRpbmcgfSkgPT4gbG9hZGluZyk7XG4gIH1cblxuICB1cGRhdGVMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVVwZGF0ZSgoeyBsb2FkaW5nIH0pID0+IGxvYWRpbmcpO1xuICB9XG5cbiAgc2V0TG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5zdG9yZS5wYXRjaCh7IGxvYWRpbmcgfSk7XG4gIH1cbn1cbiJdfQ==","import { BehaviorSubject } from 'rxjs';\nimport { inject } from '@angular/core';\nimport { SORT_COMPARE_FUNC } from './utils/compare-func.token';\nexport class AbstractMenuService {\n sortFn;\n _items$ = new BehaviorSubject([]);\n get items() {\n return this._items$.value;\n }\n get items$() {\n return this._items$.asObservable();\n }\n constructor() {\n this.sortFn = inject(SORT_COMPARE_FUNC);\n }\n addItems(newItems) {\n const items = [...this.items];\n newItems.forEach(item => {\n const index = items.findIndex(i => i.id === item.id);\n // const data = new this.baseClass(item);\n // const data = new this.baseClass(item);\n if (index > -1) {\n items[index] = item;\n return;\n }\n items.push(item);\n });\n items.sort(this.sortItems);\n this._items$.next(items);\n }\n removeItem(id) {\n const index = this.items.findIndex(item => item.id === id);\n if (index < 0)\n return;\n const items = [...this.items.slice(0, index), ...this.items.slice(index + 1)];\n this._items$.next(items);\n }\n patchItem(id, item) {\n const index = this.items.findIndex(i => i.id === id);\n if (index < 0)\n return;\n const items = [...this.items];\n items[index] = new this.baseClass({ ...items[index], ...item });\n items.sort(this.sortItems);\n this._items$.next(items);\n }\n sortItems = (a, b) => {\n return this.sortFn(a, b);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvYWJzdHJhY3QtbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxNQUFNLE9BQWdCLG1CQUFtQjtJQUdwQixNQUFNLENBQStDO0lBRTlELE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztJQUVqRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWE7UUFDcEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRCx5Q0FBeUM7WUFDekMseUNBQXlDO1lBR3pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFtQjtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFdEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMsRUFBbUIsRUFBRSxJQUE0QjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFckQsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFdEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLEdBQUcsQ0FBQyxDQUFJLEVBQUUsQ0FBSSxFQUFFLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZJdGVtLCBTb3J0YWJsZUl0ZW0gfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcbmltcG9ydCB7IFNPUlRfQ09NUEFSRV9GVU5DIH0gZnJvbSAnLi91dGlscy9jb21wYXJlLWZ1bmMudG9rZW4nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RNZW51U2VydmljZTxUIGV4dGVuZHMgTmF2SXRlbT4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYmFzZUNsYXNzOiBUeXBlPGFueT47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNvcnRGbjogKGE6IFNvcnRhYmxlSXRlbSwgYjogU29ydGFibGVJdGVtKSA9PiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuXG4gIGdldCBpdGVtcygpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcyQudmFsdWU7XG4gIH1cblxuICBnZXQgaXRlbXMkKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc29ydEZuID0gaW5qZWN0KFNPUlRfQ09NUEFSRV9GVU5DKTtcbiAgfVxuXG4gIGFkZEl0ZW1zKG5ld0l0ZW1zOiBUW10pIHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zXTtcblxuICAgIG5ld0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgLy8gY29uc3QgZGF0YSA9IG5ldyB0aGlzLmJhc2VDbGFzcyhpdGVtKTtcbiAgICAgIC8vIGNvbnN0IGRhdGEgPSBuZXcgdGhpcy5iYXNlQ2xhc3MoaXRlbSk7XG5cblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaXRlbXNbaW5kZXhdID0gaXRlbTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuICAgIGl0ZW1zLnNvcnQodGhpcy5zb3J0SXRlbXMpO1xuICAgIHRoaXMuX2l0ZW1zJC5uZXh0KGl0ZW1zKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBpZCk7XG5cbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG5cbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zLnNsaWNlKDAsIGluZGV4KSwgLi4udGhpcy5pdGVtcy5zbGljZShpbmRleCArIDEpXTtcbiAgICB0aGlzLl9pdGVtcyQubmV4dChpdGVtcyk7XG4gIH1cblxuICBwYXRjaEl0ZW0oaWQ6IHN0cmluZyB8IG51bWJlciwgaXRlbTogUGFydGlhbDxPbWl0PFQsICdpZCc+Pikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaSA9PiBpLmlkID09PSBpZCk7XG5cbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG5cbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zXTtcbiAgICBpdGVtc1tpbmRleF0gPSBuZXcgdGhpcy5iYXNlQ2xhc3MoeyAuLi5pdGVtc1tpbmRleF0sIC4uLml0ZW0gfSk7XG4gICAgaXRlbXMuc29ydCh0aGlzLnNvcnRJdGVtcyk7XG4gICAgdGhpcy5faXRlbXMkLm5leHQoaXRlbXMpO1xuICB9XG5cbiAgc29ydEl0ZW1zID0gKGE6IFQsIGI6IFQpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zb3J0Rm4oYSwgYik7XG4gIH07XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { AbstractMenuService } from './abstract-menu.service';\nimport { NavItem } from '@elite.framework/ng.core/models';\nimport * as i0 from \"@angular/core\";\nexport class NavItemsService extends AbstractMenuService {\n baseClass = NavItem;\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NavItemsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NavItemsService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NavItemsService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWl0ZW1zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9uYXYtaXRlbXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHMUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsbUJBQTRCO0lBQ3JELFNBQVMsR0FBRyxPQUFPLENBQUM7dUdBRG5CLGVBQWU7MkdBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0TWVudVNlcnZpY2UgfSBmcm9tICcuL2Fic3RyYWN0LW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmF2SXRlbXNTZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3RNZW51U2VydmljZTxOYXZJdGVtPiB7XG4gIHByb3RlY3RlZCBiYXNlQ2xhc3MgPSBOYXZJdGVtO1xufVxuIl19","import { Injectable } from '@angular/core';\nimport { AbstractMenuService } from './abstract-menu.service';\nimport { UserMenu } from '@elite.framework/ng.core/models';\nimport * as i0 from \"@angular/core\";\nexport class UserMenuService extends AbstractMenuService {\n baseClass = UserMenu;\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: UserMenuService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: UserMenuService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: UserMenuService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi91c2VyLW1lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHM0QsTUFBTSxPQUFPLGVBQWdCLFNBQVEsbUJBQTZCO0lBQ3RELFNBQVMsR0FBRyxRQUFRLENBQUM7dUdBRHBCLGVBQWU7MkdBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0TWVudVNlcnZpY2UgfSBmcm9tICcuL2Fic3RyYWN0LW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyTWVudSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFVzZXJNZW51U2VydmljZSBleHRlbmRzIEFic3RyYWN0TWVudVNlcnZpY2U8VXNlck1lbnU+IHtcbiAgcHJvdGVjdGVkIGJhc2VDbGFzcyA9IFVzZXJNZW51O1xufVxuIl19","import { PRIMARY_OUTLET } from \"@angular/router\";\nimport { noop } from '@elite.framework/ng.core/utils';\nexport function findRoute(routesService, path) {\n const node = routesService.find(route => route.path === path);\n return node || path === '/'\n ? node\n : findRoute(routesService, path.split('/').slice(0, -1).join('/') || '/');\n}\nexport function getRoutePath(router, url = router.url) {\n const emptyGroup = { segments: [] };\n const primaryGroup = router.parseUrl(url).root.children[PRIMARY_OUTLET];\n return '/' + (primaryGroup || emptyGroup).segments.map(({ path }) => path).join('/');\n}\nexport function reloadRoute(router, ngZone) {\n const { shouldReuseRoute } = router.routeReuseStrategy;\n const setRouteReuse = (reuse) => {\n router.routeReuseStrategy.shouldReuseRoute = reuse;\n };\n setRouteReuse(() => false);\n router.navigated = false;\n ngZone.run(async () => {\n await router.navigateByUrl(router.url).catch(noop);\n setRouteReuse(shouldReuseRoute);\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi91dGlscy9yb3V0ZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUF1QyxNQUFNLGlCQUFpQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxJQUFJLEVBQVksTUFBTSxnQ0FBZ0MsQ0FBQztBQUdoRSxNQUFNLFVBQVUsU0FBUyxDQUFDLGFBQTRCLEVBQUUsSUFBWTtJQUNsRSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUU5RCxPQUFPLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRztRQUN6QixDQUFDLENBQUMsSUFBSTtRQUNOLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFjLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHO0lBQzNELE1BQU0sVUFBVSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQWtCLEVBQXFCLENBQUM7SUFDdkUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXhFLE9BQU8sR0FBRyxHQUFHLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkYsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYyxFQUFFLE1BQWM7SUFDeEQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBOEIsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDckQsQ0FBQyxDQUFDO0lBRUYsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRXpCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDcEIsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQUklNQVJZX09VVExFVCwgUm91dGVyLCBVcmxTZWdtZW50LCBVcmxTZWdtZW50R3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgbm9vcCwgVHJlZU5vZGUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuaW1wb3J0IHsgUm91dGVzU2VydmljZSB9IGZyb20gJy4uL3JvdXRlcy5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRSb3V0ZShyb3V0ZXNTZXJ2aWNlOiBSb3V0ZXNTZXJ2aWNlLCBwYXRoOiBzdHJpbmcpOiBUcmVlTm9kZTxSb3V0ZT4gfCBudWxsIHtcbiAgY29uc3Qgbm9kZSA9IHJvdXRlc1NlcnZpY2UuZmluZChyb3V0ZSA9PiByb3V0ZS5wYXRoID09PSBwYXRoKTtcblxuICByZXR1cm4gbm9kZSB8fCBwYXRoID09PSAnLydcbiAgICA/IG5vZGVcbiAgICA6IGZpbmRSb3V0ZShyb3V0ZXNTZXJ2aWNlLCBwYXRoLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKSB8fCAnLycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVQYXRoKHJvdXRlcjogUm91dGVyLCB1cmwgPSByb3V0ZXIudXJsKSB7XG4gIGNvbnN0IGVtcHR5R3JvdXAgPSB7IHNlZ21lbnRzOiBbXSBhcyBVcmxTZWdtZW50W10gfSBhcyBVcmxTZWdtZW50R3JvdXA7XG4gIGNvbnN0IHByaW1hcnlHcm91cCA9IHJvdXRlci5wYXJzZVVybCh1cmwpLnJvb3QuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xuXG4gIHJldHVybiAnLycgKyAocHJpbWFyeUdyb3VwIHx8IGVtcHR5R3JvdXApLnNlZ21lbnRzLm1hcCgoeyBwYXRoIH0pID0+IHBhdGgpLmpvaW4oJy8nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZFJvdXRlKHJvdXRlcjogUm91dGVyLCBuZ1pvbmU6IE5nWm9uZSkge1xuICBjb25zdCB7IHNob3VsZFJldXNlUm91dGUgfSA9IHJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3k7XG4gIGNvbnN0IHNldFJvdXRlUmV1c2UgPSAocmV1c2U6IHR5cGVvZiBzaG91bGRSZXVzZVJvdXRlKSA9PiB7XG4gICAgcm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gcmV1c2U7XG4gIH07XG5cbiAgc2V0Um91dGVSZXVzZSgoKSA9PiBmYWxzZSk7XG4gIHJvdXRlci5uYXZpZ2F0ZWQgPSBmYWxzZTtcblxuICBuZ1pvbmUucnVuKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByb3V0ZXIubmF2aWdhdGVCeVVybChyb3V0ZXIudXJsKS5jYXRjaChub29wKTtcbiAgICBzZXRSb3V0ZVJldXNlKHNob3VsZFJldXNlUm91dGUpO1xuICB9KTtcbn1cbiJdfQ==","import { Injectable, NgZone } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { InternalStore } from '@elite.framework/ng.core/utils';\nimport { map } from 'rxjs/operators';\nimport { reloadRoute } from './utils/route-utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/router\";\nexport class ReplaceableComponentsService {\n ngZone;\n router;\n store;\n get replaceableComponents$() {\n return this.store.sliceState(state => state);\n }\n get replaceableComponents() {\n return this.store.state;\n }\n get onUpdate$() {\n return this.store.sliceUpdate(state => state);\n }\n constructor(ngZone, router) {\n this.ngZone = ngZone;\n this.router = router;\n this.store = new InternalStore([]);\n }\n add(replaceableComponent, reload) {\n const replaceableComponents = [...this.store.state];\n const index = replaceableComponents.findIndex(component => component.key === replaceableComponent.key);\n if (index > -1) {\n replaceableComponents[index] = replaceableComponent;\n }\n else {\n replaceableComponents.push(replaceableComponent);\n }\n this.store.set(replaceableComponents);\n if (reload)\n reloadRoute(this.router, this.ngZone);\n }\n get(replaceableComponentKey) {\n return this.replaceableComponents.find(component => component.key === replaceableComponentKey);\n }\n get$(replaceableComponentKey) {\n return this.replaceableComponents$.pipe(map(components => components.find(component => component.key === replaceableComponentKey)));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReplaceableComponentsService, deps: [{ token: i0.NgZone }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReplaceableComponentsService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ReplaceableComponentsService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.Router }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZWFibGUtY29tcG9uZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcmVwbGFjZWFibGUtY29tcG9uZW50cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBR2xELE1BQU0sT0FBTyw0QkFBNEI7SUFlbkI7SUFBd0I7SUFkM0IsS0FBSyxDQUE4RDtJQUVwRixJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsWUFBb0IsTUFBYyxFQUFVLE1BQWM7UUFBdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDeEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFrRCxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELEdBQUcsQ0FBQyxvQkFBZ0UsRUFBRSxNQUFnQjtRQUNwRixNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBELE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FDM0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLG9CQUFvQixDQUFDLEdBQUcsQ0FDeEQsQ0FBQztRQUVGLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDZixxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLHFCQUFxQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXRDLElBQUksTUFBTTtZQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsR0FBRyxDQUFDLHVCQUErQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLHVCQUF1QixDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELElBQUksQ0FBQyx1QkFBK0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyx1QkFBdUIsQ0FBQyxDQUFDLENBQzNGLENBQUM7SUFDSixDQUFDO3VHQTdDVSw0QkFBNEI7MkdBQTVCLDRCQUE0QixjQURmLE1BQU07OzJGQUNuQiw0QkFBNEI7a0JBRHhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUmVwbGFjZWFibGVDb21wb25lbnRzIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBJbnRlcm5hbFN0b3JlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHJlbG9hZFJvdXRlIH0gZnJvbSAnLi91dGlscy9yb3V0ZS11dGlscyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwbGFjZWFibGVDb21wb25lbnRzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IEludGVybmFsU3RvcmU8UmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10+O1xuXG4gIGdldCByZXBsYWNlYWJsZUNvbXBvbmVudHMkKCk6IE9ic2VydmFibGU8UmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlKTtcbiAgfVxuXG4gIGdldCByZXBsYWNlYWJsZUNvbXBvbmVudHMoKTogUmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlO1xuICB9XG5cbiAgZ2V0IG9uVXBkYXRlJCgpOiBPYnNlcnZhYmxlPFJlcGxhY2VhYmxlQ29tcG9uZW50cy5SZXBsYWNlYWJsZUNvbXBvbmVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VVcGRhdGUoc3RhdGUgPT4gc3RhdGUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgIHRoaXMuc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZShbXSBhcyBSZXBsYWNlYWJsZUNvbXBvbmVudHMuUmVwbGFjZWFibGVDb21wb25lbnRbXSk7XG4gIH1cblxuICBhZGQocmVwbGFjZWFibGVDb21wb25lbnQ6IFJlcGxhY2VhYmxlQ29tcG9uZW50cy5SZXBsYWNlYWJsZUNvbXBvbmVudCwgcmVsb2FkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHJlcGxhY2VhYmxlQ29tcG9uZW50cyA9IFsuLi50aGlzLnN0b3JlLnN0YXRlXTtcblxuICAgIGNvbnN0IGluZGV4ID0gcmVwbGFjZWFibGVDb21wb25lbnRzLmZpbmRJbmRleChcbiAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQua2V5ID09PSByZXBsYWNlYWJsZUNvbXBvbmVudC5rZXksXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXBsYWNlYWJsZUNvbXBvbmVudHNbaW5kZXhdID0gcmVwbGFjZWFibGVDb21wb25lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcGxhY2VhYmxlQ29tcG9uZW50cy5wdXNoKHJlcGxhY2VhYmxlQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnNldChyZXBsYWNlYWJsZUNvbXBvbmVudHMpO1xuXG4gICAgaWYgKHJlbG9hZCkgcmVsb2FkUm91dGUodGhpcy5yb3V0ZXIsIHRoaXMubmdab25lKTtcbiAgfVxuXG4gIGdldChyZXBsYWNlYWJsZUNvbXBvbmVudEtleTogc3RyaW5nKTogUmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlYWJsZUNvbXBvbmVudHMuZmluZChjb21wb25lbnQgPT4gY29tcG9uZW50LmtleSA9PT0gcmVwbGFjZWFibGVDb21wb25lbnRLZXkpO1xuICB9XG5cbiAgZ2V0JChyZXBsYWNlYWJsZUNvbXBvbmVudEtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZXBsYWNlYWJsZUNvbXBvbmVudHMuUmVwbGFjZWFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlYWJsZUNvbXBvbmVudHMkLnBpcGUoXG4gICAgICBtYXAoY29tcG9uZW50cyA9PiBjb21wb25lbnRzLmZpbmQoY29tcG9uZW50ID0+IGNvbXBvbmVudC5rZXkgPT09IHJlcGxhY2VhYmxlQ29tcG9uZW50S2V5KSksXG4gICAgKTtcbiAgfVxufVxuIl19","import { Injectable, Injector } from '@angular/core';\nimport { map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { of, Subject, timer } from 'rxjs';\nimport { getPathName, InternalStore } from '@elite.framework/ng.core/utils';\nimport * as i0 from \"@angular/core\";\nexport class HttpWaitService {\n store = new InternalStore({\n requests: [],\n filteredRequests: [],\n });\n delay;\n destroy$ = new Subject();\n constructor(injector) {\n this.delay = 500;\n }\n getLoading() {\n return !!this.applyFilter(this.store.state.requests).length;\n }\n getLoading$() {\n return this.store\n .sliceState(({ requests }) => requests)\n .pipe(map(requests => !!this.applyFilter(requests).length), switchMap(condition => condition\n ? this.delay === 0\n ? of(true)\n : timer(this.delay).pipe(mapTo(true), takeUntil(this.destroy$))\n : of(false)), tap(() => this.destroy$.next()));\n }\n updateLoading$() {\n return this.store.sliceUpdate(({ requests }) => !!this.applyFilter(requests).length);\n }\n clearLoading() {\n this.store.patch({ requests: [] });\n }\n addRequest(request) {\n this.store.patch({ requests: [...this.store.state.requests, request] });\n }\n deleteRequest(request) {\n const requests = this.store.state.requests.filter(r => r !== request);\n this.store.patch({ requests });\n }\n addFilter(request) {\n const requests = Array.isArray(request) ? request : [request];\n const filteredRequests = [\n ...this.store.state.filteredRequests.filter(f => !requests.some(r => this.isSameRequest(f, r))),\n ...requests,\n ];\n this.store.patch({ filteredRequests });\n }\n removeFilter(request) {\n const requests = Array.isArray(request) ? request : [request];\n const filteredRequests = this.store.state.filteredRequests.filter(f => !requests.some(r => this.isSameRequest(f, r)));\n this.store.patch({ filteredRequests });\n }\n applyFilter(requests) {\n if (!requests) {\n return [];\n }\n const { filteredRequests } = this.store.state;\n return requests.filter(({ method, url }) => !filteredRequests.find(filteredRequest => this.isSameRequest(filteredRequest, { method, endpoint: getPathName(url) })));\n }\n isSameRequest(filteredRequest, request) {\n const { method, endpoint } = filteredRequest;\n return endpoint === request.endpoint && method === request.method;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpWaitService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpWaitService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: HttpWaitService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC13YWl0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9odHRwLXdhaXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQWM1RSxNQUFNLE9BQU8sZUFBZTtJQUNoQixLQUFLLEdBQUcsSUFBSSxhQUFhLENBQWdCO1FBQ2pELFFBQVEsRUFBRSxFQUFFO1FBQ1osZ0JBQWdCLEVBQUUsRUFBRTtLQUNyQixDQUFDLENBQUM7SUFFSyxLQUFLLENBQVM7SUFDZCxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV2QyxZQUFZLFFBQWtCO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ2QsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQ3RDLElBQUksQ0FDSCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFD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QUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxXQUFXLENBQUMsUUFBd0M7UUFDMUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDOUMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUNwQixDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FDbEIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQzVFLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsZUFBZ0MsRUFBRSxPQUF3QjtRQUM5RSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUM3QyxPQUFPLFFBQVEsS0FBSyxPQUFPLENBQUMsUUFBUSxJQUFJLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3BFLENBQUM7dUdBckZVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwLCBtYXBUbywgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG9mLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0UGF0aE5hbWUsIEludGVybmFsU3RvcmUgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cFdhaXRTdGF0ZSB7XG4gIHJlcXVlc3RzOiBIdHRwUmVxdWVzdDxhbnk+W107XG4gIGZpbHRlcmVkUmVxdWVzdHM6IEFycmF5PEh0dHBSZXF1ZXN0SW5mbz47XG59XG5leHBvcnQgaW50ZXJmYWNlIEh0dHBSZXF1ZXN0SW5mbyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBlbmRwb2ludDogc3RyaW5nO1xufVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEh0dHBXYWl0U2VydmljZSB7XG4gIHByb3RlY3RlZCBzdG9yZSA9IG5ldyBJbnRlcm5hbFN0b3JlPEh0dHBXYWl0U3RhdGU+KHtcbiAgICByZXF1ZXN0czogW10sXG4gICAgZmlsdGVyZWRSZXF1ZXN0czogW10sXG4gIH0pO1xuXG4gIHByaXZhdGUgZGVsYXk6IG51bWJlcjtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5kZWxheSA9IDUwMDtcbiAgfVxuXG4gIGdldExvYWRpbmcoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5hcHBseUZpbHRlcih0aGlzLnN0b3JlLnN0YXRlLnJlcXVlc3RzKS5sZW5ndGg7XG4gIH1cblxuICBnZXRMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZVxuICAgICAgLnNsaWNlU3RhdGUoKHsgcmVxdWVzdHMgfSkgPT4gcmVxdWVzdHMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcXVlc3RzID0+ICEhdGhpcy5hcHBseUZpbHRlcihyZXF1ZXN0cykubGVuZ3RoKSxcbiAgICAgICAgc3dpdGNoTWFwKGNvbmRpdGlvbiA9PlxuICAgICAgICAgIGNvbmRpdGlvblxuICAgICAgICAgICAgPyB0aGlzLmRlbGF5ID09PSAwXG4gICAgICAgICAgICAgID8gb2YodHJ1ZSlcbiAgICAgICAgICAgICAgOiB0aW1lcih0aGlzLmRlbGF5KS5waXBlKG1hcFRvKHRydWUpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICA6IG9mKGZhbHNlKSxcbiAgICAgICAgKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZGVzdHJveSQubmV4dCgpKSxcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVVwZGF0ZSgoeyByZXF1ZXN0cyB9KSA9PiAhIXRoaXMuYXBwbHlGaWx0ZXIocmVxdWVzdHMpLmxlbmd0aCk7XG4gIH1cblxuICBjbGVhckxvYWRpbmcoKSB7XG4gICAgdGhpcy5zdG9yZS5wYXRjaCh7IHJlcXVlc3RzOiBbXSB9KTtcbiAgfVxuXG4gIGFkZFJlcXVlc3QocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pikge1xuICAgIHRoaXMuc3RvcmUucGF0Y2goeyByZXF1ZXN0czogWy4uLnRoaXMuc3RvcmUuc3RhdGUucmVxdWVzdHMsIHJlcXVlc3RdIH0pO1xuICB9XG5cbiAgZGVsZXRlUmVxdWVzdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLnN0b3JlLnN0YXRlLnJlcXVlc3RzLmZpbHRlcihyID0+IHIgIT09IHJlcXVlc3QpO1xuICAgIHRoaXMuc3RvcmUucGF0Y2goeyByZXF1ZXN0cyB9KTtcbiAgfVxuXG4gIGFkZEZpbHRlcihyZXF1ZXN0OiBIdHRwUmVxdWVzdEluZm8gfCBIdHRwUmVxdWVzdEluZm9bXSkge1xuICAgIGNvbnN0IHJlcXVlc3RzID0gQXJyYXkuaXNBcnJheShyZXF1ZXN0KSA/IHJlcXVlc3QgOiBbcmVxdWVzdF07XG4gICAgY29uc3QgZmlsdGVyZWRSZXF1ZXN0cyA9IFtcbiAgICAgIC4uLnRoaXMuc3RvcmUuc3RhdGUuZmlsdGVyZWRSZXF1ZXN0cy5maWx0ZXIoXG4gICAgICAgIGYgPT4gIXJlcXVlc3RzLnNvbWUociA9PiB0aGlzLmlzU2FtZVJlcXVlc3QoZiwgcikpLFxuICAgICAgKSxcbiAgICAgIC4uLnJlcXVlc3RzLFxuICAgIF07XG4gICAgdGhpcy5zdG9yZS5wYXRjaCh7IGZpbHRlcmVkUmVxdWVzdHMgfSk7XG4gIH1cblxuICByZW1vdmVGaWx0ZXIocmVxdWVzdDogSHR0cFJlcXVlc3RJbmZvIHwgSHR0cFJlcXVlc3RJbmZvW10pIHtcbiAgICBjb25zdCByZXF1ZXN0cyA9IEFycmF5LmlzQXJyYXkocmVxdWVzdCkgPyByZXF1ZXN0IDogW3JlcXVlc3RdO1xuICAgIGNvbnN0IGZpbHRlcmVkUmVxdWVzdHMgPSB0aGlzLnN0b3JlLnN0YXRlLmZpbHRlcmVkUmVxdWVzdHMuZmlsdGVyKFxuICAgICAgZiA9PiAhcmVxdWVzdHMuc29tZShyID0+IHRoaXMuaXNTYW1lUmVxdWVzdChmLCByKSksXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLnBhdGNoKHsgZmlsdGVyZWRSZXF1ZXN0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXIocmVxdWVzdHM6IEh0dHBSZXF1ZXN0PGFueT5bXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghcmVxdWVzdHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgeyBmaWx0ZXJlZFJlcXVlc3RzIH0gPSB0aGlzLnN0b3JlLnN0YXRlO1xuICAgIHJldHVybiByZXF1ZXN0cy5maWx0ZXIoXG4gICAgICAoeyBtZXRob2QsIHVybCB9KSA9PlxuICAgICAgICAhZmlsdGVyZWRSZXF1ZXN0cy5maW5kKGZpbHRlcmVkUmVxdWVzdCA9PlxuICAgICAgICAgIHRoaXMuaXNTYW1lUmVxdWVzdChmaWx0ZXJlZFJlcXVlc3QsIHsgbWV0aG9kLCBlbmRwb2ludDogZ2V0UGF0aE5hbWUodXJsKSB9KSxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NhbWVSZXF1ZXN0KGZpbHRlcmVkUmVxdWVzdDogSHR0cFJlcXVlc3RJbmZvLCByZXF1ZXN0OiBIdHRwUmVxdWVzdEluZm8pIHtcbiAgICBjb25zdCB7IG1ldGhvZCwgZW5kcG9pbnQgfSA9IGZpbHRlcmVkUmVxdWVzdDtcbiAgICByZXR1cm4gZW5kcG9pbnQgPT09IHJlcXVlc3QuZW5kcG9pbnQgJiYgbWV0aG9kID09PSByZXF1ZXN0Lm1ldGhvZDtcbiAgfVxufVxuIl19","import { Injectable, inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class WindowService {\n document = inject(DOCUMENT);\n window = this.document.defaultView;\n navigator = this.window?.navigator;\n copyToClipboard(text) {\n return this.navigator?.clipboard.writeText(text);\n }\n open(url, target, features) {\n return this.window?.open(url, target, features);\n }\n reloadPage() {\n this.window?.location.reload();\n }\n downloadBlob(blob, fileName) {\n const blobUrl = this.window?.URL.createObjectURL(blob);\n const a = this.document.createElement('a');\n a.style.display = 'none';\n a.href = blobUrl ?? '';\n a.download = fileName;\n this.document.body.appendChild(a);\n a.dispatchEvent(new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: this.window,\n }));\n this.window?.URL.revokeObjectURL(blobUrl ?? '');\n this.document.body.removeChild(a);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: WindowService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: WindowService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: WindowService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi93aW5kb3cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxhQUFhO0lBQ1IsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDbkMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO0lBRW5ELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLENBQUMsR0FBa0IsRUFBRSxNQUFlLEVBQUUsUUFBaUI7UUFDekQsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELFlBQVksQ0FBQyxJQUFVLEVBQUUsUUFBZ0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN6QixDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxhQUFhLENBQ2IsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLElBQUk7WUFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ2xCLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQzt1R0FoQ1UsYUFBYTsyR0FBYixhQUFhLGNBREEsTUFBTTs7MkZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgV2luZG93U2VydmljZSB7XG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHB1YmxpYyByZWFkb25seSB3aW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBwdWJsaWMgcmVhZG9ubHkgbmF2aWdhdG9yID0gdGhpcy53aW5kb3c/Lm5hdmlnYXRvcjtcblxuICBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPnxhbnkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRvcj8uY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgfVxuXG4gIG9wZW4odXJsPzogc3RyaW5nIHwgVVJMLCB0YXJnZXQ/OiBzdHJpbmcsIGZlYXR1cmVzPzogc3RyaW5nKTogV2luZG93fGFueSB7XG4gICAgcmV0dXJuIHRoaXMud2luZG93Py5vcGVuKHVybCwgdGFyZ2V0LCBmZWF0dXJlcyk7XG4gIH1cblxuICByZWxvYWRQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMud2luZG93Py5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuICBkb3dubG9hZEJsb2IoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGJsb2JVcmwgPSB0aGlzLndpbmRvdz8uVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBjb25zdCBhID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGEuaHJlZiA9IGJsb2JVcmwgPz8gJyc7XG4gICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xuICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICBhLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIHZpZXc6IHRoaXMud2luZG93LFxuICAgICAgfSksXG4gICAgKTtcbiAgICB0aGlzLndpbmRvdz8uVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsID8/ICcnKTtcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gIH1cbn1cbiJdfQ==","import { HttpClient } from '@angular/common/http';\nimport { of } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { deepMerge } from '@elite.framework/ng.core/utils';\nimport { EnvironmentService } from '../environment.service';\nimport { HttpErrorReporterService } from '../http-error-reporter.service';\nexport function getRemoteEnv(injector, environment) {\n const environmentService = injector.get(EnvironmentService);\n const { remoteEnv } = environment;\n const { headers = {}, method = 'GET', url } = remoteEnv || {};\n if (!url)\n return Promise.resolve();\n const http = injector.get(HttpClient);\n const httpErrorReporter = injector.get(HttpErrorReporterService);\n return http\n .request(method, url, { headers })\n .pipe(catchError(err => {\n httpErrorReporter.reportError(err);\n return of(null);\n }), // TODO: Consider get handle function from a provider\n tap(env => environmentService.setState(mergeEnvironments(environment, env || {}, remoteEnv))))\n .toPromise();\n}\nfunction mergeEnvironments(local, remote, config) {\n switch (config.mergeStrategy) {\n case 'deepmerge':\n return deepMerge(local, remote);\n case 'overwrite':\n case null:\n case undefined:\n return remote;\n default:\n return config.mergeStrategy(local, remote);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi91dGlscy9lbnZpcm9ubWVudC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUxRSxNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQWtCLEVBQUUsV0FBaUM7SUFDaEYsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFNUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVMsSUFBSyxFQUFnQixDQUFDO0lBQzdFLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFbkMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUVqRSxPQUFPLElBQUk7U0FDUixPQUFPLENBQWMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQzlDLElBQUksQ0FDSCxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDLEVBQUUscURBQXFEO0lBQ3pELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNSLGtCQUFrQixDQUFDLFFBQVEsQ0FDekIsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSyxFQUFrQixFQUFFLFNBQXNCLENBQUMsQ0FDbkYsQ0FDRixDQUNGO1NBQ0EsU0FBUyxFQUFFLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQ3hCLEtBQTJCLEVBQzNCLE1BQW1CLEVBQ25CLE1BQWlCO0lBRWpCLFFBQVEsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLEtBQUssV0FBVztZQUNkLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQWdCLENBQUM7UUFDakQsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLFNBQVM7WUFDWixPQUFPLE1BQU0sQ0FBQztRQUNoQjtZQUNFLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgUmVtb3RlRW52IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2UgfSBmcm9tICcuLi9odHRwLWVycm9yLXJlcG9ydGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVtb3RlRW52KGluamVjdG9yOiBJbmplY3RvciwgZW52aXJvbm1lbnQ6IFBhcnRpYWw8RW52aXJvbm1lbnQ+KSB7XG4gIGNvbnN0IGVudmlyb25tZW50U2VydmljZSA9IGluamVjdG9yLmdldChFbnZpcm9ubWVudFNlcnZpY2UpO1xuXG4gIGNvbnN0IHsgcmVtb3RlRW52IH0gPSBlbnZpcm9ubWVudDtcbiAgY29uc3QgeyBoZWFkZXJzID0ge30sIG1ldGhvZCA9ICdHRVQnLCB1cmwgfSA9IHJlbW90ZUVudiB8fCAoe30gYXMgUmVtb3RlRW52KTtcbiAgaWYgKCF1cmwpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICBjb25zdCBodHRwID0gaW5qZWN0b3IuZ2V0KEh0dHBDbGllbnQpO1xuICBjb25zdCBodHRwRXJyb3JSZXBvcnRlciA9IGluamVjdG9yLmdldChIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2UpO1xuXG4gIHJldHVybiBodHRwXG4gICAgLnJlcXVlc3Q8RW52aXJvbm1lbnQ+KG1ldGhvZCwgdXJsLCB7IGhlYWRlcnMgfSlcbiAgICAucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgaHR0cEVycm9yUmVwb3J0ZXIucmVwb3J0RXJyb3IoZXJyKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksIC8vIFRPRE86IENvbnNpZGVyIGdldCBoYW5kbGUgZnVuY3Rpb24gZnJvbSBhIHByb3ZpZGVyXG4gICAgICB0YXAoZW52ID0+XG4gICAgICAgIGVudmlyb25tZW50U2VydmljZS5zZXRTdGF0ZShcbiAgICAgICAgICBtZXJnZUVudmlyb25tZW50cyhlbnZpcm9ubWVudCwgZW52IHx8ICh7fSBhcyBFbnZpcm9ubWVudCksIHJlbW90ZUVudiBhcyBSZW1vdGVFbnYpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApXG4gICAgLnRvUHJvbWlzZSgpO1xufVxuXG5mdW5jdGlvbiBtZXJnZUVudmlyb25tZW50cyhcbiAgbG9jYWw6IFBhcnRpYWw8RW52aXJvbm1lbnQ+LFxuICByZW1vdGU6IEVudmlyb25tZW50LFxuICBjb25maWc6IFJlbW90ZUVudixcbik6IEVudmlyb25tZW50IHtcbiAgc3dpdGNoIChjb25maWcubWVyZ2VTdHJhdGVneSkge1xuICAgIGNhc2UgJ2RlZXBtZXJnZSc6XG4gICAgICByZXR1cm4gZGVlcE1lcmdlKGxvY2FsLCByZW1vdGUpIGFzIEVudmlyb25tZW50O1xuICAgIGNhc2UgJ292ZXJ3cml0ZSc6XG4gICAgY2FzZSBudWxsOlxuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgcmV0dXJuIHJlbW90ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbmZpZy5tZXJnZVN0cmF0ZWd5KGxvY2FsLCByZW1vdGUpO1xuICB9XG59XG4iXX0=","import { firstValueFrom } from 'rxjs';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { TENANT_NOT_FOUND_BY_NAME } from '@elite.framework/ng.core/tokens';\nimport clone from 'just-clone';\nimport { createTokenParser } from '@elite.framework/ng.core/utils';\nimport { EnvironmentService } from '../environment.service';\nimport { MultiTenancyService } from '../multi-tenancy.service';\nimport { SsrCookieService } from '../ssr-cookie.service';\nconst tenancyPlaceholder = '{0}';\nfunction getCurrentTenancyName(appBaseUrl, injector) {\n const cookieService = injector.get(SsrCookieService);\n if (appBaseUrl.charAt(appBaseUrl.length - 1) !== '/')\n appBaseUrl += '/';\n const parseTokens = createTokenParser(appBaseUrl);\n const token = tenancyPlaceholder.replace(/[}{]/g, '');\n try {\n return parseTokens(cookieService.url)[token]?.[0];\n }\n catch (error) {\n return '';\n }\n // return parseTokens(window.location.href)[token]?.[0];\n // const pattern = /^http?:\\/\\/([^.]+)\\.localhost\\:4200/;\n // const match = cookieService.url.match(pattern);\n // if (match && match.length > 1) {\n // return match[1];\n // }\n // return '';\n}\nexport function getCurrentTenancyNameFromUrl(tenantKey) {\n if (typeof window === 'undefined') {\n return null; // or fallback like: return '';\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(tenantKey);\n}\n//\nexport async function parseTenantFromUrl(injector) {\n const environmentService = injector.get(EnvironmentService);\n const multiTenancyService = injector.get(MultiTenancyService);\n const tenantNotFoundHandler = injector.get(TENANT_NOT_FOUND_BY_NAME, null);\n const baseUrl = environmentService.getEnvironment()?.application?.baseUrl || '';\n const tenancyName = getCurrentTenancyName(baseUrl, injector);\n const hideTenantBox = () => {\n multiTenancyService.isTenantBoxVisible = false;\n };\n const setDomainTenant = (tenant) => {\n multiTenancyService.domainTenant = {\n id: tenant.id,\n name: tenant.name,\n isAvailable: true,\n };\n };\n const setEnvironmentWithDomainTenant = (tenant) => {\n hideTenantBox();\n setDomainTenant(tenant);\n };\n if (tenancyName) {\n /**\n * We have to replace tenant name within the urls from environment,\n * because the code below will make a http request to find information about the domain tenant.\n * Before this request takes place, we need to replace placeholders aka \"{0}\".\n */\n replaceTenantNameWithinEnvironment(injector, tenancyName);\n const tenant$ = multiTenancyService.setTenantByName(tenancyName);\n try {\n const result = await firstValueFrom(tenant$);\n setEnvironmentWithDomainTenant(result);\n return Promise.resolve(result);\n }\n catch (httpError) {\n if (httpError instanceof HttpErrorResponse &&\n httpError.status === 404 &&\n tenantNotFoundHandler) {\n tenantNotFoundHandler(httpError);\n }\n return Promise.reject();\n }\n }\n /**\n * If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests.\n */\n replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.');\n const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey);\n if (tenantIdFromQueryParams) {\n const tenantById$ = multiTenancyService.setTenantById(tenantIdFromQueryParams);\n return firstValueFrom(tenantById$);\n }\n return Promise.resolve();\n}\nfunction replaceTenantNameWithinEnvironment(injector, tenancyName, placeholder = tenancyPlaceholder) {\n const environmentService = injector.get(EnvironmentService);\n const environment = clone(environmentService.getEnvironment());\n if (environment.application.baseUrl) {\n environment.application.baseUrl = environment.application.baseUrl.replace(placeholder, tenancyName);\n }\n if (environment.oAuthConfig?.redirectUri) {\n environment.oAuthConfig.redirectUri = environment.oAuthConfig.redirectUri.replace(placeholder, tenancyName);\n }\n if (!environment.oAuthConfig) {\n environment.oAuthConfig = {};\n }\n environment.oAuthConfig.issuer = (environment.oAuthConfig.issuer || '').replace(placeholder, tenancyName);\n Object.keys(environment.apis).forEach(api => {\n Object.keys(environment.apis[api]).forEach(key => {\n environment.apis[api][key] = (environment.apis[api][key] || '').replace(placeholder, tenancyName);\n });\n });\n return environmentService.setState(environment);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3V0aWxzL211bHRpLXRlbmFuY3ktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEtBQUssTUFBTyxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsU0FBUyxxQkFBcUIsQ0FBQyxVQUFrQixFQUFDLFFBQWtCO0lBRWpFLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHO1FBQUUsVUFBVSxJQUFJLEdBQUcsQ0FBQztJQUV4RSxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQztRQUNILE9BQU8sV0FBVyxDQUFDLGFB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QUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FDN0UsV0FBVyxFQUNYLFdBQVcsQ0FDWixDQUFDO0lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQ3JFLFdBQVcsRUFDWCxXQUFXLENBQ1osQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFRlbmFudExvZ2luSW5mb0R0bywgRW52aXJvbm1lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcbmltcG9ydCB7IFRFTkFOVF9OT1RfRk9VTkRfQllfTkFNRSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS90b2tlbnMnO1xuaW1wb3J0IGNsb25lIGZyb20gICdqdXN0LWNsb25lJztcbmltcG9ydCB7IGNyZWF0ZVRva2VuUGFyc2VyIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlUZW5hbmN5U2VydmljZSB9IGZyb20gJy4uL211bHRpLXRlbmFuY3kuc2VydmljZSc7XG5pbXBvcnQgeyBTc3JDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi4vc3NyLWNvb2tpZS5zZXJ2aWNlJztcblxuY29uc3QgdGVuYW5jeVBsYWNlaG9sZGVyID0gJ3swfSc7XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUZW5hbmN5TmFtZShhcHBCYXNlVXJsOiBzdHJpbmcsaW5qZWN0b3I6IEluamVjdG9yKTogc3RyaW5nIHtcblxuICAgY29uc3QgY29va2llU2VydmljZSA9IGluamVjdG9yLmdldChTc3JDb29raWVTZXJ2aWNlKTtcbiAgaWYgKGFwcEJhc2VVcmwuY2hhckF0KGFwcEJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgYXBwQmFzZVVybCArPSAnLyc7XG5cbiAgY29uc3QgcGFyc2VUb2tlbnMgPSBjcmVhdGVUb2tlblBhcnNlcihhcHBCYXNlVXJsKTtcbiAgY29uc3QgdG9rZW4gPSB0ZW5hbmN5UGxhY2Vob2xkZXIucmVwbGFjZSgvW317XS9nLCAnJyk7XG5cbiB0cnkge1xuICAgcmV0dXJuIHBhcnNlVG9rZW5zKGNvb2tpZVNlcnZpY2UudXJsKVt0b2tlbl0/LlswXTtcbiB9IGNhdGNoIChlcnJvcikge1xuICByZXR1cm4gJyc7XG4gfVxuICAvLyByZXR1cm4gcGFyc2VUb2tlbnMod2luZG93LmxvY2F0aW9uLmhyZWYpW3Rva2VuXT8uWzBdO1xuICAvLyBjb25zdCBwYXR0ZXJuID0gL15odHRwPzpcXC9cXC8oW14uXSspXFwubG9jYWxob3N0XFw6NDIwMC87XG4gIC8vIGNvbnN0IG1hdGNoID0gY29va2llU2VydmljZS51cmwubWF0Y2gocGF0dGVybik7XG4gIC8vIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gIC8vICAgcmV0dXJuIG1hdGNoWzFdO1xuICAvLyB9XG4gIC8vICByZXR1cm4gJyc7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRUZW5hbmN5TmFtZUZyb21VcmwodGVuYW50S2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIG9yIGZhbGxiYWNrIGxpa2U6IHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIHJldHVybiB1cmxQYXJhbXMuZ2V0KHRlbmFudEtleSk7XG59XG5cbi8vXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUZW5hbnRGcm9tVXJsKGluamVjdG9yOiBJbmplY3Rvcikge1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcbiAgY29uc3QgbXVsdGlUZW5hbmN5U2VydmljZSA9IGluamVjdG9yLmdldChNdWx0aVRlbmFuY3lTZXJ2aWNlKTtcbiAgY29uc3QgdGVuYW50Tm90Rm91bmRIYW5kbGVyID0gaW5qZWN0b3IuZ2V0KFRFTkFOVF9OT1RfRk9VTkRfQllfTkFNRSwgbnVsbCk7XG5cbiAgY29uc3QgYmFzZVVybCA9IGVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpPy5hcHBsaWNhdGlvbj8uYmFzZVVybCB8fCAnJztcblxuICBjb25zdCB0ZW5hbmN5TmFtZSA9IGdldEN1cnJlbnRUZW5hbmN5TmFtZShiYXNlVXJsLGluamVjdG9yKTtcblxuICBjb25zdCBoaWRlVGVuYW50Qm94ID0gKCkgPT4ge1xuICAgIG11bHRpVGVuYW5jeVNlcnZpY2UuaXNUZW5hbnRCb3hWaXNpYmxlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3Qgc2V0RG9tYWluVGVuYW50ID0gKHRlbmFudDogVGVuYW50TG9naW5JbmZvRHRvKSA9PiB7XG4gICAgbXVsdGlUZW5hbmN5U2VydmljZS5kb21haW5UZW5hbnQgPSB7XG4gICAgICBpZDogdGVuYW50LmlkLFxuICAgICAgbmFtZTogdGVuYW50Lm5hbWUsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHNldEVudmlyb25tZW50V2l0aERvbWFpblRlbmFudCA9ICh0ZW5hbnQ6IFRlbmFudExvZ2luSW5mb0R0bykgPT4ge1xuICAgIGhpZGVUZW5hbnRCb3goKTtcbiAgICBzZXREb21haW5UZW5hbnQodGVuYW50KTtcbiAgfTtcblxuICBpZiAodGVuYW5jeU5hbWUpIHtcbiAgICAvKipcbiAgICAgKiBXZSBoYXZlIHRvIHJlcGxhY2UgdGVuYW50IG5hbWUgd2l0aGluIHRoZSB1cmxzIGZyb20gZW52aXJvbm1lbnQsXG4gICAgICogYmVjYXVzZSB0aGUgY29kZSBiZWxvdyB3aWxsIG1ha2UgYSBodHRwIHJlcXVlc3QgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZG9tYWluIHRlbmFudC5cbiAgICAgKiBCZWZvcmUgdGhpcyByZXF1ZXN0IHRha2VzIHBsYWNlLCB3ZSBuZWVkIHRvIHJlcGxhY2UgcGxhY2Vob2xkZXJzIGFrYSBcInswfVwiLlxuICAgICAqL1xuICAgIHJlcGxhY2VUZW5hbnROYW1lV2l0aGluRW52aXJvbm1lbnQoaW5qZWN0b3IsIHRlbmFuY3lOYW1lKTtcblxuICAgIGNvbnN0IHRlbmFudCQgPSBtdWx0aVRlbmFuY3lTZXJ2aWNlLnNldFRlbmFudEJ5TmFtZSh0ZW5hbmN5TmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRlbmFudCQpO1xuICAgICAgc2V0RW52aXJvbm1lbnRXaXRoRG9tYWluVGVuYW50KHJlc3VsdCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBodHRwRXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJlxuICAgICAgICBodHRwRXJyb3Iuc3RhdHVzID09PSA0MDQgJiZcbiAgICAgICAgdGVuYW50Tm90Rm91bmRIYW5kbGVyXG4gICAgICApIHtcbiAgICAgICAgdGVuYW50Tm90Rm91bmRIYW5kbGVyKGh0dHBFcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIElmIHRoZXJlIGlzIG5vIHRlbmFudCwgd2Ugc3RpbGwgaGF2ZSB0byBjbGVhbiB1cCB7MH0uIGZyb20gYmFzZVVybCB0byBhdm9pZCBpbmNvcnJlY3QgaHR0cCByZXF1ZXN0cy5cbiAgICovXG4gIHJlcGxhY2VUZW5hbnROYW1lV2l0aGluRW52aXJvbm1lbnQoaW5qZWN0b3IsICcnLCB0ZW5hbmN5UGxhY2Vob2xkZXIgKyAnLicpO1xuXG4gIGNvbnN0IHRlbmFudElkRnJvbVF1ZXJ5UGFyYW1zID0gZ2V0Q3VycmVudFRlbmFuY3lOYW1lRnJvbVVybChtdWx0aVRlbmFuY3lTZXJ2aWNlLnRlbmFudEtleSk7XG4gIGlmICh0ZW5hbnRJZEZyb21RdWVyeVBhcmFtcykge1xuXG4gICAgY29uc3QgdGVuYW50QnlJZCQgPSBtdWx0aVRlbmFuY3lTZXJ2aWNlLnNldFRlbmFudEJ5SWQodGVuYW50SWRGcm9tUXVlcnlQYXJhbXMpO1xuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0ZW5hbnRCeUlkJCk7XG4gIH1cblxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVRlbmFudE5hbWVXaXRoaW5FbnZpcm9ubWVudChcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuICB0ZW5hbmN5TmFtZTogc3RyaW5nLFxuICBwbGFjZWhvbGRlciA9IHRlbmFuY3lQbGFjZWhvbGRlcixcbikge1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcblxuICBjb25zdCBlbnZpcm9ubWVudCA9IGNsb25lKGVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSBhcyBFbnZpcm9ubWVudDtcblxuICBpZiAoZW52aXJvbm1lbnQuYXBwbGljYXRpb24uYmFzZVVybCkge1xuICAgIGVudmlyb25tZW50LmFwcGxpY2F0aW9uLmJhc2VVcmwgPSBlbnZpcm9ubWVudC5hcHBsaWNhdGlvbi5iYXNlVXJsLnJlcGxhY2UoXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHRlbmFuY3lOYW1lLFxuICAgICk7XG4gIH1cblxuICBpZiAoZW52aXJvbm1lbnQub0F1dGhDb25maWc/LnJlZGlyZWN0VXJpKSB7XG4gICAgZW52aXJvbm1lbnQub0F1dGhDb25maWcucmVkaXJlY3RVcmkgPSBlbnZpcm9ubWVudC5vQXV0aENvbmZpZy5yZWRpcmVjdFVyaS5yZXBsYWNlKFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICB0ZW5hbmN5TmFtZSxcbiAgICApO1xuICB9XG5cbiAgaWYgKCFlbnZpcm9ubWVudC5vQXV0aENvbmZpZykge1xuICAgIGVudmlyb25tZW50Lm9BdXRoQ29uZmlnID0ge307XG4gIH1cbiAgZW52aXJvbm1lbnQub0F1dGhDb25maWcuaXNzdWVyID0gKGVudmlyb25tZW50Lm9BdXRoQ29uZmlnLmlzc3VlciB8fCAnJykucmVwbGFjZShcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0ZW5hbmN5TmFtZSxcbiAgKTtcblxuICBPYmplY3Qua2V5cyhlbnZpcm9ubWVudC5hcGlzKS5mb3JFYWNoKGFwaSA9PiB7XG4gICAgT2JqZWN0LmtleXMoZW52aXJvbm1lbnQuYXBpc1thcGldKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBlbnZpcm9ubWVudC5hcGlzW2FwaV1ba2V5XSA9IChlbnZpcm9ubWVudC5hcGlzW2FwaV1ba2V5XSB8fCAnJykucmVwbGFjZShcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIHRlbmFuY3lOYW1lLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVudmlyb25tZW50U2VydmljZS5zZXRTdGF0ZShlbnZpcm9ubWVudCk7XG59XG4iXX0=","import { registerLocaleData } from '@angular/common';\nimport { inject, Injector } from '@angular/core';\nimport { tap, catchError } from 'rxjs/operators';\nimport { lastValueFrom, noop, throwError } from 'rxjs';\nimport { CORE_OPTIONS, CHECK_AUTHENTICATION_STATE_FN_KEY, APP_INIT_ERROR_HANDLERS } from '@elite.framework/ng.core/tokens';\nimport { getRemoteEnv } from './environment-utils';\nimport { parseTenantFromUrl } from './multi-tenancy-utils';\nimport { AuthService } from '@elite.framework/ng.core/abstracts';\nimport { EnvironmentService } from '../environment.service';\nimport { ConfigStateService } from '../config-state.service';\nimport { SessionStateService } from '../session-state.service';\nexport async function getInitialData() {\n const injector = inject(Injector);\n const environmentService = injector.get(EnvironmentService);\n const configState = injector.get(ConfigStateService);\n const options = injector.get(CORE_OPTIONS);\n environmentService.setState(options.environment);\n await getRemoteEnv(injector, options.environment);\n await parseTenantFromUrl(injector);\n const authService = injector.get(AuthService, undefined, { optional: true });\n const checkAuthenticationState = injector.get(CHECK_AUTHENTICATION_STATE_FN_KEY, noop, {\n optional: true,\n });\n if (!options.skipInitAuthService && authService) {\n await authService.init();\n }\n if (options.skipGetAppConfiguration)\n return;\n const result$ = configState.refreshAppState().pipe(tap(() => checkAuthenticationState(injector)), tap(() => {\n const currentTenant = configState.getOne('currentTenant');\n injector.get(SessionStateService).setTenant(currentTenant);\n // const currentSession= configState.getOne('currentT') as Session.State;\n // injector.get(SessionStateService).setState(currentSession);\n }), catchError(error => {\n const appInitErrorHandlers = injector.get(APP_INIT_ERROR_HANDLERS, null);\n if (appInitErrorHandlers && appInitErrorHandlers.length) {\n appInitErrorHandlers.forEach(func => func(error));\n }\n return throwError(() => error);\n // Don't rethrow to avoid breaking the app\n // return of(null); // ✅ suppresses the error\n }));\n await lastValueFrom(result$);\n}\nexport function localeInitializer() {\n const injector = inject(Injector);\n const sessionState = injector.get(SessionStateService);\n const { registerLocaleFn } = injector.get(CORE_OPTIONS);\n const lang = sessionState.getLanguage() || 'en';\n return new Promise((resolve, reject) => {\n registerLocaleFn(lang).then(module => {\n if (module?.default)\n registerLocaleData(module.default);\n return resolve('resolved');\n }, reject);\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3V0aWxzL2luaXRpYWwtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBTSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxpQ0FBaUMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjO0lBRWxDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM1RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENB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ZURhdGEgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSwgbm9vcCwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1cnJlbnRUZW5hbnREdG8sIEVudmlyb25tZW50LCBSb290IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBDT1JFX09QVElPTlMsIENIRUNLX0FVVEhFTlRJQ0FUSU9OX1NUQVRFX0ZOX0tFWSwgQVBQX0lOSVRfRVJST1JfSEFORExFUlMgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvdG9rZW5zJztcbmltcG9ydCB7IGdldFJlbW90ZUVudiB9IGZyb20gJy4vZW52aXJvbm1lbnQtdXRpbHMnO1xuaW1wb3J0IHsgcGFyc2VUZW5hbnRGcm9tVXJsIH0gZnJvbSAnLi9tdWx0aS10ZW5hbmN5LXV0aWxzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL2Fic3RyYWN0cyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi9lbnZpcm9ubWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLXN0YXRlLnNlcnZpY2UnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SW5pdGlhbERhdGEoKSB7XG5cbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcbiAgY29uc3QgY29uZmlnU3RhdGUgPSBpbmplY3Rvci5nZXQoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcbiAgY29uc3Qgb3B0aW9ucyA9IGluamVjdG9yLmdldChDT1JFX09QVElPTlMpIGFzIFJvb3Q7XG5cbiAgZW52aXJvbm1lbnRTZXJ2aWNlLnNldFN0YXRlKG9wdGlvbnMuZW52aXJvbm1lbnQgYXMgRW52aXJvbm1lbnQpO1xuICBhd2FpdCBnZXRSZW1vdGVFbnYoaW5qZWN0b3IsIG9wdGlvbnMuZW52aXJvbm1lbnQpO1xuICBhd2FpdCBwYXJzZVRlbmFudEZyb21VcmwoaW5qZWN0b3IpO1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoU2VydmljZSwgdW5kZWZpbmVkLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBjb25zdCBjaGVja0F1dGhlbnRpY2F0aW9uU3RhdGUgPSBpbmplY3Rvci5nZXQoQ0hFQ0tfQVVUSEVOVElDQVRJT05fU1RBVEVfRk5fS0VZLCBub29wLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuICBpZiAoIW9wdGlvbnMuc2tpcEluaXRBdXRoU2VydmljZSAmJiBhdXRoU2VydmljZSkge1xuICAgIGF3YWl0IGF1dGhTZXJ2aWNlLmluaXQoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNraXBHZXRBcHBDb25maWd1cmF0aW9uKSByZXR1cm47XG5cbiAgY29uc3QgcmVzdWx0JCA9IGNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpLnBpcGUoXG4gICAgdGFwKCgpID0+IGNoZWNrQXV0aGVudGljYXRpb25TdGF0ZShpbmplY3RvcikpLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VGVuYW50JykgYXMgQ3VycmVudFRlbmFudER0bztcbiAgICAgIGluamVjdG9yLmdldChTZXNzaW9uU3RhdGVTZXJ2aWNlKS5zZXRUZW5hbnQoY3VycmVudFRlbmFudCk7XG4gICAgICAvLyAgY29uc3QgY3VycmVudFNlc3Npb249IGNvbmZpZ1N0YXRlLmdldE9uZSgnY3VycmVudFQnKSBhcyBTZXNzaW9uLlN0YXRlO1xuICAgICAgLy8gaW5qZWN0b3IuZ2V0KFNlc3Npb25TdGF0ZVNlcnZpY2UpLnNldFN0YXRlKGN1cnJlbnRTZXNzaW9uKTtcbiAgICB9KSxcbiAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcblxuICAgICAgY29uc3QgYXBwSW5pdEVycm9ySGFuZGxlcnMgPSBpbmplY3Rvci5nZXQoQVBQX0lOSVRfRVJST1JfSEFORExFUlMsIG51bGwpO1xuICAgICAgaWYgKGFwcEluaXRFcnJvckhhbmRsZXJzICYmIGFwcEluaXRFcnJvckhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICBhcHBJbml0RXJyb3JIYW5kbGVycy5mb3JFYWNoKGZ1bmMgPT4gZnVuYyhlcnJvcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgLy8gRG9uJ3QgcmV0aHJvdyB0byBhdm9pZCBicmVha2luZyB0aGUgYXBwXG4gICAgLy8gcmV0dXJuIG9mKG51bGwpOyAvLyDinIUgc3VwcHJlc3NlcyB0aGUgZXJyb3JcbiAgICB9KSxcbiAgKTtcbiAgYXdhaXQgbGFzdFZhbHVlRnJvbShyZXN1bHQkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsZUluaXRpYWxpemVyKCkge1xuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIGNvbnN0IHNlc3Npb25TdGF0ZSA9IGluamVjdG9yLmdldChTZXNzaW9uU3RhdGVTZXJ2aWNlKTtcbiAgY29uc3QgeyByZWdpc3RlckxvY2FsZUZuIH06IFJvb3QgPSBpbmplY3Rvci5nZXQoQ09SRV9PUFRJT05TKTtcblxuICBjb25zdCBsYW5nID0gc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlKCkgfHwgJ2VuJztcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlZ2lzdGVyTG9jYWxlRm4obGFuZykudGhlbihtb2R1bGUgPT4ge1xuICAgICAgaWYgKG1vZHVsZT8uZGVmYXVsdCkgcmVnaXN0ZXJMb2NhbGVEYXRhKG1vZHVsZS5kZWZhdWx0KTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUoJ3Jlc29sdmVkJyk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfSk7XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLmNvcmUtc2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2VsaXRlLmZyYW1ld29yay1uZy5jb3JlLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["map","i1.RestService","i1","i1.ApplicationConfigurationService","i2.ApplicationLocalizationService","i1.ConfigStateService","i1.PermissionCheckerService","i2.SsrCookieService","i1.SessionStateService","i2.ConfigStateService","i1.SsrCookieService","i1.RoutesService","switchMap","i2.SessionStateService","i3.ConfigStateService","i1.RouterEvents","catchError","noop"],"mappings":"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"}