@esfaenza/core 15.2.283 → 16.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/back-top/back-top.component.d.ts +1 -1
- package/components/error/404/pagenotfound.component.d.ts +2 -1
- package/components/error/500/servererror.component.d.ts +2 -1
- package/components/error/Angular/angularerror.component.d.ts +2 -1
- package/components/es-image-cropper/es-image-cropper.component.d.ts +1 -1
- package/components/es-modal/es-modal.component.d.ts +1 -1
- package/components/jace-resource/jace-resource.component.d.ts +1 -1
- package/components/labeled-span/labeled-span.component.d.ts +1 -1
- package/components/navbar/navbar.component.d.ts +2 -1
- package/directives/componentHost/componentHost.directive.d.ts +1 -1
- package/directives/draggable/draggable.directive.d.ts +1 -1
- package/directives/es-routerLink/es-routerLink.directive.d.ts +1 -1
- package/directives/slim-scroll/slim-scroll.directive.d.ts +1 -1
- package/domain/tokens.d.ts +2 -0
- package/{esm2020 → esm2022}/components/back-top/back-top.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/base/base.component.mjs +6 -5
- package/esm2022/components/base/embedding.component.mjs +64 -0
- package/{esm2020 → esm2022}/components/base/reactive.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/breadcrumb/breadcrumb.component.mjs +4 -4
- package/esm2022/components/components.module.mjs +97 -0
- package/esm2022/components/error/404/pagenotfound.component.mjs +36 -0
- package/esm2022/components/error/500/servererror.component.mjs +47 -0
- package/esm2022/components/error/Angular/angularerror.component.mjs +62 -0
- package/esm2022/components/es-image-cropper/es-image-cropper.component.mjs +82 -0
- package/{esm2020 → esm2022}/components/es-modal/es-modal-head/es-modal-head.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/es-modal/es-modal.component.mjs +4 -4
- package/esm2022/components/external-page/external_pages.component.mjs +48 -0
- package/{esm2020 → esm2022}/components/jace-login/jace-login.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/jace-resource/jace-resource.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/labeled-span/labeled-span.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/navbar/navbar.component.loc.mjs +4 -4
- package/esm2022/components/navbar/navbar.component.mjs +223 -0
- package/{esm2020 → esm2022}/components/page/pages.component.mjs +5 -5
- package/{esm2020 → esm2022}/components/redirecter/redirecter.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/sidebar/sidebar.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/components/sidebar/sidebar.component.mjs +5 -5
- package/{esm2020 → esm2022}/components/user_infos/user_infos.component.loc.mjs +4 -4
- package/esm2022/components/user_infos/user_infos.component.mjs +148 -0
- package/{esm2020 → esm2022}/directives/componentHost/componentHost.directive.mjs +4 -4
- package/{esm2020 → esm2022}/directives/directives.module.mjs +5 -5
- package/{esm2020 → esm2022}/directives/draggable/draggable.directive.mjs +4 -4
- package/{esm2020 → esm2022}/directives/es-modal/es-modal.directive.mjs +4 -4
- package/{esm2020 → esm2022}/directives/es-routerLink/es-routerLink.directive.mjs +4 -4
- package/{esm2020 → esm2022}/directives/slim-scroll/slim-scroll.directive.mjs +4 -4
- package/{esm2020 → esm2022}/directives/widget/widget.directive.mjs +4 -4
- package/{esm2020 → esm2022}/domain/models/core/ApplicationMenu.mjs +2 -2
- package/esm2022/domain/tokens.mjs +17 -0
- package/esm2022/lib/app.component.mjs +34 -0
- package/esm2022/lib/core.module.mjs +258 -0
- package/{esm2020 → esm2022}/modules/classes/_embedding.module.mjs +5 -5
- package/{esm2020 → esm2022}/modules/classes/_shared.module.mjs +11 -11
- package/{esm2020 → esm2022}/modules/classes/t_c.module.mjs +44 -44
- package/{esm2020 → esm2022}/pipes/classes/included_in.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/pipes/classes/safe_html.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/pipes/classes/safe_script.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/pipes/classes/safe_style.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/pipes/classes/safe_url.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/pipes/pipes.module.mjs +5 -5
- package/esm2022/services/classes/app.accesstoken.mjs +1042 -0
- package/{esm2020 → esm2022}/services/classes/app.completedjobredirection.mjs +4 -4
- package/{esm2020 → esm2022}/services/classes/app.errorhandler.mjs +4 -4
- package/{esm2020 → esm2022}/services/classes/app.event.mjs +4 -4
- package/{esm2020 → esm2022}/services/classes/app.globalsearch.mjs +4 -4
- package/{esm2020 → esm2022}/services/classes/app.httpextensions.loc.mjs +4 -4
- package/{esm2020 → esm2022}/services/classes/app.httpextensions.mjs +4 -4
- package/{esm2020 → esm2022}/services/classes/app.menufilter.mjs +4 -4
- package/esm2022/services/classes/app.routeguard.mjs +23 -0
- package/esm2022/services/classes/app.session.mjs +40 -0
- package/esm2022/services/classes/app.state.mjs +229 -0
- package/{esm2020 → esm2022}/services/classes/preferences/app.cache.persistor.mjs +4 -4
- package/{esm2020 → esm2022}/services/classes/preferences/app.preference.persistor.mjs +4 -4
- package/esm2022/services/classes/preferences/user/app.userpreferences.base.mjs +101 -0
- package/{fesm2020 → fesm2022}/esfaenza-core-components.mjs +169 -149
- package/fesm2022/esfaenza-core-components.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/esfaenza-core-directives.mjs +22 -22
- package/{fesm2015 → fesm2022}/esfaenza-core-directives.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/esfaenza-core-domain.mjs +5 -3
- package/{fesm2020 → fesm2022}/esfaenza-core-domain.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/esfaenza-core-modules.mjs +57 -57
- package/{fesm2020 → fesm2022}/esfaenza-core-modules.mjs.map +1 -1
- package/{fesm2015 → fesm2022}/esfaenza-core-pipes.mjs +19 -19
- package/{fesm2020 → fesm2022}/esfaenza-core-pipes.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/esfaenza-core-services.mjs +81 -53
- package/fesm2022/esfaenza-core-services.mjs.map +1 -0
- package/fesm2022/esfaenza-core.mjs +287 -0
- package/fesm2022/esfaenza-core.mjs.map +1 -0
- package/lib/app.component.d.ts +1 -1
- package/lib/core.module.d.ts +1 -0
- package/package.json +95 -115
- package/services/classes/app.accesstoken.d.ts +3 -2
- package/services/classes/app.session.d.ts +2 -1
- package/services/classes/app.state.d.ts +2 -1
- package/theme/styles/_mat_datepicker_bugfix.scss +933 -0
- package/theme/styles/_material-override.scss +17 -7
- package/esm2020/components/base/embedding.component.mjs +0 -68
- package/esm2020/components/components.module.mjs +0 -94
- package/esm2020/components/error/404/pagenotfound.component.mjs +0 -30
- package/esm2020/components/error/500/servererror.component.mjs +0 -41
- package/esm2020/components/error/Angular/angularerror.component.mjs +0 -56
- package/esm2020/components/es-image-cropper/es-image-cropper.component.mjs +0 -83
- package/esm2020/components/external-page/external_pages.component.mjs +0 -48
- package/esm2020/components/navbar/navbar.component.mjs +0 -219
- package/esm2020/components/user_infos/user_infos.component.mjs +0 -146
- package/esm2020/domain/tokens.mjs +0 -15
- package/esm2020/lib/app.component.mjs +0 -30
- package/esm2020/lib/core.module.mjs +0 -241
- package/esm2020/services/classes/app.accesstoken.mjs +0 -1032
- package/esm2020/services/classes/app.routeguard.mjs +0 -22
- package/esm2020/services/classes/app.session.mjs +0 -32
- package/esm2020/services/classes/app.state.mjs +0 -219
- package/esm2020/services/classes/preferences/user/app.userpreferences.base.mjs +0 -98
- package/fesm2015/esfaenza-core-components.mjs +0 -1549
- package/fesm2015/esfaenza-core-components.mjs.map +0 -1
- package/fesm2015/esfaenza-core-directives.mjs +0 -300
- package/fesm2015/esfaenza-core-domain.mjs +0 -200
- package/fesm2015/esfaenza-core-domain.mjs.map +0 -1
- package/fesm2015/esfaenza-core-helpers.mjs.map +0 -1
- package/fesm2015/esfaenza-core-modules.mjs +0 -183
- package/fesm2015/esfaenza-core-modules.mjs.map +0 -1
- package/fesm2015/esfaenza-core-pipes.mjs.map +0 -1
- package/fesm2015/esfaenza-core-services.mjs +0 -1794
- package/fesm2015/esfaenza-core-services.mjs.map +0 -1
- package/fesm2015/esfaenza-core.mjs +0 -267
- package/fesm2015/esfaenza-core.mjs.map +0 -1
- package/fesm2020/esfaenza-core-components.mjs.map +0 -1
- package/fesm2020/esfaenza-core-directives.mjs.map +0 -1
- package/fesm2020/esfaenza-core-helpers.mjs +0 -44
- package/fesm2020/esfaenza-core-pipes.mjs +0 -112
- package/fesm2020/esfaenza-core-services.mjs.map +0 -1
- package/fesm2020/esfaenza-core.mjs +0 -267
- package/fesm2020/esfaenza-core.mjs.map +0 -1
- /package/{esm2020 → esm2022}/components/esfaenza-core-components.mjs +0 -0
- /package/{esm2020 → esm2022}/components/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/directives/esfaenza-core-directives.mjs +0 -0
- /package/{esm2020 → esm2022}/directives/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/esfaenza-core-domain.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/core/ApplicationJob.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/core/ApplicationRoutes.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/core/EnvOptions.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/core/GenericItem.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/core/KeyValue.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/global_search/SaerchResultContainer.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/global_search/SearchResult.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/AccountScope.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/ActiveModuleView.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/CategoriesWithModules.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/JaceAccount.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/JaceIdentity.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/JaceModule.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/JacePermission.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/JaceRole.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/jace/JaceUser.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/user/UpdateAccountRecoverySettingsDto.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/user/UpdatePasswordDto.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/user/UpdateProfilePictureDto.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/models/user/UserAccount.mjs +0 -0
- /package/{esm2020 → esm2022}/domain/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/esfaenza-core.mjs +0 -0
- /package/{esm2020 → esm2022}/helpers/classes/ResizeListener.mjs +0 -0
- /package/{esm2020 → esm2022}/helpers/esfaenza-core-helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/helpers/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/modules/classes/_base.module.mjs +0 -0
- /package/{esm2020 → esm2022}/modules/esfaenza-core-modules.mjs +0 -0
- /package/{esm2020 → esm2022}/modules/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/pipes/esfaenza-core-pipes.mjs +0 -0
- /package/{esm2020 → esm2022}/pipes/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/services/esfaenza-core-services.mjs +0 -0
- /package/{esm2020 → esm2022}/services/public-api.mjs +0 -0
- /package/{fesm2015 → fesm2022}/esfaenza-core-helpers.mjs +0 -0
- /package/{fesm2020 → fesm2022}/esfaenza-core-helpers.mjs.map +0 -0
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { Injectable } from "@angular/core";
|
|
3
|
-
// Configurazioni
|
|
4
|
-
import { AccessControlRouteGuard } from "@esfaenza/access-control";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@esfaenza/extensions";
|
|
7
|
-
import * as i2 from "@esfaenza/access-control";
|
|
8
|
-
import * as i3 from "@angular/router";
|
|
9
|
-
import * as i4 from "./app.accesstoken";
|
|
10
|
-
export class BaseRouterGuard extends AccessControlRouteGuard {
|
|
11
|
-
constructor(ms, acc, router, ts) {
|
|
12
|
-
super(ms, acc, router);
|
|
13
|
-
if (!acc.Initialized)
|
|
14
|
-
acc.initializeIdentity(ts.getJaceIdentity());
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
BaseRouterGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BaseRouterGuard, deps: [{ token: i1.MessageService }, { token: i2.AccessControlService }, { token: i3.Router }, { token: i4.TokenService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
18
|
-
BaseRouterGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BaseRouterGuard });
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BaseRouterGuard, decorators: [{
|
|
20
|
-
type: Injectable
|
|
21
|
-
}], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.AccessControlService }, { type: i3.Router }, { type: i4.TokenService }]; } });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnJvdXRlZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NlcnZpY2VzL3NyYy9jbGFzc2VzL2FwcC5yb3V0ZWd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsdUJBQXVCLEVBQXdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQU16RixNQUFNLE9BQU8sZUFBZ0IsU0FBUSx1QkFBdUI7SUFDeEQsWUFBWSxFQUFrQixFQUFFLEdBQXlCLEVBQUUsTUFBYyxFQUFFLEVBQWdCO1FBQ3ZGLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVztZQUNoQixHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQzs7NkdBTlEsZUFBZTtpSEFBZixlQUFlOzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sUm91dGVHdWFyZCwgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi9hcHAuYWNjZXNzdG9rZW5cIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJhc2VSb3V0ZXJHdWFyZCBleHRlbmRzIEFjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkIHtcclxuICAgIGNvbnN0cnVjdG9yKG1zOiBNZXNzYWdlU2VydmljZSwgYWNjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgcm91dGVyOiBSb3V0ZXIsIHRzOiBUb2tlblNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcihtcywgYWNjLCByb3V0ZXIpO1xyXG5cclxuICAgICAgICBpZiAoIWFjYy5Jbml0aWFsaXplZClcclxuICAgICAgICAgICAgYWNjLmluaXRpYWxpemVJZGVudGl0eSh0cy5nZXRKYWNlSWRlbnRpdHkoKSk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { Injectable } from "@angular/core";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./app.accesstoken";
|
|
5
|
-
import * as i2 from "@angular/router";
|
|
6
|
-
export class SessionRetriever {
|
|
7
|
-
constructor(bts, router) {
|
|
8
|
-
this.bts = bts;
|
|
9
|
-
this.router = router;
|
|
10
|
-
}
|
|
11
|
-
/** Tenant§Account§User§ModuleId */
|
|
12
|
-
getSessionKey() {
|
|
13
|
-
if (this.SessionIdentity)
|
|
14
|
-
return this.SessionIdentity;
|
|
15
|
-
// Se non ho un id mi manca il login, quindi via di qua
|
|
16
|
-
var id = this.bts.getJaceIdentity();
|
|
17
|
-
if (!id) {
|
|
18
|
-
console.log("SessionRetriever - no identity, redirecting to login");
|
|
19
|
-
this.router.navigate(["login"]);
|
|
20
|
-
return "";
|
|
21
|
-
}
|
|
22
|
-
this.SessionIdentity = "" + id.Idtenant + "§" + id.IdAccount + "§" + id.IdUser + "§" + myconfig?.AppData?.ModuleId;
|
|
23
|
-
return this.SessionIdentity;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
SessionRetriever.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SessionRetriever, deps: [{ token: i1.TokenService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
27
|
-
SessionRetriever.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SessionRetriever, providedIn: "root" });
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SessionRetriever, decorators: [{
|
|
29
|
-
type: Injectable,
|
|
30
|
-
args: [{ providedIn: "root" }]
|
|
31
|
-
}], ctorParameters: function () { return [{ type: i1.TokenService }, { type: i2.Router }]; } });
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NlcnZpY2VzL3NyYy9jbGFzc2VzL2FwcC5zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBZTNDLE1BQU0sT0FBTyxnQkFBZ0I7SUFJekIsWUFBb0IsR0FBaUIsRUFBVSxNQUFjO1FBQXpDLFFBQUcsR0FBSCxHQUFHLENBQWM7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUksQ0FBQztJQUVsRSxtQ0FBbUM7SUFDbkMsYUFBYTtRQUNULElBQUksSUFBSSxDQUFDLGVBQWU7WUFDcEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRWhDLHVEQUF1RDtRQUN2RCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUE7WUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUNuSCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQzs7OEdBckJRLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs0RkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEJhc2VTZXNzaW9uUmV0cmlldmVyIH0gZnJvbSBcIkBlc2ZhZW56YS9wcmVmZXJlbmNlc1wiO1xyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gXCIuL2FwcC5hY2Nlc3N0b2tlblwiO1xyXG5cclxuLy8gQ29yZVxyXG5pbXBvcnQgeyBFbnZPcHRpb25zIH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL2RvbWFpblwiO1xyXG5cclxuZGVjbGFyZSB2YXIgbXljb25maWc6IEVudk9wdGlvbnM7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uUmV0cmlldmVyIGltcGxlbWVudHMgQmFzZVNlc3Npb25SZXRyaWV2ZXIge1xyXG5cclxuICAgIHByaXZhdGUgU2Vzc2lvbklkZW50aXR5OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBidHM6IFRva2VuU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikgeyB9XHJcblxyXG4gICAgLyoqIFRlbmFudMKnQWNjb3VudMKnVXNlcsKnTW9kdWxlSWQgKi9cclxuICAgIGdldFNlc3Npb25LZXkoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5TZXNzaW9uSWRlbnRpdHkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlNlc3Npb25JZGVudGl0eTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIHVuIGlkIG1pIG1hbmNhIGlsIGxvZ2luLCBxdWluZGkgdmlhIGRpIHF1YVxyXG4gICAgICAgIHZhciBpZCA9IHRoaXMuYnRzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgIGlmICghaWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTZXNzaW9uUmV0cmlldmVyIC0gbm8gaWRlbnRpdHksIHJlZGlyZWN0aW5nIHRvIGxvZ2luXCIpXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImxvZ2luXCJdKTtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLlNlc3Npb25JZGVudGl0eSA9IFwiXCIgKyBpZC5JZHRlbmFudCArIFwiwqdcIiArIGlkLklkQWNjb3VudCArIFwiwqdcIiArIGlkLklkVXNlciArIFwiwqdcIiArIG15Y29uZmlnPy5BcHBEYXRhPy5Nb2R1bGVJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5TZXNzaW9uSWRlbnRpdHk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { InboundMessageTypes } from "@esfaenza/extensions";
|
|
3
|
-
// Direttive, Componenti, Librerie
|
|
4
|
-
import * as customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
5
|
-
import * as isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
|
|
6
|
-
import * as isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
|
|
7
|
-
import * as isBetween from 'dayjs/plugin/isBetween';
|
|
8
|
-
import * as duration from 'dayjs/plugin/duration';
|
|
9
|
-
import * as minMax from 'dayjs/plugin/minMax';
|
|
10
|
-
import * as utc from 'dayjs/plugin/utc';
|
|
11
|
-
import { Subject, filter } from "rxjs";
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@angular/router";
|
|
14
|
-
import * as i2 from "@esfaenza/localizations";
|
|
15
|
-
import * as i3 from "./app.accesstoken";
|
|
16
|
-
import * as i4 from "@esfaenza/signalr-notifications";
|
|
17
|
-
import * as i5 from "@esfaenza/extensions";
|
|
18
|
-
export class AppState {
|
|
19
|
-
set Modules(modules) {
|
|
20
|
-
this._modules = modules;
|
|
21
|
-
this.notifyDataChanged("modules.Retrieved", this._modules);
|
|
22
|
-
}
|
|
23
|
-
get Modules() { return this._modules; }
|
|
24
|
-
constructor(router, lc, bts, notifications, MessageDef, intercom, emb) {
|
|
25
|
-
this.router = router;
|
|
26
|
-
this.lc = lc;
|
|
27
|
-
this.bts = bts;
|
|
28
|
-
this.notifications = notifications;
|
|
29
|
-
this.MessageDef = MessageDef;
|
|
30
|
-
this.intercom = intercom;
|
|
31
|
-
this.emb = emb;
|
|
32
|
-
this.redirectingToLogin = false;
|
|
33
|
-
this.handlingError = false;
|
|
34
|
-
this.christmasTime = false;
|
|
35
|
-
this.halloweenTime = false;
|
|
36
|
-
this.jobsInProgress = 0;
|
|
37
|
-
this.allJobs = [];
|
|
38
|
-
this.jobWithIdsCache = {};
|
|
39
|
-
this.notifyOnCompletedJobs = true;
|
|
40
|
-
this._data = new Subject();
|
|
41
|
-
this._subscriptions = new Map();
|
|
42
|
-
this.ModulesLocalizations = {};
|
|
43
|
-
this.hookEmbedding();
|
|
44
|
-
this.setupDayjs();
|
|
45
|
-
this.setupSignalRJobListening();
|
|
46
|
-
this.JaceIdentity = null;
|
|
47
|
-
this._data.subscribe((data) => this._onEvent(data));
|
|
48
|
-
//Decide se siamo attorno a natale
|
|
49
|
-
var today = dayjs();
|
|
50
|
-
var thisYear = today.year();
|
|
51
|
-
var lowerBound = dayjs("18/12/" + thisYear, "DD/MM/YYYY");
|
|
52
|
-
var upperBound = dayjs("07/01/" + (thisYear + 1), "DD/MM/YYYY");
|
|
53
|
-
this.christmasTime = today > lowerBound && today < upperBound;
|
|
54
|
-
//Decide se siamo attorno ad halloween
|
|
55
|
-
var lowerBound = dayjs("28/10/" + thisYear, "DD/MM/YYYY");
|
|
56
|
-
var upperBound = dayjs("05/11/" + thisYear, "DD/MM/YYYY");
|
|
57
|
-
this.halloweenTime = today > lowerBound && today < upperBound;
|
|
58
|
-
this.intercom.inbounds.subscribe((t) => { this.handleInboundMessage(t); });
|
|
59
|
-
}
|
|
60
|
-
// Collego le informazioni dell'embedding che devono appoggiarsi all'app state in modo che possano comunicare col resto dell'applicazione
|
|
61
|
-
hookEmbedding() {
|
|
62
|
-
this.emb.MessageObserver.pipe(filter(ev => ev.event == "navigation")).subscribe(event => {
|
|
63
|
-
var navigationOp = event?.data?.internalNavigation ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo";
|
|
64
|
-
this.notifyDataChanged(navigationOp, event?.data?.title);
|
|
65
|
-
});
|
|
66
|
-
this.emb.MessageObserver.pipe(filter(ev => ev.event == "window-message")).subscribe(event => {
|
|
67
|
-
this.notifyDataChanged("window-message", event?.data);
|
|
68
|
-
});
|
|
69
|
-
this._data.pipe(filter(e => e.event == "menu.isCollapsed")).subscribe(_ => {
|
|
70
|
-
this.emb.refreshBoundariesOnMenuCollapse();
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
/** Tenant§Account§User§APPNAME */
|
|
74
|
-
getSessionIdentity() {
|
|
75
|
-
if (this.SessionIdentity)
|
|
76
|
-
return this.SessionIdentity;
|
|
77
|
-
// Se non ho un id mi manca il login, quindi via di qua
|
|
78
|
-
var id = this.getJaceIDentity();
|
|
79
|
-
if (!id) {
|
|
80
|
-
//TODO: Commentare per la modalità IFRAME
|
|
81
|
-
this.router.navigate(["login"]);
|
|
82
|
-
return "";
|
|
83
|
-
}
|
|
84
|
-
this.SessionIdentity = "" + id.Idtenant + "§" + id.IdAccount + "§" + id.IdUser + "§" + myconfig.AppData.ModuleId;
|
|
85
|
-
return this.SessionIdentity;
|
|
86
|
-
}
|
|
87
|
-
registerNavigationIfMeaningful(route) {
|
|
88
|
-
let title = route.data["title"];
|
|
89
|
-
let internal = route.data["internalNavigation"];
|
|
90
|
-
// Permette di chiamare sto registerNavigation a prescindere e fare opt out se non è una route navigabile
|
|
91
|
-
if (!title)
|
|
92
|
-
return;
|
|
93
|
-
/*
|
|
94
|
-
* Parent ({url: [{path: "{module}"}]})
|
|
95
|
-
* Parent ({url: [{path: ""}]}) (Root del modulo lazy)
|
|
96
|
-
* -> Navigazione attuale <-
|
|
97
|
-
*/
|
|
98
|
-
let module = route.parent?.parent?.url[0]?.path;
|
|
99
|
-
let loc = module ? this.ModulesLocalizations[module] : null;
|
|
100
|
-
if (!module)
|
|
101
|
-
console.error("Impossibile estrapolare il modulo dalla navigazione (Atteso Modulo al secondo livello di parentela partendo dal componente attuale): " + route.pathFromRoot.map(v => v.url.map(segment => segment.toString()).join('/')).join('/'));
|
|
102
|
-
this.notifyDataChanged(internal ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo", loc ? loc.loc(title) : title);
|
|
103
|
-
}
|
|
104
|
-
handleInboundMessage(t) {
|
|
105
|
-
switch (t.type) {
|
|
106
|
-
case InboundMessageTypes.Navigation:
|
|
107
|
-
this.notifyDataChanged(t.message.sub ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo", t.message.routeTitle);
|
|
108
|
-
// export const MK_ADM = "EsAdminModule";
|
|
109
|
-
// AdmMessageTypes.Message = 0;
|
|
110
|
-
// definita in admin-module.
|
|
111
|
-
// admin-module usa core quindi referenze circolari no-no-no
|
|
112
|
-
this.intercom.send(0, "Navigation Message Received", "EsAdminModule");
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
setupDayjs() {
|
|
117
|
-
dayjs.extend(customParseFormat.default || customParseFormat);
|
|
118
|
-
dayjs.extend(minMax.default || minMax);
|
|
119
|
-
dayjs.extend(isBetween.default || isBetween);
|
|
120
|
-
dayjs.extend(isSameOrBefore.default || isSameOrBefore);
|
|
121
|
-
dayjs.extend(isSameOrAfter.default || isSameOrAfter);
|
|
122
|
-
dayjs.extend(duration.default || duration);
|
|
123
|
-
dayjs.extend(utc.default || utc);
|
|
124
|
-
// Require e collegamento con la localizzazione per dayjs
|
|
125
|
-
import("dayjs/locale/" + this.lc.SmallLocale + ".js").then(locale => { dayjs.locale(locale); });
|
|
126
|
-
}
|
|
127
|
-
setupSignalRJobListening() {
|
|
128
|
-
this.notifications.observe(this.MessageDef.IN_JobProgressNotification).subscribe((ev) => {
|
|
129
|
-
var desc = (ev.description || ev.actionid) + " (" + (ev.user || this.getJaceIDentity().DsUser) + ")";
|
|
130
|
-
let job = {
|
|
131
|
-
id: ev.instance,
|
|
132
|
-
description: desc,
|
|
133
|
-
smalldescription: desc.length > 35 ? desc.substring(0, 30) + "..." : desc,
|
|
134
|
-
percentage: this.roundToTwo(ev.progress),
|
|
135
|
-
completed: ev.type == 'Completed',
|
|
136
|
-
fileid: ev.resultfile,
|
|
137
|
-
reportid: ev.resultreport,
|
|
138
|
-
reportpars: ev.resultreportparams,
|
|
139
|
-
complexreportid: ev.resultcomplexreport
|
|
140
|
-
};
|
|
141
|
-
switch (ev.type) {
|
|
142
|
-
case "Started":
|
|
143
|
-
if (this.jobWithIdsCache[ev.instance]) {
|
|
144
|
-
console.warn("Job already registered on the 'Started' callback");
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
this.jobWithIdsCache[ev.instance] = job;
|
|
148
|
-
this.allJobs.splice(0, 0, job);
|
|
149
|
-
this.notifyDataChanged("app.startedJob", job.description);
|
|
150
|
-
break;
|
|
151
|
-
case "Progress":
|
|
152
|
-
// Se mi arriva un progress di un job che non ho significa che mi sono loggato ora con dei Job in corso
|
|
153
|
-
// quindi per prima cosa devo metterlo in lista
|
|
154
|
-
if (!this.jobWithIdsCache[ev.instance]) {
|
|
155
|
-
this.jobWithIdsCache[ev.instance] = job;
|
|
156
|
-
this.allJobs.splice(0, 0, job);
|
|
157
|
-
}
|
|
158
|
-
this.jobWithIdsCache[ev.instance].percentage = this.roundToTwo(ev.progress);
|
|
159
|
-
this.notifyDataChanged("app.progressJob", { description: job.description, progress: this.jobWithIdsCache[ev.instance].percentage });
|
|
160
|
-
break;
|
|
161
|
-
case "Completed":
|
|
162
|
-
if (!this.jobWithIdsCache[ev.instance]) {
|
|
163
|
-
this.jobWithIdsCache[ev.instance] = job;
|
|
164
|
-
this.allJobs.splice(0, 0, job);
|
|
165
|
-
}
|
|
166
|
-
var jobToUpdate = this.jobWithIdsCache[ev.instance];
|
|
167
|
-
jobToUpdate.percentage = 100;
|
|
168
|
-
jobToUpdate.fileid = ev.resultfile;
|
|
169
|
-
jobToUpdate.reportid = ev.resultreport;
|
|
170
|
-
jobToUpdate.reportpars = ev.resultreportparams;
|
|
171
|
-
jobToUpdate.completed = true;
|
|
172
|
-
if (this.notifyOnCompletedJobs)
|
|
173
|
-
this.notifyDataChanged("app.completedJob", jobToUpdate.description);
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
this.jobsInProgress = this.allJobs.filter(t => !t.completed).length;
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
roundToTwo(num) {
|
|
180
|
-
return Math.round(num * 100) / 100;
|
|
181
|
-
}
|
|
182
|
-
getJaceIDentity() {
|
|
183
|
-
if (this.JaceIdentity)
|
|
184
|
-
return this.JaceIdentity;
|
|
185
|
-
this.JaceIdentity = this.bts.getJaceIdentity();
|
|
186
|
-
return this.JaceIdentity;
|
|
187
|
-
}
|
|
188
|
-
notifyDataChanged(event, value) {
|
|
189
|
-
this._data[event] = value;
|
|
190
|
-
this._data.next({
|
|
191
|
-
event: event,
|
|
192
|
-
data: this._data[event]
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
subscribe(event, callback) {
|
|
196
|
-
var subscribers = this._subscriptions.get(event) || [];
|
|
197
|
-
subscribers.push(callback);
|
|
198
|
-
this._subscriptions.set(event, subscribers);
|
|
199
|
-
}
|
|
200
|
-
_onEvent(data) {
|
|
201
|
-
var subscribers = this._subscriptions.get(data["event"]) || [];
|
|
202
|
-
subscribers.forEach((callback) => {
|
|
203
|
-
callback.call(null, data["data"]);
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
setSidebarWidth(width) {
|
|
207
|
-
this.sidebarWidth = width;
|
|
208
|
-
}
|
|
209
|
-
setHeaderHeight(height) {
|
|
210
|
-
this.headerHeight = height;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
AppState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppState, deps: [{ token: i1.Router }, { token: i2.LocalizationService }, { token: i3.TokenService }, { token: i4.NotificationsService }, { token: i4.BaseMessageService }, { token: i5.InterComService }, { token: i5.AppEmbeddingExtensions }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
214
|
-
AppState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppState, providedIn: "root" });
|
|
215
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppState, decorators: [{
|
|
216
|
-
type: Injectable,
|
|
217
|
-
args: [{ providedIn: "root" }]
|
|
218
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.LocalizationService }, { type: i3.TokenService }, { type: i4.NotificationsService }, { type: i4.BaseMessageService }, { type: i5.InterComService }, { type: i5.AppEmbeddingExtensions }]; } });
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9zcmMvY2xhc3Nlcy9hcHAuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQW9DLE1BQU0sc0JBQXNCLENBQUM7QUFTN0Ysa0NBQWtDO0FBQ2xDLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEtBQUssY0FBYyxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sS0FBSyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sS0FBSyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQU12QyxNQUFNLE9BQU8sUUFBUTtJQXdCakIsSUFBVyxPQUFPLENBQUMsT0FBMkI7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsSUFBVyxPQUFPLEtBQXlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFbEUsWUFBb0IsTUFBYyxFQUFVLEVBQXVCLEVBQVUsR0FBaUIsRUFBVSxhQUFtQyxFQUFVLFVBQThCLEVBQVUsUUFBeUIsRUFBVSxHQUEyQjtRQUF2TyxXQUFNLEdBQU4sTUFBTSxDQUFR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QUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztTQUMxQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWEsRUFBRSxRQUFrQjtRQUN2QyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkQsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2QsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRS9ELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRU0sZUFBZSxDQUFDLE1BQWM7UUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7SUFDL0IsQ0FBQzs7c0dBek9RLFFBQVE7MEdBQVIsUUFBUSxjQURLLE1BQU07NEZBQ25CLFFBQVE7a0JBRHBCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQmFzZU1lc3NhZ2VTZXJ2aWNlLCBOb3RpZmljYXRpb25zU2VydmljZSwgSm9iUHJvZ3Jlc3NEdG8gfSBmcm9tIFwiQGVzZmFlbnphL3NpZ25hbHItbm90aWZpY2F0aW9uc1wiO1xyXG5pbXBvcnQgeyBJbmJvdW5kTWVzc2FnZVR5cGVzLCBJbnRlckNvbU1lc3NhZ2UsIEludGVyQ29tU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gXCIuL2FwcC5hY2Nlc3N0b2tlblwiO1xyXG5cclxuaW1wb3J0IHsgQXBwRW1iZWRkaW5nRXh0ZW5zaW9ucyB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5cclxuLy8gQ29yZVxyXG5pbXBvcnQgeyBBY3RpdmVNb2R1bGVWaWV3LCBBcHBsaWNhdGlvbkpvYiwgRW52T3B0aW9ucywgSmFjZUlkZW50aXR5IH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL2RvbWFpblwiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgKiBhcyBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnO1xyXG5pbXBvcnQgKiBhcyBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUnO1xyXG5pbXBvcnQgKiBhcyBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyJztcclxuaW1wb3J0ICogYXMgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4nO1xyXG5pbXBvcnQgKiBhcyBkdXJhdGlvbiBmcm9tICdkYXlqcy9wbHVnaW4vZHVyYXRpb24nO1xyXG5pbXBvcnQgKiBhcyBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heCc7XHJcbmltcG9ydCAqIGFzIHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZmlsdGVyIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcbmRlY2xhcmUgdmFyIG15Y29uZmlnOiBFbnZPcHRpb25zO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxyXG5leHBvcnQgY2xhc3MgQXBwU3RhdGUge1xyXG5cclxuICAgIHB1YmxpYyBzaWRlYmFyV2lkdGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBoZWFkZXJIZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RpbmdUb0xvZ2luOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFuZGxpbmdFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNocmlzdG1hc1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoYWxsb3dlZW5UaW1lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBTZXNzaW9uSWRlbnRpdHk6IHN0cmluZztcclxuICAgIHByaXZhdGUgSmFjZUlkZW50aXR5OiBKYWNlSWRlbnRpdHk7XHJcblxyXG4gICAgcHVibGljIGpvYnNJblByb2dyZXNzOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGFsbEpvYnM6IEFwcGxpY2F0aW9uSm9iW10gPSBbXTtcclxuICAgIHByaXZhdGUgam9iV2l0aElkc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogQXBwbGljYXRpb25Kb2IgfSA9IHt9O1xyXG4gICAgcHVibGljIG5vdGlmeU9uQ29tcGxldGVkSm9iczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBfZGF0YSA9IG5ldyBTdWJqZWN0PE9iamVjdD4oKTtcclxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8RnVuY3Rpb24+PigpO1xyXG5cclxuICAgIHB1YmxpYyBNb2R1bGVzTG9jYWxpemF0aW9uczogeyBbaWQ6IHN0cmluZ106IExvY2FsaXphdGlvblNlcnZpY2UgfSA9IHt9O1xyXG5cclxuICAgIHByaXZhdGUgX21vZHVsZXM6IEFjdGl2ZU1vZHVsZVZpZXdbXTtcclxuICAgIHB1YmxpYyBzZXQgTW9kdWxlcyhtb2R1bGVzOiBBY3RpdmVNb2R1bGVWaWV3W10pIHtcclxuICAgICAgICB0aGlzLl9tb2R1bGVzID0gbW9kdWxlcztcclxuICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwibW9kdWxlcy5SZXRyaWV2ZWRcIiwgdGhpcy5fbW9kdWxlcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IE1vZHVsZXMoKTogQWN0aXZlTW9kdWxlVmlld1tdIHsgcmV0dXJuIHRoaXMuX21vZHVsZXM7IH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwcml2YXRlIGJ0czogVG9rZW5TZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLCBwcml2YXRlIE1lc3NhZ2VEZWY6IEJhc2VNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBpbnRlcmNvbTogSW50ZXJDb21TZXJ2aWNlLCBwcml2YXRlIGVtYjogQXBwRW1iZWRkaW5nRXh0ZW5zaW9ucykge1xyXG5cclxuICAgICAgICB0aGlzLmhvb2tFbWJlZGRpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR1cERheWpzKCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cFNpZ25hbFJKb2JMaXN0ZW5pbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5KYWNlSWRlbnRpdHkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RhdGEuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLl9vbkV2ZW50KGRhdGEpKTtcclxuXHJcbiAgICAgICAgLy9EZWNpZGUgc2Ugc2lhbW8gYXR0b3JubyBhIG5hdGFsZVxyXG4gICAgICAgIHZhciB0b2RheSA9IGRheWpzKCk7XHJcbiAgICAgICAgdmFyIHRoaXNZZWFyID0gdG9kYXkueWVhcigpO1xyXG4gICAgICAgIHZhciBsb3dlckJvdW5kID0gZGF5anMoXCIxOC8xMi9cIiArIHRoaXNZZWFyLCBcIkREL01NL1lZWVlcIik7XHJcbiAgICAgICAgdmFyIHVwcGVyQm91bmQgPSBkYXlqcyhcIjA3LzAxL1wiICsgKHRoaXNZZWFyICsgMSksIFwiREQvTU0vWVlZWVwiKTtcclxuICAgICAgICB0aGlzLmNocmlzdG1hc1RpbWUgPSB0b2RheSA+IGxvd2VyQm91bmQgJiYgdG9kYXkgPCB1cHBlckJvdW5kO1xyXG5cclxuICAgICAgICAvL0RlY2lkZSBzZSBzaWFtbyBhdHRvcm5vIGFkIGhhbGxvd2VlblxyXG4gICAgICAgIHZhciBsb3dlckJvdW5kID0gZGF5anMoXCIyOC8xMC9cIiArIHRoaXNZZWFyLCBcIkREL01NL1lZWVlcIik7XHJcbiAgICAgICAgdmFyIHVwcGVyQm91bmQgPSBkYXlqcyhcIjA1LzExL1wiICsgdGhpc1llYXIsIFwiREQvTU0vWVlZWVwiKTtcclxuICAgICAgICB0aGlzLmhhbGxvd2VlblRpbWUgPSB0b2RheSA+IGxvd2VyQm91bmQgJiYgdG9kYXkgPCB1cHBlckJvdW5kO1xyXG5cclxuICAgICAgICB0aGlzLmludGVyY29tLmluYm91bmRzLnN1YnNjcmliZSgodDogSW50ZXJDb21NZXNzYWdlKSA9PiB7IHRoaXMuaGFuZGxlSW5ib3VuZE1lc3NhZ2UodCk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbGxlZ28gbGUgaW5mb3JtYXppb25pIGRlbGwnZW1iZWRkaW5nIGNoZSBkZXZvbm8gYXBwb2dnaWFyc2kgYWxsJ2FwcCBzdGF0ZSBpbiBtb2RvIGNoZSBwb3NzYW5vIGNvbXVuaWNhcmUgY29sIHJlc3RvIGRlbGwnYXBwbGljYXppb25lXHJcbiAgICBob29rRW1iZWRkaW5nKCkge1xyXG4gICAgICAgIHRoaXMuZW1iLk1lc3NhZ2VPYnNlcnZlci5waXBlKGZpbHRlcihldiA9PiBldi5ldmVudCA9PSBcIm5hdmlnYXRpb25cIikpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIHZhciBuYXZpZ2F0aW9uT3AgPSBldmVudD8uZGF0YT8uaW50ZXJuYWxOYXZpZ2F0aW9uID8gXCJtZW51LmFkanVzdFN1Yk5hdmlnYXRpb25Ub1wiIDogXCJtZW51LmFkanVzdE5hdmlnYXRpb25Ub1wiO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKG5hdmlnYXRpb25PcCwgZXZlbnQ/LmRhdGE/LnRpdGxlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWIuTWVzc2FnZU9ic2VydmVyLnBpcGUoZmlsdGVyKGV2ID0+IGV2LmV2ZW50ID09IFwid2luZG93LW1lc3NhZ2VcIikpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoXCJ3aW5kb3ctbWVzc2FnZVwiLCBldmVudD8uZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RhdGEucGlwZShmaWx0ZXIoZSA9PiAoZSBhcyBhbnkpLmV2ZW50ID09IFwibWVudS5pc0NvbGxhcHNlZFwiKSkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtYi5yZWZyZXNoQm91bmRhcmllc09uTWVudUNvbGxhcHNlKClcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVGVuYW50wqdBY2NvdW50wqdVc2VywqdBUFBOQU1FICovXHJcbiAgICBnZXRTZXNzaW9uSWRlbnRpdHkoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5TZXNzaW9uSWRlbnRpdHkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlNlc3Npb25JZGVudGl0eTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIHVuIGlkIG1pIG1hbmNhIGlsIGxvZ2luLCBxdWluZGkgdmlhIGRpIHF1YVxyXG4gICAgICAgIHZhciBpZCA9IHRoaXMuZ2V0SmFjZUlEZW50aXR5KCk7XHJcbiAgICAgICAgaWYgKCFpZCkge1xyXG4gICAgICAgICAgICAvL1RPRE86IENvbW1lbnRhcmUgcGVyIGxhIG1vZGFsaXTDoCBJRlJBTUVcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wibG9naW5cIl0pO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuU2Vzc2lvbklkZW50aXR5ID0gXCJcIiArIGlkLklkdGVuYW50ICsgXCLCp1wiICsgaWQuSWRBY2NvdW50ICsgXCLCp1wiICsgaWQuSWRVc2VyICsgXCLCp1wiICsgbXljb25maWcuQXBwRGF0YS5Nb2R1bGVJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5TZXNzaW9uSWRlbnRpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJOYXZpZ2F0aW9uSWZNZWFuaW5nZnVsKHJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xyXG4gICAgICAgIGxldCB0aXRsZSA9IHJvdXRlLmRhdGFbXCJ0aXRsZVwiXTtcclxuICAgICAgICBsZXQgaW50ZXJuYWwgPSByb3V0ZS5kYXRhW1wiaW50ZXJuYWxOYXZpZ2F0aW9uXCJdXHJcblxyXG4gICAgICAgIC8vIFBlcm1ldHRlIGRpIGNoaWFtYXJlIHN0byByZWdpc3Rlck5hdmlnYXRpb24gYSBwcmVzY2luZGVyZSBlIGZhcmUgb3B0IG91dCBzZSBub24gw6ggdW5hIHJvdXRlIG5hdmlnYWJpbGVcclxuICAgICAgICBpZighdGl0bGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiAgUGFyZW50ICh7dXJsOiBbe3BhdGg6IFwie21vZHVsZX1cIn1dfSlcclxuICAgICAgICAgKiAgICAgIFBhcmVudCAoe3VybDogW3twYXRoOiBcIlwifV19KSAoUm9vdCBkZWwgbW9kdWxvIGxhenkpXHJcbiAgICAgICAgICogICAgICAgICAgLT4gTmF2aWdhemlvbmUgYXR0dWFsZSA8LVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGxldCBtb2R1bGUgPSByb3V0ZS5wYXJlbnQ/LnBhcmVudD8udXJsWzBdPy5wYXRoO1xyXG4gICAgICAgIGxldCBsb2MgPSBtb2R1bGUgPyB0aGlzLk1vZHVsZXNMb2NhbGl6YXRpb25zW21vZHVsZV0gOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAoIW1vZHVsZSlcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkltcG9zc2liaWxlIGVzdHJhcG9sYXJlIGlsIG1vZHVsbyBkYWxsYSBuYXZpZ2F6aW9uZSAoQXR0ZXNvIE1vZHVsbyBhbCBzZWNvbmRvIGxpdmVsbG8gZGkgcGFyZW50ZWxhIHBhcnRlbmRvIGRhbCBjb21wb25lbnRlIGF0dHVhbGUpOiBcIiArIHJvdXRlLnBhdGhGcm9tUm9vdC5tYXAodiA9PiB2LnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnRvU3RyaW5nKCkpLmpvaW4oJy8nKSkuam9pbignLycpKTtcclxuXHJcbiAgICAgICAgdGhpcy5ub3RpZnlEYXRhQ2hhbmdlZChpbnRlcm5hbCA/IFwibWVudS5hZGp1c3RTdWJOYXZpZ2F0aW9uVG9cIiA6IFwibWVudS5hZGp1c3ROYXZpZ2F0aW9uVG9cIiwgbG9jID8gbG9jLmxvYyh0aXRsZSkgOiB0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlSW5ib3VuZE1lc3NhZ2UodDogSW50ZXJDb21NZXNzYWdlKSB7XHJcbiAgICAgICAgc3dpdGNoICh0LnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBJbmJvdW5kTWVzc2FnZVR5cGVzLk5hdmlnYXRpb246XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKHQubWVzc2FnZS5zdWIgPyBcIm1lbnUuYWRqdXN0U3ViTmF2aWdhdGlvblRvXCIgOiBcIm1lbnUuYWRqdXN0TmF2aWdhdGlvblRvXCIsIHQubWVzc2FnZS5yb3V0ZVRpdGxlKTtcclxuICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBjb25zdCBNS19BRE0gPSBcIkVzQWRtaW5Nb2R1bGVcIjtcclxuICAgICAgICAgICAgICAgIC8vIEFkbU1lc3NhZ2VUeXBlcy5NZXNzYWdlID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkZWZpbml0YSBpbiBhZG1pbi1tb2R1bGUuXHJcbiAgICAgICAgICAgICAgICAvLyBhZG1pbi1tb2R1bGUgdXNhIGNvcmUgcXVpbmRpIHJlZmVyZW56ZSBjaXJjb2xhcmkgbm8tbm8tbm9cclxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJjb20uc2VuZCgwLCBcIk5hdmlnYXRpb24gTWVzc2FnZSBSZWNlaXZlZFwiLCBcIkVzQWRtaW5Nb2R1bGVcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBEYXlqcygpIHtcclxuICAgICAgICBkYXlqcy5leHRlbmQoKDxhbnk+Y3VzdG9tUGFyc2VGb3JtYXQpLmRlZmF1bHQgfHwgY3VzdG9tUGFyc2VGb3JtYXQpO1xyXG4gICAgICAgIGRheWpzLmV4dGVuZCgoPGFueT5taW5NYXgpLmRlZmF1bHQgfHwgbWluTWF4KTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoKDxhbnk+aXNCZXR3ZWVuKS5kZWZhdWx0IHx8IGlzQmV0d2Vlbik7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmlzU2FtZU9yQmVmb3JlKS5kZWZhdWx0IHx8IGlzU2FtZU9yQmVmb3JlKTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoKDxhbnk+aXNTYW1lT3JBZnRlcikuZGVmYXVsdCB8fCBpc1NhbWVPckFmdGVyKTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoKDxhbnk+ZHVyYXRpb24pLmRlZmF1bHQgfHwgZHVyYXRpb24pO1xyXG4gICAgICAgIGRheWpzLmV4dGVuZCgoPGFueT51dGMpLmRlZmF1bHQgfHwgdXRjKTtcclxuXHJcbiAgICAgICAgLy8gUmVxdWlyZSBlIGNvbGxlZ2FtZW50byBjb24gbGEgbG9jYWxpenphemlvbmUgcGVyIGRheWpzXHJcbiAgICAgICAgaW1wb3J0KFwiZGF5anMvbG9jYWxlL1wiICsgdGhpcy5sYy5TbWFsbExvY2FsZSArIFwiLmpzXCIpLnRoZW4obG9jYWxlID0+IHsgZGF5anMubG9jYWxlKGxvY2FsZSk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwU2lnbmFsUkpvYkxpc3RlbmluZygpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMub2JzZXJ2ZSh0aGlzLk1lc3NhZ2VEZWYuSU5fSm9iUHJvZ3Jlc3NOb3RpZmljYXRpb24pLnN1YnNjcmliZSgoZXY6IEpvYlByb2dyZXNzRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBkZXNjID0gKGV2LmRlc2NyaXB0aW9uIHx8IGV2LmFjdGlvbmlkKSArIFwiIChcIiArIChldi51c2VyIHx8IHRoaXMuZ2V0SmFjZUlEZW50aXR5KCkuRHNVc2VyKSArIFwiKVwiO1xyXG4gICAgICAgICAgICBsZXQgam9iOiBBcHBsaWNhdGlvbkpvYiA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBldi5pbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjLFxyXG4gICAgICAgICAgICAgICAgc21hbGxkZXNjcmlwdGlvbjogZGVzYy5sZW5ndGggPiAzNSA/IGRlc2Muc3Vic3RyaW5nKDAsIDMwKSArIFwiLi4uXCIgOiBkZXNjLFxyXG4gICAgICAgICAgICAgICAgcGVyY2VudGFnZTogdGhpcy5yb3VuZFRvVHdvKGV2LnByb2dyZXNzKSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogZXYudHlwZSA9PSAnQ29tcGxldGVkJyxcclxuICAgICAgICAgICAgICAgIGZpbGVpZDogZXYucmVzdWx0ZmlsZSxcclxuICAgICAgICAgICAgICAgIHJlcG9ydGlkOiBldi5yZXN1bHRyZXBvcnQsXHJcbiAgICAgICAgICAgICAgICByZXBvcnRwYXJzOiBldi5yZXN1bHRyZXBvcnRwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBjb21wbGV4cmVwb3J0aWQ6IGV2LnJlc3VsdGNvbXBsZXhyZXBvcnRcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXYudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlN0YXJ0ZWRcIjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkpvYiBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gdGhlICdTdGFydGVkJyBjYWxsYmFja1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV0gPSBqb2I7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxKb2JzLnNwbGljZSgwLCAwLCBqb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoXCJhcHAuc3RhcnRlZEpvYlwiLCBqb2IuZGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlByb2dyZXNzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgbWkgYXJyaXZhIHVuIHByb2dyZXNzIGRpIHVuIGpvYiBjaGUgbm9uIGhvIHNpZ25pZmljYSBjaGUgbWkgc29ubyBsb2dnYXRvIG9yYSBjb24gZGVpIEpvYiBpbiBjb3Jzb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHF1aW5kaSBwZXIgcHJpbWEgY29zYSBkZXZvIG1ldHRlcmxvIGluIGxpc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdID0gam9iO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbEpvYnMuc3BsaWNlKDAsIDAsIGpvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXS5wZXJjZW50YWdlID0gdGhpcy5yb3VuZFRvVHdvKGV2LnByb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwiYXBwLnByb2dyZXNzSm9iXCIsIHsgZGVzY3JpcHRpb246IGpvYi5kZXNjcmlwdGlvbiwgcHJvZ3Jlc3M6IHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXS5wZXJjZW50YWdlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIkNvbXBsZXRlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXSA9IGpvYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxKb2JzLnNwbGljZSgwLCAwLCBqb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgam9iVG9VcGRhdGUgPSB0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV07XHJcbiAgICAgICAgICAgICAgICAgICAgam9iVG9VcGRhdGUucGVyY2VudGFnZSA9IDEwMDtcclxuICAgICAgICAgICAgICAgICAgICBqb2JUb1VwZGF0ZS5maWxlaWQgPSBldi5yZXN1bHRmaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvYlRvVXBkYXRlLnJlcG9ydGlkID0gZXYucmVzdWx0cmVwb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgIGpvYlRvVXBkYXRlLnJlcG9ydHBhcnMgPSBldi5yZXN1bHRyZXBvcnRwYXJhbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgam9iVG9VcGRhdGUuY29tcGxldGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm90aWZ5T25Db21wbGV0ZWRKb2JzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwiYXBwLmNvbXBsZXRlZEpvYlwiLCBqb2JUb1VwZGF0ZS5kZXNjcmlwdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmpvYnNJblByb2dyZXNzID0gdGhpcy5hbGxKb2JzLmZpbHRlcih0ID0+ICF0LmNvbXBsZXRlZCkubGVuZ3RoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJvdW5kVG9Ud28obnVtKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogMTAwKSAvIDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKYWNlSURlbnRpdHkoKTogSmFjZUlkZW50aXR5IHtcclxuICAgICAgICBpZiAodGhpcy5KYWNlSWRlbnRpdHkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkphY2VJZGVudGl0eTtcclxuICAgICAgICB0aGlzLkphY2VJZGVudGl0eSA9IHRoaXMuYnRzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkphY2VJZGVudGl0eTtcclxuICAgIH1cclxuXHJcbiAgICBub3RpZnlEYXRhQ2hhbmdlZChldmVudCwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9kYXRhW2V2ZW50XSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuX2RhdGEubmV4dCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YVtldmVudF1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHN1YnNjcmliZXJzID0gdGhpcy5fc3Vic2NyaXB0aW9ucy5nZXQoZXZlbnQpIHx8IFtdO1xyXG4gICAgICAgIHN1YnNjcmliZXJzLnB1c2goY2FsbGJhY2spO1xyXG5cclxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnNldChldmVudCwgc3Vic2NyaWJlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9vbkV2ZW50KGRhdGE6IGFueSkge1xyXG4gICAgICAgIHZhciBzdWJzY3JpYmVycyA9IHRoaXMuX3N1YnNjcmlwdGlvbnMuZ2V0KGRhdGFbXCJldmVudFwiXSkgfHwgW107XHJcblxyXG4gICAgICAgIHN1YnNjcmliZXJzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZGF0YVtcImRhdGFcIl0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTaWRlYmFyV2lkdGgod2lkdGg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEhlYWRlckhlaWdodChoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaGVhZGVySGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG59Il19
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { DomSanitizer } from "@angular/platform-browser";
|
|
3
|
-
import { Injectable } from "@angular/core";
|
|
4
|
-
import { HttpParams } from "@angular/common/http";
|
|
5
|
-
// ES
|
|
6
|
-
import { CallResult, MessageService } from "@esfaenza/extensions";
|
|
7
|
-
import { HTTPService } from "@esfaenza/httpservice";
|
|
8
|
-
// Configurazioni
|
|
9
|
-
import { TokenService } from "../../app.accesstoken";
|
|
10
|
-
import { firstValueFrom } from "rxjs";
|
|
11
|
-
import { UpdatePasswordDto, UpdateProfilePictureDto, UpdateAccountRecoverySettingsDto, USE_FAKE_ACCESS_TOKEN } from "@esfaenza/core/domain";
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
// Chiamate ai Repository
|
|
14
|
-
const GET_UserProfile_GetAccountPicture = "/api/UserProfile/GetAccountPicture";
|
|
15
|
-
const POST_UserProfile_UpdateAccountPicture = "/api/UserProfile/UpdateAccountPicture";
|
|
16
|
-
const POST_UserProfile_UpdateAccountRecoveryInfos = "/api/UserProfile/UpdateAccountRecoveryInfos";
|
|
17
|
-
const POST_UserProfile_UpdateAccountPassword = "/api/UserProfile/UpdateAccountPassword";
|
|
18
|
-
const GET_UserProfile_DeleteAccountPicture = "/api/UserProfile/DeleteAccountPicture";
|
|
19
|
-
const GET_UserProfile_GetEntityAccount = "/api/UserProfile/GetEntityAccount";
|
|
20
|
-
export class UserPreferencesService {
|
|
21
|
-
constructor(injector) {
|
|
22
|
-
this.injector = injector;
|
|
23
|
-
let tks = this.injector.get(TokenService);
|
|
24
|
-
this.sanitizer = this.injector.get(DomSanitizer);
|
|
25
|
-
this.http = this.injector.get(HTTPService);
|
|
26
|
-
this.msgExts = this.injector.get(MessageService);
|
|
27
|
-
this.fakeToken = this.injector.get(USE_FAKE_ACCESS_TOKEN) || false;
|
|
28
|
-
this.AccountId = tks.getJaceIdentity().IdAccount.toString();
|
|
29
|
-
this.doReloadProfilePicture();
|
|
30
|
-
}
|
|
31
|
-
async getAccountProfile() {
|
|
32
|
-
let pars = new HttpParams().set("idAccount", this.AccountId);
|
|
33
|
-
let ret = await firstValueFrom(this.http.get(GET_UserProfile_GetEntityAccount, pars));
|
|
34
|
-
return ret;
|
|
35
|
-
}
|
|
36
|
-
async doReloadProfilePicture() {
|
|
37
|
-
this.ProfilePicture = null;
|
|
38
|
-
let tmpPict = await this.getCurrentProfilePicture();
|
|
39
|
-
this.ProfilePicture = this.sanitizer.bypassSecurityTrustResourceUrl(`data:image/png;base64,${tmpPict}`);
|
|
40
|
-
}
|
|
41
|
-
async getCurrentProfilePicture() {
|
|
42
|
-
// Se fake token restituisco la stock image dell'utente
|
|
43
|
-
if (this.fakeToken)
|
|
44
|
-
return "/9j/4AAQSkZJRgABAQEBLAEsAAD/4QCaRXhpZgAASUkqAAgAAAADAA4BAgBQAAAAMgAAABoBBQABAAAAggAAABsBBQABAAAAigAAAAAAAABEZWZhdWx0IEF2YXRhciBQcm9maWxlIEljb24gVmVjdG9yLiBTb2NpYWwgTWVkaWEgVXNlciBJbWFnZS4gVmVjdG9yIElsbHVzdHJhdGlvbiwBAAABAAAALAEAAAEAAAD/4QXHaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj4KCTxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CgkJPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczpJcHRjNHhtcENvcmU9Imh0dHA6Ly9pcHRjLm9yZy9zdGQvSXB0YzR4bXBDb3JlLzEuMC94bWxucy8iICAgeG1sbnM6R2V0dHlJbWFnZXNHSUZUPSJodHRwOi8veG1wLmdldHR5aW1hZ2VzLmNvbS9naWZ0LzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGx1cz0iaHR0cDovL25zLnVzZXBsdXMub3JnL2xkZi94bXAvMS4wLyIgIHhtbG5zOmlwdGNFeHQ9Imh0dHA6Ly9pcHRjLm9yZy9zdGQvSXB0YzR4bXBFeHQvMjAwOC0wMi0yOS8iIHhtbG5zOnhtcFJpZ2h0cz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3JpZ2h0cy8iIHBob3Rvc2hvcDpDcmVkaXQ9IkdldHR5IEltYWdlcyIgR2V0dHlJbWFnZXNHSUZUOkFzc2V0SUQ9IjEzMzcxNDQxNDYiIHhtcFJpZ2h0czpXZWJTdGF0ZW1lbnQ9Imh0dHBzOi8vd3d3LmlzdG9ja3Bob3RvLmNvbS9sZWdhbC9saWNlbnNlLWFncmVlbWVudD91dG1fbWVkaXVtPW9yZ2FuaWMmYW1wO3V0bV9zb3VyY2U9Z29vZ2xlJmFtcDt1dG1fY2FtcGFpZ249aXB0Y3VybCIgcGx1czpEYXRhTWluaW5nPSJodHRwOi8vbnMudXNlcGx1cy5vcmcvbGRmL3ZvY2FiL0RNSS1QUk9ISUJJVEVELUVYQ0VQVFNFQVJDSEVOR0lORUlOREVYSU5HIiA+CjxkYzpjcmVhdG9yPjxyZGY6U2VxPjxyZGY6bGk+TWFyaWEgU2hhcGlsb3ZhPC9yZGY6bGk+PC9yZGY6U2VxPjwvZGM6Y3JlYXRvcj48ZGM6ZGVzY3JpcHRpb24+PHJkZjpBbHQ+PHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5EZWZhdWx0IEF2YXRhciBQcm9maWxlIEljb24gVmVjdG9yLiBTb2NpYWwgTWVkaWEgVXNlciBJbWFnZS4gVmVjdG9yIElsbHVzdHJhdGlvbjwvcmRmOmxpPjwvcmRmOkFsdD48L2RjOmRlc2NyaXB0aW9uPgo8cGx1czpMaWNlbnNvcj48cmRmOlNlcT48cmRmOmxpIHJkZjpwYXJzZVR5cGU9J1Jlc291cmNlJz48cGx1czpMaWNlbnNvclVSTD5odHRwczovL3d3dy5pc3RvY2twaG90by5jb20vcGhvdG8vbGljZW5zZS1nbTEzMzcxNDQxNDYtP3V0bV9tZWRpdW09b3JnYW5pYyZhbXA7dXRtX3NvdXJjZT1nb29nbGUmYW1wO3V0bV9jYW1wYWlnbj1pcHRjdXJsPC9wbHVzOkxpY2Vuc29yVVJMPjwvcmRmOmxpPjwvcmRmOlNlcT48L3BsdXM6TGljZW5zb3I+CgkJPC9yZGY6RGVzY3JpcHRpb24+Cgk8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJ3Ij8+Cv/tAJZQaG90b3Nob3AgMy4wADhCSU0EBAAAAAAAehwCUAAPTWFyaWEgU2hhcGlsb3ZhHAJ4AFBEZWZhdWx0IEF2YXRhciBQcm9maWxlIEljb24gVmVjdG9yLiBTb2NpYWwgTWVkaWEgVXNlciBJbWFnZS4gVmVjdG9yIElsbHVzdHJhdGlvbhwCbgAMR2V0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";
|
|
45
|
-
let pictureb64 = await firstValueFrom(this.http.get(GET_UserProfile_GetAccountPicture, new HttpParams().set('idAccount', this.AccountId)));
|
|
46
|
-
return pictureb64;
|
|
47
|
-
}
|
|
48
|
-
async doUpdateProfilePicture(image) {
|
|
49
|
-
if (this.fakeToken) {
|
|
50
|
-
var ret = new CallResult();
|
|
51
|
-
ret.success = true;
|
|
52
|
-
return ret;
|
|
53
|
-
}
|
|
54
|
-
let dtoPic = new UpdateProfilePictureDto(this.AccountId);
|
|
55
|
-
let cr = await firstValueFrom(this.http.postwithFiles(POST_UserProfile_UpdateAccountPicture, dtoPic, image ?? []));
|
|
56
|
-
if (cr.success)
|
|
57
|
-
this.doReloadProfilePicture();
|
|
58
|
-
return cr;
|
|
59
|
-
}
|
|
60
|
-
async doUpdateRecoverySettings(email) {
|
|
61
|
-
if (this.fakeToken) {
|
|
62
|
-
var ret = new CallResult();
|
|
63
|
-
ret.success = true;
|
|
64
|
-
return ret;
|
|
65
|
-
}
|
|
66
|
-
let dto = new UpdateAccountRecoverySettingsDto(this.AccountId, email);
|
|
67
|
-
let cr = await firstValueFrom(this.http.post(POST_UserProfile_UpdateAccountRecoveryInfos, dto));
|
|
68
|
-
return cr;
|
|
69
|
-
}
|
|
70
|
-
async doUpdatePassword(oldPassword, newPassword, newPasswordConfirm) {
|
|
71
|
-
if (this.fakeToken) {
|
|
72
|
-
var ret = new CallResult();
|
|
73
|
-
ret.success = true;
|
|
74
|
-
return ret;
|
|
75
|
-
}
|
|
76
|
-
let dto = new UpdatePasswordDto(this.AccountId, oldPassword, newPassword, newPasswordConfirm);
|
|
77
|
-
let cr = await firstValueFrom(this.http.post(POST_UserProfile_UpdateAccountPassword, dto));
|
|
78
|
-
return cr;
|
|
79
|
-
}
|
|
80
|
-
async doDeleteProfilePicture() {
|
|
81
|
-
if (this.fakeToken) {
|
|
82
|
-
var ret = new CallResult();
|
|
83
|
-
ret.success = true;
|
|
84
|
-
return ret;
|
|
85
|
-
}
|
|
86
|
-
let pars = new HttpParams().set('idAccount', this.AccountId);
|
|
87
|
-
let cr = await firstValueFrom(this.http.get(GET_UserProfile_DeleteAccountPicture, pars));
|
|
88
|
-
if (cr.success)
|
|
89
|
-
this.ProfilePicture = null;
|
|
90
|
-
return cr;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
UserPreferencesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserPreferencesService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
94
|
-
UserPreferencesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserPreferencesService });
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserPreferencesService, decorators: [{
|
|
96
|
-
type: Injectable
|
|
97
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnVzZXJwcmVmZXJlbmNlcy5iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9zcmMvY2xhc3Nlcy9wcmVmZXJlbmNlcy91c2VyL2FwcC51c2VycHJlZmVyZW5jZXMuYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFlBQVksRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxLQUFLO0FBQ0wsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxnQ0FBZ0MsRUFBZSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUV6Six5QkFBeUI7QUFDekIsTUFBTSxpQ0FBaUMsR0FBVyxvQ0FBb0MsQ0FBQztBQUN2RixNQUFNLHFDQUFxQyxHQUFXLHVDQUF1QyxDQUFDO0FBQzlGLE1BQU0sMkNBQTJDLEdBQVcsNkNBQTZDLENBQUM7QUFDMUcsTUFBTSxzQ0FBc0MsR0FBVyx3Q0FBd0MsQ0FBQztBQUNoRyxNQUFNLG9DQUFvQyxHQUFXLHVDQUF1QyxDQUFDO0FBQzdGLE1BQU0sZ0NBQWdDLEdBQVcsbUNBQW1DLENBQUM7QUFHckYsTUFBTSxPQUFPLHNCQUFzQjtJQVMvQixZQUFvQixRQUFrQjtRQUFsQixhQUFR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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBYSxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLElBQUksRUFBRSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQyxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7O29IQTFGUSxzQkFBc0I7d0hBQXRCLHNCQUFzQjs0RkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuLy8gRVNcclxuaW1wb3J0IHsgQ2FsbFJlc3VsdCwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgSFRUUFNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2h0dHBzZXJ2aWNlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vYXBwLmFjY2Vzc3Rva2VuXCI7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVXBkYXRlUGFzc3dvcmREdG8sIFVwZGF0ZVByb2ZpbGVQaWN0dXJlRHRvLCBVcGRhdGVBY2NvdW50UmVjb3ZlcnlTZXR0aW5nc0R0bywgVXNlckFjY291bnQsIFVTRV9GQUtFX0FDQ0VTU19UT0tFTiB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIjtcclxuXHJcbi8vIENoaWFtYXRlIGFpIFJlcG9zaXRvcnlcclxuY29uc3QgR0VUX1VzZXJQcm9maWxlX0dldEFjY291bnRQaWN0dXJlOiBzdHJpbmcgPSBcIi9hcGkvVXNlclByb2ZpbGUvR2V0QWNjb3VudFBpY3R1cmVcIjtcclxuY29uc3QgUE9TVF9Vc2VyUHJvZmlsZV9VcGRhdGVBY2NvdW50UGljdHVyZTogc3RyaW5nID0gXCIvYXBpL1VzZXJQcm9maWxlL1VwZGF0ZUFjY291bnRQaWN0dXJlXCI7XHJcbmNvbnN0IFBPU1RfVXNlclByb2ZpbGVfVXBkYXRlQWNjb3VudFJlY292ZXJ5SW5mb3M6IHN0cmluZyA9IFwiL2FwaS9Vc2VyUHJvZmlsZS9VcGRhdGVBY2NvdW50UmVjb3ZlcnlJbmZvc1wiO1xyXG5jb25zdCBQT1NUX1VzZXJQcm9maWxlX1VwZGF0ZUFjY291bnRQYXNzd29yZDogc3RyaW5nID0gXCIvYXBpL1VzZXJQcm9maWxlL1VwZGF0ZUFjY291bnRQYXNzd29yZFwiO1xyXG5jb25zdCBHRVRfVXNlclByb2ZpbGVfRGVsZXRlQWNjb3VudFBpY3R1cmU6IHN0cmluZyA9IFwiL2FwaS9Vc2VyUHJvZmlsZS9EZWxldGVBY2NvdW50UGljdHVyZVwiO1xyXG5jb25zdCBHRVRfVXNlclByb2ZpbGVfR2V0RW50aXR5QWNjb3VudDogc3RyaW5nID0gXCIvYXBpL1VzZXJQcm9maWxlL0dldEVudGl0eUFjY291bnRcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBBY2NvdW50SWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBQcm9maWxlUGljdHVyZTogU2FmZVJlc291cmNlVXJsO1xyXG5cclxuICAgIHB1YmxpYyBmYWtlVG9rZW46IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXI7XHJcbiAgICBwdWJsaWMgaHR0cDogSFRUUFNlcnZpY2U7XHJcbiAgICBwdWJsaWMgbXNnRXh0czogTWVzc2FnZVNlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBsZXQgdGtzID0gdGhpcy5pbmplY3Rvci5nZXQoVG9rZW5TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLnNhbml0aXplciA9IHRoaXMuaW5qZWN0b3IuZ2V0KERvbVNhbml0aXplcik7XHJcbiAgICAgICAgdGhpcy5odHRwID0gdGhpcy5pbmplY3Rvci5nZXQoSFRUUFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMubXNnRXh0cyA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLmZha2VUb2tlbiA9IHRoaXMuaW5qZWN0b3IuZ2V0KFVTRV9GQUtFX0FDQ0VTU19UT0tFTikgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuQWNjb3VudElkID0gdGtzLmdldEphY2VJZGVudGl0eSgpLklkQWNjb3VudC50b1N0cmluZygpO1xyXG4gICAgICAgIHRoaXMuZG9SZWxvYWRQcm9maWxlUGljdHVyZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRBY2NvdW50UHJvZmlsZSgpOiBQcm9taXNlPFVzZXJBY2NvdW50PiB7XHJcbiAgICAgICAgbGV0IHBhcnMgPSBuZXcgSHR0cFBhcmFtcygpLnNldChcImlkQWNjb3VudFwiLCB0aGlzLkFjY291bnRJZCk7XHJcbiAgICAgICAgbGV0IHJldCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8VXNlckFjY291bnQ+KEdFVF9Vc2VyUHJvZmlsZV9HZXRFbnRpdHlBY2NvdW50LCBwYXJzKSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9SZWxvYWRQcm9maWxlUGljdHVyZSgpIHtcclxuICAgICAgICB0aGlzLlByb2ZpbGVQaWN0dXJlID0gbnVsbDtcclxuICAgICAgICBsZXQgdG1wUGljdCA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudFByb2ZpbGVQaWN0dXJlKCk7XHJcbiAgICAgICAgdGhpcy5Qcm9maWxlUGljdHVyZSA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7dG1wUGljdH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVudFByb2ZpbGVQaWN0dXJlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgICAgIC8vIFNlIGZha2UgdG9rZW4gcmVzdGl0dWlzY28gbGEgc3RvY2sgaW1hZ2UgZGVsbCd1dGVudGVcclxuICAgICAgICBpZiAodGhpcy5mYWtlVG9rZW4pXHJcbiAgICAgICAgICAgIHJldHVybiBcIi85ai80QUFRU2taSlJnQUJBUUVCTEFFc0FBRC80UUNhUlhocFpnQUFTVWtxQUFnQUFBQURBQTRCQWdCUUFBQUFNZ0FBQUJvQkJRQUJBQUFBZ2dBQUFCc0JCUUFCQUFBQWlnQUFBQUFBQUFCRVpXWmhkV3gwSUVGMllYUmhjaUJRY205bWFXeGxJRWxqYjI0Z1ZtVmpkRzl5TGlCVGIyTnBZV3dnVFdWa2FXRWdWWE5sY2lCSmJXRm5aUzRnVm1WamRHOXlJRWxzYkhWemRISmhkR2x2Yml3QkFBQUJBQUFBTEFFQUFBRUFBQUQvNFFYSGFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0x3QThQM2h3WVdOclpYUWdZbVZuYVc0OUl1Kzd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJL1BnbzhlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklqNEtDVHh5WkdZNlVrUkdJSGh0Ykc1ek9uSmtaajBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOHdNaTh5TWkxeVpHWXRjM2x1ZEdGNExXNXpJeUkrQ2drSlBISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmNHaHZkRzl6YUc5d1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM0JvYjNSdmMyaHZjQzh4TGpBdklpQjRiV3h1Y3pwSmNIUmpOSGh0Y0VOdmNtVTlJbWgwZEhBNkx5OXBjSFJqTG05eVp5OXpkR1F2U1hCMFl6UjRiWEJEYjNKbEx6RXVNQzk0Yld4dWN5OGlJQ0FnZUcxc2JuTTZSMlYwZEhsSmJXRm5aWE5IU1VaVVBTSm9kSFJ3T2k4dmVHMXdMbWRsZEhSNWFXMWhaMlZ6TG1OdmJTOW5hV1owTHpFdU1DOGlJSGh0Ykc1ek9tUmpQU0pvZEhSd09pOHZjSFZ5YkM1dmNtY3ZaR012Wld4bGJXVnVkSE12TVM0eEx5SWdlRzFzYm5NNmNHeDFjejBpYUhSMGNEb3ZMMjV6TG5WelpYQnNkWE11YjNKbkwyeGtaaTk0YlhBdk1TNHdMeUlnSUhodGJHNXpPbWx3ZEdORmVIUTlJbWgwZEhBNkx5OXBjSFJqTG05eVp5OXpkR1F2U1hCMFl6UjRiWEJGZUhRdk1qQXdPQzB3TWkweU9TOGlJSGh0Ykc1ek9uaHRjRkpwWjJoMGN6MGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMM0pwWjJoMGN5OGlJSEJvYjNSdmMyaHZjRHBEY21Wa2FYUTlJa2RsZEhSNUlFbHRZV2RsY3lJZ1IyVjBkSGxKYldGblpYTkhTVVpVT2tGemMyVjBTVVE5SWpFek16Y3hORFF4TkRZaUlIaHRjRkpwWjJoMGN6cFhaV0pUZEdGMFpXMWxiblE5SW1oMGRIQnpPaTh2ZDNkM0xtbHpkRzlqYTNCb2IzUnZMbU52YlM5c1pXZGhiQzlzYVdObGJuTmxMV0ZuY21WbGJXVnVkRDkxZEcxZmJXVmthWFZ0UFc5eVoyRnVhV01tWVcxd08zVjBiVjl6YjNWeVkyVTlaMjl2WjJ4bEptRnRjRHQxZEcxZlkyRnRjR0ZwWjI0OWFYQjBZM1Z5YkNJZ2NHeDFjenBFWVhSaFRXbHVhVzVuUFNKb2RIUndPaTh2Ym5NdWRYTmxjR3gxY3k1dmNtY3ZiR1JtTDNadlkyRmlMMFJOU1MxUVVrOUlTVUpKVkVWRUxVVllRMFZRVkZORlFWSkRTRVZPUjBsT1JVbE9SRVZZU1U1SElpQStDanhrWXpwamNtVmhkRzl5UGp4eVpHWTZVMlZ4UGp4eVpHWTZiR2srVFdGeWFXRWdVMmhoY0dsc2IzWmhQQzl5WkdZNmJHaytQQzl5WkdZNlUyVnhQand2WkdNNlkzSmxZWFJ2Y2o0OFpHTTZaR1Z6WTNKcGNIUnBiMjQrUEhKa1pqcEJiSFErUEhKa1pqcHNhU0I0Yld3NmJHRnVaejBpZUMxa1pXWmhkV3gwSWo1RVpXWmhkV3gwSUVGMllYUmhjaUJRY205bWFXeGxJRWxqYjI0Z1ZtVmpkRzl5TGlCVGIyTnBZV3dnVFdWa2FXRWdWWE5sY2lCSmJXRm5aUzRnVm1WamRHOXlJRWxzYkhWemRISmhkR2x2Ymp3dmNtUm1PbXhwUGp3dmNtUm1Pa0ZzZEQ0OEwyUmpPbVJsYzJOeWFYQjBhVzl1UGdvOGNHeDFjenBNYVdObGJuTnZjajQ4Y21SbU9sTmxjVDQ4Y21SbU9teHBJSEprWmpwd1lYSnpaVlI1Y0dVOUoxSmxjMjkxY21ObEp6NDhjR3gxY3pwTWFXTmxibk52Y2xWU1RENW9kSFJ3Y3pvdkwzZDNkeTVwYzNSdlkydHdhRzkwYnk1amIyMHZjR2h2ZEc4dmJHbGpaVzV6WlMxbmJURXpNemN4TkRReE5EWXRQM1YwYlY5dFpXUnBkVzA5YjNKbllXNXBZeVpoYlhBN2RYUnRYM052ZFhKalpUMW5iMjluYkdVbVlXMXdPM1YwYlY5allXMXdZV2xuYmoxcGNIUmpkWEpzUEM5d2JIVnpPa3hwWTJWdWMyOXlWVkpNUGp3dmNtUm1PbXhwUGp3dmNtUm1PbE5sY1Q0OEwzQnNkWE02VEdsalpXNXpiM0krQ2drSlBDOXlaR1k2UkdWelkzSnBjSFJwYjI0K0NnazhMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdvOFAzaHdZV05yWlhRZ1pXNWtQU0ozSWo4K0N2L3RBSlpRYUc5MGIzTm9iM0FnTXk0d0FEaENTVTBFQkFBQUFBQUFlaHdDVUFBUFRXRnlhV0VnVTJoaGNHbHNiM1poSEFKNEFGQkVaV1poZFd4MElFRjJZWFJoY2lCUWNtOW1hV3hsSUVsamIyNGdWbVZqZEc5eUxpQlRiMk5wWVd3Z1RXVmthV0VnVlhObGNpQkpiV0ZuWlM0Z1ZtVmpkRzl5SUVsc2JIVnpkSEpoZEdsdmJod0NiZ0FNUjJWMGRIa2dTVzFoWjJWei85c0FRd0FLQndjSUJ3WUtDQWdJQ3dvS0N3NFlFQTRORFE0ZEZSWVJHQ01mSlNRaUh5SWhKaXMzTHlZcE5Da2hJakJCTVRRNU96NCtQaVV1UkVsRFBFZzNQVDQ3LzhJQUN3Z0NaQUprQVFFUkFQL0VBQm9BQVFBQ0F3RUFBQUFBQUFBQUFBQUFBQUFFQlFFQ0F3Yi8yZ0FJQVFFQUFBQUI5bUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBeHdqOGVYUEdNNzlPM2VUdUFBQUFBQUFBQURXRkNpYWdBZDVzN3VBQUFBQUFBQUJ4cllHb0FBRW14blpBQUFBQUFBQWM2cXZBQUFCMnRadVFBQUFBQUFCaXVxdFFBQUFDVmM5Z0FBQUFBQUhPbGlBQUFBQTJ0N0FBQUFBQUFFYWo1Z0FBQUFGamI1QUFBQUFBSWxIcUFBQUFBRXk3MkFBQUFBQWlVV0FBQUFBQUpkN2tBQUFBQUkxRHFBQUFBQUFUcnJJQUFBQUJ6ODl6QUFEdEw3WjV4NG1BQUF0YlFBQUFBQmlpaUFBRHZiUzhoenJhM0FBQXZwWUFBQUFGYlVBQUNmY2JBRVdqMEFBT3ZvdGdBQUFBNStjMUFBSnQza0FJMUJnQUFzcmNBQUFBS2F2QUFPbm90d0FLeXBBQU0raTdBQUFBSEh6Z0FBdDdJQUJyNXZRQUFuM1FBQUFCVDF3QUE5TDBBQUtldUFBTStrNkFBQUFhK2ExQUFPM293QUJCcEFBQmEyZ0FBQUVDbEFBRXUrQUFFV2dBQUhiMFdRQUFBVWNJQUFTcjhBQVJhQUFBUFJkd0FBQXg1blVBQWRmU0FBQ3ZwZ0FBdHJNQUFBSS9uZ0FBZWs2Z0FGTEFBQUNiZUFBQUJYMHdBQUxTMUFBYWViMUFBRHI2UUFBQUttc0FBQnQ2THFBQlVWb0FBSHA5Z0FBQlNRUUFBSk45c0FFS2pBQUFlaTdnQUFDZ2lnQUFKVjMwQUlGTmdBQUJmeWdBQUI1K01BQUFiMnMvWUk5WENBQUFGN01BQUFIbm80QUFBYlNlMmRJM0VBQUFGN01BQUFIbjR3QUFBQUFBQUFYMHNBQUFVVU1BQUNWTGtkTmdZMDR4b1dnQUFIb0pJQUFBcHE4QUFac0xMc0FBeENxdUlBQWVrNmdBQUNzcVFBRHZkU0FBQVlyS29BQTI5TmtBQUFRNklBQk11OWdBQUNIU2FnQVNmUUFBQUJwNWtBQ1hlNUFBQUNKUllBQlkzQUFBQVBPOEFBNitoM0FBQUFyYWdBRjVOQUFBQlZWWUFYc3dBQUFCaWdqQURQcHRnQUFBY1BPZ0NWZmdBQUFDTFFBQ2JlQUFBQVBQeGdDOG1nQUFBQjUzZ0FYc3dBQUFCQXBRRzNwZGdBQUFBcTZvQjI5RmtBQUFCanp2RUNYZkFBQUFBaTBBQzZuZ0FBQUNEU0FXTndBQUFBRFR6SUhmME9RQUFBQmloaWd0YlFBQUFBR1BMZ1g4b0FBQUFISHoyb1d0b0FBQUFCNWZBV053QUFBQUFyNllMYXpBQUFBQTh2Z2QvUWJBQUFBQUZQWERiWUFBQUFEbU4vUWRnQUFBQUJpamhnQUFBQUFNMzBvQUFBQUFHdEhFQUFBQUFCbThtQUFBQUFBTVVzRUFBQUFBYjNrb0FBQUFBQVlyS29BQUFBQjN2T3dBQUFBQUFFU201QUFBQUJZMjJ3QUFBQUFBQnJWVjJBQUFBTzl4S0FBQUFBQUFBNDFjSEFBQUIydEoyUUFBQUFBQUFCenI0SEVBQVptV0V2SUFBQUFBQUFBREhHSEdqOGdHM2VSTGw3QUFBQUFBQUFBQURYbHBxenQwNlpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvL0VBQ2NRQUFJQkF3UUJCQU1CQVFBQUFBQUFBQUVDQXdBRVFCRVNFekJRRkNBeE15RWlJNUJnLzlvQUNBRUJBQUVGQXY4QVc4elJyUnZFbzNocjFjbGVwbHIxRXRlb2xyMUV0ZXFsb1hqMEx3VUxxSTBIVnZPa2hhYTdRVTExSWFMTTNjczhpMHQ1U1RSdjVoNVVqcDdzbWl4WTRhVHlKU1hTTjVSM1ZCSmRNMWZPUWtyeDFIY3Eva1pib0NtWXNjdUs0YU9vNUZrSGpIZFVFdHcwbWVDVk1OeUg4WExNc1FkMmtid01OenQ4VE5PSWdTV1BnNEp6SFFPbzhMUE54QWtrK0ZnbjR5RHFQQnpTaUpTU3g4UGJ6N0Q0SjNDSzdtUnNGWW5laFp0WG8xcjBhVWJPbXRaRm9nakN0WnZCWEV2STJCSEMwbFIyNko3MlJYRWxwWHhnd1M4aVo5MUxvTUNDMzMwQm9PbVdCWlF5bEc3NDNNYmdoaG11NFJHWXMzZmJ3OGg3Sm9oS3BHaDc3U1g4NXQxSnVidlJDN3FvVmUyN2kvSGVEb1kzNUV5NVg0NC9uQXRFL1h1STFEcnNmdnRKTkh5N3Q5V3dFWGFuZmVMKy9lRG9VYmVtU1R0REhjM2ZDTlpjQzdHc1dCWnZsWGJhUllGdDkrQmNmUmdSTnNseWJwdFpjQzIrL0F1Zm93WVczeFpESGMyQkVkc3VCZG4rV0RadCt1UE9kc09GRzIrUHZ1MjFrd2JVNlRZOTRmNTRWby9lemJWWTdtd1l6dGt4N3cvbkNWaXJSdUpFN2JxWFU0WU9veHJ2N3NPR1hpWUVFZGM4M0dNU0g4dzQxejkrSkRPWWlycTQ2WnJrSlJPcHhMZjZNYTQrL0ZWMlF4M2FtZ1EzdWVaRXFTNVo4ZTErakd1UHZ4d1N0QzVsRmVzYXZXR2pkeVUwMGpaTnI5R05jZmY1VzIrakd1dnZ3MXQ1R3BiT2hheEN1Q0t1S091S091S091S091S091S091R09qYnhHamFKVFdiaW1Sa3hJUG94cndmMHdQbW83UW1ralJPLzVwN1ZHcVNKNDhLTWFSNDE0UHgzeFF0S1k0Vmp3L21wYlhBQTFiSHVockQzUVFHU2dBb3hab0JKUkJVOXR1TlpzZHh1VHRnaDVDUHdNZWVIbEh3ZXl6WDlzaWRkczNYR2hrZFZDTGszVU9vN0xWZEljaThYc3Q0dU5NdWVQams2Z05TbzJya1RKdmk2cmVQZkptWEVlK1BxdFUzUzVVNmJKZW0xVGJGbXpKc2w2YlpOa1dWZEp1ajZGRzVnTkJtM2k5TVNja21aS25ISjc3WWF6WjF3TlllaTFqMnBtWE1lOVBmWmo5ODV4cW52aGo1Sk02NGk0MzkxbDRlQ0xqVE9rakVpRUZUN2JMNHp6OCsyMWkzSHdGekR2SHRzdmpQUHo3SW96SzRBVWVCdVlkdnRERVZ5UFhJOWNqMXlQWEk5Y2oxeVBYSTljajF5UFhJOWNqMXlQWEk5Y2oxeVBYSTljajF5UFhJOWNqMXlQWEk5Y2oxeVBYSTljajF5UFhJOWNqMXlQN1ZVdTBVWWpUd2M4SEdmREFFbUdIaVh3aEdvbmdNWjhJQVNZSUJHUERFYWllMzJlRFZTNWhoRVE4VE5hK0JqaWFVeHhMR1BGeXdMSlR4dEdjMksxTFVBRkhqU0F3bHRLSTB5bzRYa3FLQlkvSlBHc2xTV2pDaU5NWklua3FPMVZmTE1pdlQyZE5FNllJQk5KYXUxSmJScDV0b1kzcHJNVWJXUVVZM1hwQUpvVzhwcGJOcVcxakZCUXYvQWtBMXd4bXZUeFY2V0t2U3hWNmFLdUNLaEdnLzF6LzhRQUxCQUFBUUlFQlFRQkJRRUJBUUFBQUFBQUFRQVJBaUV5UURBeFVGR1JFaUpCWVlFREV5QnhvWkJnWXYvYUFBZ0JBUUFHUHdML0FGdm5HRklFcVVDOEtyK0t0VnF0WmhUaENuQXMyVW9nZGRtV1V1NVNrcGtuR2xFdTZIaFNpMWp1SzdBeW1YdE0zSHRkM2FkVWVJcG9KQzU3U21pN1RxTFFUTzZjbDd4c3d1MDZhOFJUWlEzN2dzbWlrZEw5N0o0dEM2WTh0OUpZVkp6b2pHbE9OR1lWSnpvekdsT05FOStFNTBqcGlwMFBxSzZqWlNoVTRnRlVWVVZLTmIvcFRzdnR4ZkdoU3BGakxMZGJuODJpRHAvcDhXWHNhQjBETTUyUFZGU21HRnNkMHhzT29KeGZHSXB6NXNPbzBqRjkrRXhzUHRuNHZ1Z1pDd0VJVERHKzRQbXdkQ0s4TVZpWTk4ZGlqRHRZZEc5NElOckVRN1dBaTNzSFFpdWlka1R2WVFqM1l2c2JFd2ZOMDI5aUxHS3hCdW0yc1JZeFdVSnVTZDdHRSs3RnR6WlJRM0VWbUlyRHAyc20zdUFOelptRGpITVI4SWsrYktFKzdpRVdiand1b1kzMng4MmdOdjhBRnA2T2FjWWpDcTFoL1Z1YlhlRlBDY0pvWnhKemF3MjhWczhKWGZKU0wvbE1waDJpM0Z2RmNTTExOLzJxUXFBcEFCVGlOeUxlTFZoYm0weWI5cnVpNFdUcWdLZ2NLaUhoVVE4S2lIaFVROEtpSGhVQlVxUklYYVFWM0JyU0czQjlXVHh5WGFMRHQ3U3BqNXNvUjZ0NFRZU3kzVXM5N1IvcDhXQUZ3ZldPNXBUQzJjU2lUSEdodUNOOFp6U0V3dUpWSnNVeFhNUXhPa0poZGZjSHppdnZjaUw0eEhPWnZQUnl3MlFHMXlSaCtoZSt4aHZ0ZG5ZNFQ3M3hHRjdOMzFlWWNFRGROZlF4ZkdDQmVtSEFIcS9pd2VvNW05NmhtTUNJK3I4ajFnTjQ4MzhzaitjZWorem5mOUtZL2xGbzNXY2hsb1BVTXgrVVdpdDQ4cGhvWFhEbDUvR1JJVlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1Vlo1L0ZnbUdpT0tkSFlMLzFvckZPS2RGWUp6Vm83RmRVTk9oc0F0NHRLNnZwOGFETExkTU5NMk82YUlYenh5R3lZYWN4RHAvcDhLZDFJUzNXNTMxTHVDN0pxZHRJSjR1NDZ0M0IxMkhsVGhzWkIxUHRXNTk2M09GZHNTa3hVNFRneUNwWGRFQXB6VWczL0F6Q29DcFdYOVdYOVZQOVZBVW9SeC9ybi8vRUFDd1FBQUVDQlFNRUFRUURBUUVBQUFBQUFBRUFFU0V4UUVGUlVHRnhNSUdoc1NDUndkSGhrUER4RUdELzJnQUlBUUVBQVQ4aC9sdUphYTljSW9WRlpBNUtKNUFleUo4T3hicjZMY0p2OUFnSzUyUUV5cnFIQlU1TGtGNGlEcm94eEJ1b1c4dHBLMngyUno2NGV0TTBqQmlyZmVTUXo0TU5ZQVNkcnFITU1tYWV4aTNwSmJ0RWhuMkNCQkRndU5UZ29LR0c5ZEVrbkpjMUJpeGd5WDY0TlJmZldFNWtXOVpFbkdVN3VRWEdtd0hBb1M0TTE0eVVRd21EbmJIUzR4aWNrZkUvMjBJekN2WmdnUVE0TGpTSndDa01JNU81T2lGWi9vZ0NJNE45R0ROQ2tNSWlJNU45R0pPQzhJQUNPRG9qcG1jaU9UdVRwRWFvdkdoa2NrSTkvd0FhS2ZSR1ViNGlLRjd0RC9rL3RncEVBTzVFV0FnNE5FNnhPZjIwS0Q3RGVoTnd0Y1NpNUc4Zm13Q0c2TUlqN2tRU1loaUtBRmk0VSszdEFqLzloUWx0YkJsQUVCZ0xkSjRjS0hnMklvQmp1REtHVE9EWFdrRVJHalFJYS9jVXVveVpETWlHQXhFNkJoeEF4cmtkTXZOQmVRUUVOZ09zNHdpS0FRQUZpRU1KZWZOWURBUzVSSklrek5BMlRPQWRjQnBCZ2prTHFCeUtVdk5ZMkVvanpRQ0paTVZaUU1oV01hQWdBbUVNWmNWUXlzZ2RGTXpKOVNlS0lCdUZWQnN6b1I4dnFoRi82WG9jWnZHcTIrTFVKTjNmVkNUZGozUlpVWmpVRXNIVytwNkhaQ2hOaFJCN0FMMURvMmFqM3lFYUJzQzJpNHdhb1pvNFQzbnJoU2dDTE9SUFJiYUJVZHJFMFlGT0pCRnp4MW93d0ZJM2tEMDV1ekFVaDRzWlJBUkhCdjFCdThYaFRMbWtKenNwemZiYjFTc1F4SmhSbkIwbmo3WUVReEhKdlNtL2U5MC9rMDBKZ3FBQS9Ja2hqaURiNVg5T0JFcng2enAvSU5QNU5RZWN4YkZXM3dJWHpyL2NSWG9sWWRpVlQ1QnA0ZTE2MWIzL0FIVGkyNEJSemtzZlpnUWZ3bE1DNUZBSHpQVXBTbFA4ZFdUMktQOEF5Qy9BS2kwV2tDM0RUc1pWQ0FKTUE1VVRHNEUwRmdqZS9YSUFNUTRVWjdDU0syc0pVV3dBVS9GeVJRV0F1SkM0WHVLZEdRQVlod1ZQVklJTEVNZXZ2UVdxSGRrL1hLeXc4b1lDd0ZxWWIzREtPUnNSYnJNN0JlbzJUTjFqODRib0FBREFWQVhZQWtjb2drSU1SMVhzWU5VNElkeDFCcnVIQ0VCc0JWUUJpUHE2clZjYjFNY2ZMcVFrdm1zZmdNM1RHR0V5V1FRTWdhcHlXempwdGI1VFd1YlpCMDR4a0wxYmMzQjBvZ25IWFlxbU9rMkU1YXVHUDBkRW9HNWtBQVNBYXVoOTEwY2F6UENsVmtBaGpJb3RndHgwUHI5WDhlajBZVGZocllhZmg2SEVLOXVFWFFJSzFGQUdEQ3VpSVhoOHdnWEdnR1orYzd6VjR5THNjRkhJbUkrWGxqUUp2UHlndjdCMEdBK2JjZkx5eG9FM240akFjaUdSTUJMUW5SRkZKajQrRHc2SUlRaENFSVFoQ0VJUWhDRUlRaENFSVFoQ0VJWUc1S0NwMXpuUXlBUXhpQ2pUc3ZHamlRSEpzaFJJbE02S0F3SEJzcGlDOGFLRkFjbXltSUtaeG80Q0FjR3lLK0w2YUdPdmlVN0prenBUemc1L0ZFRUZqb0RZQnJrYWJHNXpwZzEwdTNBYkd1YVBlQ2hnSUFGaHB6WVFHeFJCRWNaSWhNQkJGalZFWldTU2kvZGFrT1ozZTZpWk54ZEVKZ0lPRFRZenlaTDZNbGtBQUdHcWoyQ2dKOWxKOU5rVUpWaUZzb3MwTjVxT0VLUzFxVUw1RUVYTkhNVkxuQ1ZMbjI2TTNEd0ZLVEhNRVY0Q0trNG51VUtZUWJEL0FNREpnOGhHYSttaWY5eXQybTVUKzRrQklrRC9BSmMzLzlvQUNBRUJBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGxvQUFBQUFBQUFBQWNBREFBQUFBQUFBQUhBQUFJQUFBQUFBQUFJQUFBR0FBQUFBQUFHQUFBQUdBQUFBQUFBQUFBQUFDQUFBQUFBQmdBQUFBQUFBQUFBQUFBQUFBQURBQUFBQUFJQUFBQUFDQUFBQUFCQUFBQUFBREFBQUFBQ0FBQUtBQUFBQUFBQVFBQWNFQUFHQUFBQUFnQUFnQ0FBQUFBQUFBQUFHQUJBQUVBQUFBQUFBSUFBQUFFQUFBQVlBQUFBR0FBSUFBQUFnQURBQUVBQUFBQUFCQUFFQUFBQUFBQUFBRUFBQUFBQUFBd0FBQUlBQVFBQUFBQUFBQUF3QUFnQUJBQUJBQUFCQUFBQUFDQUFBQUFBQ0FBQUFBSUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFEQUFnQUFJQUFBUUFBREFBQUFBQUFBQUFBQUNBQUFBQUFBQUJBQUFBS0FBQUFBQUFDQUFBQUFBQUFBQUFBQUFBQ0lIUUFBRUFBQUlBQUVBQUlBQUlBQUFBQUJnQUFFQUFRQUFBQUFFQUFBSUFBQUFBQWdBUUFBQUFBQ0FBQUJBQUFBQUFBQUFBQUFBQUNBQUFBUUFRQUFBQUFJQUFBQUFBZ0FBQUFBQUFBQUFRQUFBQUFJQWdBQUFBQUdBQUFBQUFBQUFBQUFBQUFBQVFFQUFBQUFBd0FBQUF3QUFBQUFHQUFBQUFBZ1FBQUFBRUFBQUFBQWdBQUFBQUlBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBRUFBQUFBQmdBQUFBQVlBQUFBQUFnQUFBQUFBQUFBQUFCUUFBQUFBQUFBQUFBQWdBQUFBQUFBQUFBQUFRQUFBQ0FBQUFBQUFBWUFBQVVBQUFBQUFBQUNBQUdnQUFBQUFBQUFGQUFnQUFBQUFBQUFBQUljQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFILy94QUFyRUFFQUFRRUZDQUlEQVFFQkFBQUFBQUFCRVFBaE1VQkJVVkJoY1lHUm9kSHhNTUVnc2VId2tHRC8yZ0FJQVFFQUFUOFEvd0N0d0NVQVpyVThJVEp5N1ZZUExBS2YzcGZGZG9GL2JWd0hnOEZMZUI0cjA1NG96aDR0OVZmWEVuNnJzd3lmZFA2a2I0cXlGZC85VVhQQ0IyNnRJTTFCVTJQS09wcVZPREplclU2YzNqOG9veU1KbVZFQVRjdTlNUU4zdjArYWhDUjN6dnRpWUFzamF1VlN4K045RnhXL25pbkNRQXdiNC9sUkpxWnRxNTBDRWx5TWp0T0RzNUdid0tsTjZ0N3hUbHlYcXl1SW5TbWEyWEtvNkJkVzF3YXYyZW9DckFYclZnbTZWYzRhMHBjYjFZeGNUZTEzQnlxMU1TOXM0aHMxV0Fyak5kQXBobHlpMjhXUHU4eEtxem5kbHp3dXk1VlpsazJ1OTBLVlNXUVhEUTJGT0pjcGE4V3BRSVNFaU5qc2l5QWJjYnpUNFhTcnNRU3E3ZG52bmlqcm1rRnpzYXhnUHlHbmJ1bFdleHB2cTdUVnFVR0FVaVhKc1NaWXNPcTY4S2Z5K1Zka0lFaGJGeitLRVNSa2RoTnBBWFpyb1V6bHJjWkRRd1VXdk0xaDFhTkhkZ1Y5VWN0L0FLWUxENmVLT096L0FIb3BUSEU2TktUcThJY0ZtQ0x6L09Xd1ZBVllDOWFXV3RZT3JYQTNIUjBCNW9RZytYWWNDcnZ5NFFBWGNLTldIV3Q1Tk9YSWhFaE1BaElpTWlaVUZ0TG82NzlnWkZDVVphT2VCaURlQVA4QU5CQk5BQ0ErSmhBRXNEczYwNmZ1dDVnTFZ5TE5CbVZHK2NqanJoSTJHcmtWTU9hVndHWUl1MTZjS0FBQUFXQWZJNnNXbjZYZFQ5RndISndFbHFseWN6SFJPY0laL3dBWUM4U2Ryb1p0UlBIQjh3QmtnbVprNEJNU1JFeWFpWWtRTk0yTVVWNGdhcTZuTFZKVnpjQVpHMDVaZjMvWHpuZEpxTlNyeDZDZFRKNllDVFA2dzg0eVpkanpWM2I5NEFJQWxXQ2l5d25QUEFSU3M1d2Z4N1lCRVlVUjBTdGNhVFJ6T3VLYW1FTGdWZjFoWUNUQ1NDOHJmckF4TUxRZXRuM2daMHJ2Qy9XS2htaUZ5TFg2d01tN0YzWUhoTUhzd052Y0NIQTJPS3NvMkxtYlg2d1BHY083QThSUTdNRk1MUFVDekVBaVlBbHAzNzE2bkF6R3dCUEM1d050ZG9kQzN4Z3BWYm84SDFpTFY0V0xuWjk0SzVtaU9aVDVybnZnSk9XV3ZGdC9VWUtQbFkvMitzUkJyY2RBOVlNeFhmOEEyUDhBYi9uVGlKRFQxV2hZSzJlTFJ3bTNFVDZIcUU4WU5CNG1EU1MyQzAxWm56R1VoWlptNmNzR01JbDVXNnk2akR3bWpkMSs4SmY1WXREZVViYzBneitSMFJPemQxYVZSRlcxWFBDY0Vyb1JoNERvSFpoYllTT0R2S0lnYlM4M1B4QnJMaGIvQUN0UEJkS3IzQ3pIUUhkaDNQQ2ZvdzA0K2RGenhLRk9mWmZaUTFzelVuNURvWS83TXVkRk5xWksxeGNPcDNmN0hEOWcvUmlONmJFS01oRHVHaUhTRktZN0E0dWpZM2dKZTdSS0lXUmgwTVQvQUtHdUhQTXJzMnNZM3F1N0R5alZkbytzR0NnQ3JjRlJ5VHMzOUw2RkM3dWc3dFg4MnIvVVZjUFBKL2RlcFY2eFhyRmVzVjZ4WHJGS1g5SFY1RnhEN3E5LzRncVlRTkcxNHFJYjJTeDU0U09hejZxNGZoSTlGODRFNjVMQUNWbzQ1dGw0cUZLYXJWeitkd0pMeEpHcDd2UmN2Rlhvc3Rvc0Z1T1hiRHo2d09mckFRVXdPZ1BMVUhsRFVQR0RjbUJDSkkwVURodlUvcnhTSlFNSWxwODdBM2wxTkFBQmNZZUZDME8rUHY1d01qcjg5MDgwRlUwQXd5Y2dTekp1UG1ud3ZoWHpXUFdTZVJPSUZuTjdLUkZFaEwvbGdhald0V2hRNEFRQmNHSWlzRDhCcDBTSVJ5ZmxrWXNNY1YvbUpoQWhjazIvSlltVGJvTTJvWmpneFJOWXV5Wk5lWHl5d1dqbHVQMWlZUnI1L1lmZnlFTUF1QVpHTFFSRWtieHFFUDZEVGw4WWp5SWNXcmdFRGxpWW1KNnlXL0hZYlBPOURyamJMcC92blQ0N0JKNjQySDMweGNEa0p5MysvRkhsRHk0WmVlZU9qVWh2SmZpZ1ZDejRaZHYzaTRZNVNYZXIvUHczZ0FEbTBUc0NCdU1kSVV0RlR1ZmZ3dEIzNWRCZlFBQUlDNHhhTXBDRWN5blJNR1hxcnZnbFNTQmZJczdwajRkRnBEeWZFL0RQUUxuZGs2K01iZmd0N004eDkvQkpvQTZ2OHgrNDZkdmdqRTNob1VBQUFFQVpZMitwcnNOMVB6NWdQN3g2U1JSZ3RIOGdWZ0pXaUdQYk5EbGo3STFiZWtOVHZuQ2ZsL2liOWdkNi9MUElXSHFjdGc1WnF3ZjZrL0wvQUJOK3dPOWZqS0VDM1JQTkFLSEFOaFg2VlladGVING5wSVh6RTE3Vlh0VmUxVjdWWHRWZTFWN1ZYdFZlMVY3Vlh0VmUxVjdWWHRWZTFWN1ZYdFZlMVY3Vlh0VmUxVjdWWHRWZTFWN1ZYdFZlMVY3Vlh0VmUxVjdWU3l5L2hKT2NHN2ZWcGxlMTJ3MFpBSVJ6S1lrcnMzOUhZNnQzd0RPcDlBUEMzR3hUckdoV2RLalhXT2U0N0ZadTZBWjFZTU51TncyT0dBVUtMR2tnTjhsNy9PdzBMWll5cWRvQndkeHNsQklTUnE0STMvNGRxUkFpV0lscHNDeXFHMHVQN1ZwMHIyL1poTnc0TCtPdFRNRTNGdkFjYUNzQksxYnh2ajlqU3JpcXdiT2YzNGdxVHpsTmFjSE9rOTlRSVRGR040V0E4ME1SM1pkd010cFE4TEkyRG5VajBtSG1rNVZlRUpobGliWFpEblVha0hBT1dkQUFBTGdMdHE3c3NVdE9EVHBoL3dDcnlwK09ONGRUQWxYRElTMUJkUXVncUFXV2R6cFFBQUFDNE50U2pOYngycWFkMW1IMVUvQWNKNzFrbVp6anJTSXdrUHdLUS92R3JwVFZuN1ZBSW1oVjlWRXZJMTBLM0JzZy93REE5bGNhL1VBbjZxOUNjQys2VXl1YXZlcUN6dkh5VmQ3Y1pmM1hZMEZBQkFRYnYrdVgvOWs9XCI7XHJcblxyXG4gICAgICAgIGxldCBwaWN0dXJlYjY0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxzdHJpbmc+KEdFVF9Vc2VyUHJvZmlsZV9HZXRBY2NvdW50UGljdHVyZSwgbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lkQWNjb3VudCcsIHRoaXMuQWNjb3VudElkKSkpO1xyXG4gICAgICAgIHJldHVybiBwaWN0dXJlYjY0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBkb1VwZGF0ZVByb2ZpbGVQaWN0dXJlKGltYWdlOiBhbnkpOiBQcm9taXNlPENhbGxSZXN1bHQ+IHtcclxuICAgICAgICBpZiAodGhpcy5mYWtlVG9rZW4pIHtcclxuICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBDYWxsUmVzdWx0KCk7XHJcbiAgICAgICAgICAgIHJldC5zdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkdG9QaWMgPSBuZXcgVXBkYXRlUHJvZmlsZVBpY3R1cmVEdG8odGhpcy5BY2NvdW50SWQpO1xyXG4gICAgICAgIGxldCBjciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0d2l0aEZpbGVzPENhbGxSZXN1bHQ+KFBPU1RfVXNlclByb2ZpbGVfVXBkYXRlQWNjb3VudFBpY3R1cmUsIGR0b1BpYywgaW1hZ2UgPz8gW10pKTtcclxuICAgICAgICBpZiAoY3Iuc3VjY2VzcykgdGhpcy5kb1JlbG9hZFByb2ZpbGVQaWN0dXJlKCk7XHJcbiAgICAgICAgcmV0dXJuIGNyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBkb1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2FsbFJlc3VsdD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmZha2VUb2tlbikge1xyXG4gICAgICAgICAgICB2YXIgcmV0ID0gbmV3IENhbGxSZXN1bHQoKTtcclxuICAgICAgICAgICAgcmV0LnN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGR0byA9IG5ldyBVcGRhdGVBY2NvdW50UmVjb3ZlcnlTZXR0aW5nc0R0byh0aGlzLkFjY291bnRJZCwgZW1haWwpO1xyXG4gICAgICAgIGxldCBjciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PENhbGxSZXN1bHQ+KFBPU1RfVXNlclByb2ZpbGVfVXBkYXRlQWNjb3VudFJlY292ZXJ5SW5mb3MsIGR0bykpO1xyXG4gICAgICAgIHJldHVybiBjcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9VcGRhdGVQYXNzd29yZChvbGRQYXNzd29yZDogc3RyaW5nLCBuZXdQYXNzd29yZDogc3RyaW5nLCBuZXdQYXNzd29yZENvbmZpcm06IHN0cmluZyk6IFByb21pc2U8Q2FsbFJlc3VsdD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmZha2VUb2tlbikge1xyXG4gICAgICAgICAgICB2YXIgcmV0ID0gbmV3IENhbGxSZXN1bHQoKTtcclxuICAgICAgICAgICAgcmV0LnN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGR0byA9IG5ldyBVcGRhdGVQYXNzd29yZER0byh0aGlzLkFjY291bnRJZCwgb2xkUGFzc3dvcmQsIG5ld1Bhc3N3b3JkLCBuZXdQYXNzd29yZENvbmZpcm0pO1xyXG4gICAgICAgIGxldCBjciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PENhbGxSZXN1bHQ+KFBPU1RfVXNlclByb2ZpbGVfVXBkYXRlQWNjb3VudFBhc3N3b3JkLCBkdG8pKTtcclxuICAgICAgICByZXR1cm4gY3I7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGRvRGVsZXRlUHJvZmlsZVBpY3R1cmUoKTogUHJvbWlzZTxDYWxsUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmFrZVRva2VuKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgQ2FsbFJlc3VsdCgpO1xyXG4gICAgICAgICAgICByZXQuc3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcGFycyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpZEFjY291bnQnLCB0aGlzLkFjY291bnRJZCk7XHJcbiAgICAgICAgbGV0IGNyID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxDYWxsUmVzdWx0PihHRVRfVXNlclByb2ZpbGVfRGVsZXRlQWNjb3VudFBpY3R1cmUsIHBhcnMpKTtcclxuICAgICAgICBpZiAoY3Iuc3VjY2VzcykgdGhpcy5Qcm9maWxlUGljdHVyZSA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGNyO1xyXG4gICAgfVxyXG59Il19
|