@esfaenza/core 15.2.284 → 16.2.26

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.
Files changed (171) hide show
  1. package/components/back-top/back-top.component.d.ts +1 -1
  2. package/components/error/404/pagenotfound.component.d.ts +2 -1
  3. package/components/error/500/servererror.component.d.ts +2 -1
  4. package/components/error/Angular/angularerror.component.d.ts +2 -1
  5. package/components/es-image-cropper/es-image-cropper.component.d.ts +1 -1
  6. package/components/es-modal/es-modal.component.d.ts +1 -1
  7. package/components/jace-resource/jace-resource.component.d.ts +1 -1
  8. package/components/labeled-span/labeled-span.component.d.ts +1 -1
  9. package/components/navbar/navbar.component.d.ts +2 -1
  10. package/directives/componentHost/componentHost.directive.d.ts +1 -1
  11. package/directives/draggable/draggable.directive.d.ts +1 -1
  12. package/directives/es-routerLink/es-routerLink.directive.d.ts +1 -1
  13. package/directives/slim-scroll/slim-scroll.directive.d.ts +1 -1
  14. package/domain/tokens.d.ts +2 -0
  15. package/{esm2020 → esm2022}/components/back-top/back-top.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/components/base/base.component.mjs +6 -5
  17. package/esm2022/components/base/embedding.component.mjs +64 -0
  18. package/{esm2020 → esm2022}/components/base/reactive.component.mjs +4 -4
  19. package/{esm2020 → esm2022}/components/breadcrumb/breadcrumb.component.mjs +4 -4
  20. package/esm2022/components/components.module.mjs +97 -0
  21. package/esm2022/components/error/404/pagenotfound.component.mjs +36 -0
  22. package/esm2022/components/error/500/servererror.component.mjs +47 -0
  23. package/esm2022/components/error/Angular/angularerror.component.mjs +62 -0
  24. package/esm2022/components/es-image-cropper/es-image-cropper.component.mjs +82 -0
  25. package/{esm2020 → esm2022}/components/es-modal/es-modal-head/es-modal-head.component.mjs +4 -4
  26. package/{esm2020 → esm2022}/components/es-modal/es-modal.component.mjs +4 -4
  27. package/esm2022/components/external-page/external_pages.component.mjs +48 -0
  28. package/{esm2020 → esm2022}/components/jace-login/jace-login.component.mjs +4 -4
  29. package/{esm2020 → esm2022}/components/jace-resource/jace-resource.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/components/labeled-span/labeled-span.component.mjs +4 -4
  31. package/{esm2020 → esm2022}/components/navbar/navbar.component.loc.mjs +4 -4
  32. package/esm2022/components/navbar/navbar.component.mjs +223 -0
  33. package/{esm2020 → esm2022}/components/page/pages.component.mjs +5 -5
  34. package/{esm2020 → esm2022}/components/redirecter/redirecter.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/components/sidebar/sidebar.component.loc.mjs +4 -4
  36. package/{esm2020 → esm2022}/components/sidebar/sidebar.component.mjs +5 -5
  37. package/{esm2020 → esm2022}/components/user_infos/user_infos.component.loc.mjs +4 -4
  38. package/esm2022/components/user_infos/user_infos.component.mjs +148 -0
  39. package/{esm2020 → esm2022}/directives/componentHost/componentHost.directive.mjs +4 -4
  40. package/{esm2020 → esm2022}/directives/directives.module.mjs +5 -5
  41. package/{esm2020 → esm2022}/directives/draggable/draggable.directive.mjs +4 -4
  42. package/{esm2020 → esm2022}/directives/es-modal/es-modal.directive.mjs +4 -4
  43. package/{esm2020 → esm2022}/directives/es-routerLink/es-routerLink.directive.mjs +4 -4
  44. package/{esm2020 → esm2022}/directives/slim-scroll/slim-scroll.directive.mjs +4 -4
  45. package/{esm2020 → esm2022}/directives/widget/widget.directive.mjs +4 -4
  46. package/{esm2020 → esm2022}/domain/models/core/ApplicationMenu.mjs +2 -2
  47. package/esm2022/domain/tokens.mjs +17 -0
  48. package/esm2022/lib/app.component.mjs +34 -0
  49. package/esm2022/lib/core.module.mjs +258 -0
  50. package/{esm2020 → esm2022}/modules/classes/_embedding.module.mjs +5 -5
  51. package/{esm2020 → esm2022}/modules/classes/_shared.module.mjs +11 -11
  52. package/{esm2020 → esm2022}/modules/classes/t_c.module.mjs +44 -44
  53. package/{esm2020 → esm2022}/pipes/classes/included_in.pipe.mjs +4 -4
  54. package/{esm2020 → esm2022}/pipes/classes/safe_html.pipe.mjs +4 -4
  55. package/{esm2020 → esm2022}/pipes/classes/safe_script.pipe.mjs +4 -4
  56. package/{esm2020 → esm2022}/pipes/classes/safe_style.pipe.mjs +4 -4
  57. package/{esm2020 → esm2022}/pipes/classes/safe_url.pipe.mjs +4 -4
  58. package/{esm2020 → esm2022}/pipes/pipes.module.mjs +5 -5
  59. package/esm2022/services/classes/app.accesstoken.mjs +1042 -0
  60. package/{esm2020 → esm2022}/services/classes/app.completedjobredirection.mjs +4 -4
  61. package/{esm2020 → esm2022}/services/classes/app.errorhandler.mjs +4 -4
  62. package/{esm2020 → esm2022}/services/classes/app.event.mjs +4 -4
  63. package/{esm2020 → esm2022}/services/classes/app.globalsearch.mjs +4 -4
  64. package/{esm2020 → esm2022}/services/classes/app.httpextensions.loc.mjs +4 -4
  65. package/{esm2020 → esm2022}/services/classes/app.httpextensions.mjs +6 -12
  66. package/{esm2020 → esm2022}/services/classes/app.menufilter.mjs +4 -4
  67. package/esm2022/services/classes/app.routeguard.mjs +23 -0
  68. package/esm2022/services/classes/app.session.mjs +40 -0
  69. package/esm2022/services/classes/app.state.mjs +229 -0
  70. package/{esm2020 → esm2022}/services/classes/preferences/app.cache.persistor.mjs +4 -4
  71. package/{esm2020 → esm2022}/services/classes/preferences/app.preference.persistor.mjs +4 -4
  72. package/esm2022/services/classes/preferences/user/app.userpreferences.base.mjs +101 -0
  73. package/{fesm2020 → fesm2022}/esfaenza-core-components.mjs +169 -149
  74. package/fesm2022/esfaenza-core-components.mjs.map +1 -0
  75. package/{fesm2020 → fesm2022}/esfaenza-core-directives.mjs +22 -22
  76. package/{fesm2015 → fesm2022}/esfaenza-core-directives.mjs.map +1 -1
  77. package/{fesm2020 → fesm2022}/esfaenza-core-domain.mjs +5 -3
  78. package/{fesm2020 → fesm2022}/esfaenza-core-domain.mjs.map +1 -1
  79. package/{fesm2020 → fesm2022}/esfaenza-core-modules.mjs +57 -57
  80. package/{fesm2020 → fesm2022}/esfaenza-core-modules.mjs.map +1 -1
  81. package/{fesm2015 → fesm2022}/esfaenza-core-pipes.mjs +19 -19
  82. package/{fesm2020 → fesm2022}/esfaenza-core-pipes.mjs.map +1 -1
  83. package/{fesm2020 → fesm2022}/esfaenza-core-services.mjs +83 -61
  84. package/fesm2022/esfaenza-core-services.mjs.map +1 -0
  85. package/fesm2022/esfaenza-core.mjs +287 -0
  86. package/fesm2022/esfaenza-core.mjs.map +1 -0
  87. package/lib/app.component.d.ts +1 -1
  88. package/lib/core.module.d.ts +1 -0
  89. package/package.json +117 -112
  90. package/services/classes/app.accesstoken.d.ts +3 -2
  91. package/services/classes/app.session.d.ts +2 -1
  92. package/services/classes/app.state.d.ts +2 -1
  93. package/theme/styles/_mat_datepicker_bugfix.scss +933 -0
  94. package/theme/styles/_material-override.scss +17 -7
  95. package/esm2020/components/base/embedding.component.mjs +0 -68
  96. package/esm2020/components/components.module.mjs +0 -94
  97. package/esm2020/components/error/404/pagenotfound.component.mjs +0 -30
  98. package/esm2020/components/error/500/servererror.component.mjs +0 -41
  99. package/esm2020/components/error/Angular/angularerror.component.mjs +0 -56
  100. package/esm2020/components/es-image-cropper/es-image-cropper.component.mjs +0 -83
  101. package/esm2020/components/external-page/external_pages.component.mjs +0 -48
  102. package/esm2020/components/navbar/navbar.component.mjs +0 -219
  103. package/esm2020/components/user_infos/user_infos.component.mjs +0 -146
  104. package/esm2020/domain/tokens.mjs +0 -15
  105. package/esm2020/lib/app.component.mjs +0 -30
  106. package/esm2020/lib/core.module.mjs +0 -241
  107. package/esm2020/services/classes/app.accesstoken.mjs +0 -1032
  108. package/esm2020/services/classes/app.routeguard.mjs +0 -22
  109. package/esm2020/services/classes/app.session.mjs +0 -32
  110. package/esm2020/services/classes/app.state.mjs +0 -219
  111. package/esm2020/services/classes/preferences/user/app.userpreferences.base.mjs +0 -98
  112. package/fesm2015/esfaenza-core-components.mjs +0 -1549
  113. package/fesm2015/esfaenza-core-components.mjs.map +0 -1
  114. package/fesm2015/esfaenza-core-directives.mjs +0 -300
  115. package/fesm2015/esfaenza-core-domain.mjs +0 -200
  116. package/fesm2015/esfaenza-core-domain.mjs.map +0 -1
  117. package/fesm2015/esfaenza-core-helpers.mjs.map +0 -1
  118. package/fesm2015/esfaenza-core-modules.mjs +0 -183
  119. package/fesm2015/esfaenza-core-modules.mjs.map +0 -1
  120. package/fesm2015/esfaenza-core-pipes.mjs.map +0 -1
  121. package/fesm2015/esfaenza-core-services.mjs +0 -1800
  122. package/fesm2015/esfaenza-core-services.mjs.map +0 -1
  123. package/fesm2015/esfaenza-core.mjs +0 -267
  124. package/fesm2015/esfaenza-core.mjs.map +0 -1
  125. package/fesm2020/esfaenza-core-components.mjs.map +0 -1
  126. package/fesm2020/esfaenza-core-directives.mjs.map +0 -1
  127. package/fesm2020/esfaenza-core-helpers.mjs +0 -44
  128. package/fesm2020/esfaenza-core-pipes.mjs +0 -112
  129. package/fesm2020/esfaenza-core-services.mjs.map +0 -1
  130. package/fesm2020/esfaenza-core.mjs +0 -267
  131. package/fesm2020/esfaenza-core.mjs.map +0 -1
  132. /package/{esm2020 → esm2022}/components/esfaenza-core-components.mjs +0 -0
  133. /package/{esm2020 → esm2022}/components/public-api.mjs +0 -0
  134. /package/{esm2020 → esm2022}/directives/esfaenza-core-directives.mjs +0 -0
  135. /package/{esm2020 → esm2022}/directives/public-api.mjs +0 -0
  136. /package/{esm2020 → esm2022}/domain/esfaenza-core-domain.mjs +0 -0
  137. /package/{esm2020 → esm2022}/domain/models/core/ApplicationJob.mjs +0 -0
  138. /package/{esm2020 → esm2022}/domain/models/core/ApplicationRoutes.mjs +0 -0
  139. /package/{esm2020 → esm2022}/domain/models/core/EnvOptions.mjs +0 -0
  140. /package/{esm2020 → esm2022}/domain/models/core/GenericItem.mjs +0 -0
  141. /package/{esm2020 → esm2022}/domain/models/core/KeyValue.mjs +0 -0
  142. /package/{esm2020 → esm2022}/domain/models/global_search/SaerchResultContainer.mjs +0 -0
  143. /package/{esm2020 → esm2022}/domain/models/global_search/SearchResult.mjs +0 -0
  144. /package/{esm2020 → esm2022}/domain/models/jace/AccountScope.mjs +0 -0
  145. /package/{esm2020 → esm2022}/domain/models/jace/ActiveModuleView.mjs +0 -0
  146. /package/{esm2020 → esm2022}/domain/models/jace/CategoriesWithModules.mjs +0 -0
  147. /package/{esm2020 → esm2022}/domain/models/jace/JaceAccount.mjs +0 -0
  148. /package/{esm2020 → esm2022}/domain/models/jace/JaceIdentity.mjs +0 -0
  149. /package/{esm2020 → esm2022}/domain/models/jace/JaceModule.mjs +0 -0
  150. /package/{esm2020 → esm2022}/domain/models/jace/JacePermission.mjs +0 -0
  151. /package/{esm2020 → esm2022}/domain/models/jace/JaceRole.mjs +0 -0
  152. /package/{esm2020 → esm2022}/domain/models/jace/JaceUser.mjs +0 -0
  153. /package/{esm2020 → esm2022}/domain/models/user/UpdateAccountRecoverySettingsDto.mjs +0 -0
  154. /package/{esm2020 → esm2022}/domain/models/user/UpdatePasswordDto.mjs +0 -0
  155. /package/{esm2020 → esm2022}/domain/models/user/UpdateProfilePictureDto.mjs +0 -0
  156. /package/{esm2020 → esm2022}/domain/models/user/UserAccount.mjs +0 -0
  157. /package/{esm2020 → esm2022}/domain/public-api.mjs +0 -0
  158. /package/{esm2020 → esm2022}/esfaenza-core.mjs +0 -0
  159. /package/{esm2020 → esm2022}/helpers/classes/ResizeListener.mjs +0 -0
  160. /package/{esm2020 → esm2022}/helpers/esfaenza-core-helpers.mjs +0 -0
  161. /package/{esm2020 → esm2022}/helpers/public-api.mjs +0 -0
  162. /package/{esm2020 → esm2022}/modules/classes/_base.module.mjs +0 -0
  163. /package/{esm2020 → esm2022}/modules/esfaenza-core-modules.mjs +0 -0
  164. /package/{esm2020 → esm2022}/modules/public-api.mjs +0 -0
  165. /package/{esm2020 → esm2022}/pipes/esfaenza-core-pipes.mjs +0 -0
  166. /package/{esm2020 → esm2022}/pipes/public-api.mjs +0 -0
  167. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  168. /package/{esm2020 → esm2022}/services/esfaenza-core-services.mjs +0 -0
  169. /package/{esm2020 → esm2022}/services/public-api.mjs +0 -0
  170. /package/{fesm2015 → fesm2022}/esfaenza-core-helpers.mjs +0 -0
  171. /package/{fesm2020 → fesm2022}/esfaenza-core-helpers.mjs.map +0 -0
@@ -1,146 +0,0 @@
1
- // Angular
2
- import { Component, ViewChild } from "@angular/core";
3
- import { NgFor, NgIf } from "@angular/common";
4
- import { FormsModule } from "@angular/forms";
5
- // Configurazioni
6
- import { ExtensionsModule } from "@esfaenza/extensions";
7
- import { LocalizationModule, LocalizationService } from "@esfaenza/localizations";
8
- // Classi
9
- import { UpdatePasswordDto } from "@esfaenza/core/domain";
10
- import { FormsAndValidationsModule } from "@esfaenza/forms-and-validations";
11
- import { BaseComponent } from "../base/base.component";
12
- import { UserInfoComponentLoc } from "./user_infos.component.loc";
13
- import { AccessControlModule } from "@esfaenza/access-control";
14
- import { MatTooltipModule } from "@angular/material/tooltip";
15
- import { EsModalComponent } from "../es-modal/es-modal.component";
16
- import { EsModalHeadComponent } from "../es-modal/es-modal-head/es-modal-head.component";
17
- import { LabeledSpanComponent } from "../labeled-span/labeled-span.component";
18
- import { EsImageCropperComponent } from "../public-api";
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@esfaenza/core/services";
21
- import * as i2 from "@esfaenza/extensions";
22
- import * as i3 from "@esfaenza/localizations";
23
- import * as i4 from "@angular/forms";
24
- import * as i5 from "@esfaenza/forms-and-validations";
25
- import * as i6 from "@esfaenza/access-control";
26
- import * as i7 from "@angular/material/tooltip";
27
- export class UserInfosComponent extends BaseComponent {
28
- constructor(inj, tks, msgExts, expExts, utiExts, lc, _state, profile) {
29
- super(inj);
30
- this.inj = inj;
31
- this.tks = tks;
32
- this.msgExts = msgExts;
33
- this.expExts = expExts;
34
- this.utiExts = utiExts;
35
- this.lc = lc;
36
- this._state = _state;
37
- this.profile = profile;
38
- this.UpdateProfilePictureDTO = null;
39
- this.UpdateRecoverySettingsDTO = null;
40
- this.UpdatePasswordDTO = null;
41
- }
42
- ngOnInit() {
43
- this.getAccountDetails();
44
- }
45
- async getAccountDetails() {
46
- // Recupero le informazioni Account partendo dalla identity
47
- let identity = this.tks.getJaceIdentity();
48
- this.AccountRoles = identity.Roles;
49
- this.AccountPermissions = identity.Permissions;
50
- this.AccountDetails = await this.profile.getAccountProfile();
51
- }
52
- onShowAccountRoles() {
53
- this.dlgShowAccountRoles.show();
54
- }
55
- onUpdateProfilePicture() {
56
- this.UpdateProfilePictureDTO = null;
57
- requestAnimationFrame(() => {
58
- this.UpdateProfilePictureDTO = { image: null };
59
- this.dlgUpdateProfilePicture.show();
60
- });
61
- }
62
- async doUpdateProfilePicture() {
63
- let res = await this.profile.doUpdateProfilePicture(new File([this.imageCropper.OutputImage], "profile.png"));
64
- this.msgExts.manageCallResultResponse(res, "Modifica eseguita con Successo", "Errori nella modifica", () => {
65
- this.dlgUpdateProfilePicture.hide();
66
- });
67
- }
68
- //#endregion
69
- //#region Delete Profile Picture
70
- onDeleteProfilePicture() {
71
- this.msgExts.simpleWarningWithChoice("Conferma eliminazione", "Si e' certi di voler rimuovere l'immagine profilo?", () => {
72
- this.doDeleteProfilePicture();
73
- });
74
- }
75
- async doDeleteProfilePicture() {
76
- let res = await this.profile.doDeleteProfilePicture();
77
- this.msgExts.manageCallResultResponse(res, "Immagine profilo rimossa con successo", "Errori nella rimozione della immagine profilo", () => {
78
- this.dlgUpdateProfilePicture.hide();
79
- });
80
- }
81
- onUpdateRecoverySettings() {
82
- this.UpdateRecoverySettingsDTO = null;
83
- requestAnimationFrame(() => {
84
- this.UpdateRecoverySettingsDTO = { email: this.AccountDetails.recoveryemail };
85
- this.dlgUpdateRecoverySettings.show();
86
- });
87
- }
88
- async doUpdateRecoverySettings() {
89
- let res = await this.profile.doUpdateRecoverySettings(this.UpdateRecoverySettingsDTO.email);
90
- this.msgExts.manageCallResultResponse(res, "Modifica eseguita con Successo", "Errori nella modifica", () => {
91
- this.getAccountDetails();
92
- this.dlgUpdateRecoverySettings.hide();
93
- });
94
- }
95
- onUpdatePassword() {
96
- this.UpdatePasswordDTO = null;
97
- requestAnimationFrame(() => {
98
- this.CustomError = "";
99
- this.UpdatePasswordDTO = new UpdatePasswordDto();
100
- this.dlgUpdatePassword.show();
101
- });
102
- }
103
- async doUpdatePassword() {
104
- if (this.UpdatePasswordDTO.newpwd != this.UpdatePasswordDTO.confirmpwd)
105
- this.CustomError = "Le password inserite non coincidono.";
106
- else {
107
- let res = await this.profile.doUpdatePassword(this.UpdatePasswordDTO.oldpwd, this.UpdatePasswordDTO.newpwd, this.UpdatePasswordDTO.confirmpwd);
108
- this.msgExts.manageCallResultResponse(res, "Password modificata con Successo", "Errori nella modifica della Password", () => { this.dlgUpdatePassword.hide(); });
109
- }
110
- }
111
- }
112
- UserInfosComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfosComponent, deps: [{ token: i0.Injector }, { token: i1.TokenService }, { token: i2.MessageService }, { token: i2.ExportService }, { token: i2.UtilityService }, { token: i3.LocalizationService }, { token: i1.AppState }, { token: i1.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component });
113
- UserInfosComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserInfosComponent, isStandalone: true, selector: "user-infos", viewQueries: [{ propertyName: "dlgShowAccountRoles", first: true, predicate: ["dlgShowAccountRoles"], descendants: true }, { propertyName: "dlgUpdateProfilePicture", first: true, predicate: ["dlgUpdateProfilePicture"], descendants: true }, { propertyName: "imageCropper", first: true, predicate: ["imageCropper"], descendants: true }, { propertyName: "dlgUpdateRecoverySettings", first: true, predicate: ["dlgUpdateRecoverySettings"], descendants: true }, { propertyName: "dlgUpdatePassword", first: true, predicate: ["dlgUpdatePassword"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"height: 100%; width: 100%; display: flex;\">\r\n <div style=\"margin: auto;\">\r\n <div class=\"user-img-container\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"user-img\" class=\"user-img\" />\r\n <div class=\"app-pointer user-img-btn\">\r\n <div class=\"app-opacity user-img-btn-body\" (click)=\"onUpdateProfilePicture();\">\r\n <i class=\"far fa-pen\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-15\" style=\"position: relative;\" *ngIf=\"AccountDetails\">\r\n <div class=\"card card-body app-no-margin app-padding-15\">\r\n <div class=\"row\">\r\n <div *ac=\"'R:Jace Admin'\" class=\"user-roles-btn\" [matTooltip]=\"'Visualizza Ruoli e Permessi'\" matTooltipPosition=\"above\" (click)=\"onShowAccountRoles();\">\r\n <i class=\"far fa-book-user\"></i>\r\n </div>\r\n <div class=\"col-md-6\"><labeled-span [Label]=\"'Utente' | localize : lc\" Display=\"Vertical\">{{AccountDetails.username}}</labeled-span></div>\r\n <div class=\"col-md-6\"><labeled-span [Label]=\"'Tenant' | localize : lc\" Display=\"Vertical\">{{AccountDetails.tenantid}}</labeled-span></div>\r\n <div class=\"col-md-6 app-margin-top-10\"><labeled-span [Label]=\"'Nome' | localize : lc\" Display=\"Vertical\">{{AccountDetails.firstname}}</labeled-span></div>\r\n <div class=\"col-md-6 app-margin-top-10\"><labeled-span [Label]=\"'Cognome' | localize : lc\" Display=\"Vertical\">{{AccountDetails.lastname}}</labeled-span> </div>\r\n <div class=\"col-md-12 app-margin-top-10\"><labeled-span [Label]=\"'Email' | localize : lc\" Display=\"Vertical\">{{AccountDetails.recoveryemail || 'Non disponibile'}}</labeled-span></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-10 row\">\r\n <div class=\"col-md-6\" style=\"padding-right: 5px;\">\r\n <button type=\"button\" style=\"width: 100%;\" class=\"btn btn-primary\" (click)=\"onUpdatePassword()\">Modifica Password</button>\r\n </div>\r\n <div class=\"col-md-6\" style=\"padding-left: 5px;\">\r\n <button type=\"button\" style=\"width: 100%;\" class=\"btn btn-primary\" (click)=\"onUpdateRecoverySettings()\">Modifica Email</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--Update Password-->\r\n<es-modal #dlgUpdatePassword [Size]=\"'L'\">\r\n <es-modal-head (Close)=\"dlgUpdatePassword.hide();\">\r\n <h5 class=\"modal-title pull-left\">Modifica Password</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdatePasswordDTO\" #formUpdatePassword=\"ngForm\" (ngSubmit)=\"formUpdatePassword.valid && doUpdatePassword()\">\r\n <div class=\"modal-body lastfix\">\r\n <form-input [Password]=\"true\" [Label]=\"'Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.oldpwd\" name=\"oldpw\" required></form-input>\r\n <form-input [Password]=\"true\" [Label]=\"'Nuova Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.newpwd\" name=\"newpw\" required></form-input>\r\n <form-input [Password]=\"true\" [Label]=\"'Conferma Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.confirmpwd\" name=\"confpw\" required></form-input>\r\n <!--Validazione Custom-->\r\n <div *ngIf=\"CustomError\" class=\"app-white-text app-margin-top-15 app-margin-bottom-0 card app-padding-10 card-danger\">\r\n <strong>{{'Error' | localize : lc}}:&nbsp;</strong>{{CustomError}}\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdatePassword.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">Conferma</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Update Extra Info-->\r\n<es-modal #dlgUpdateRecoverySettings [Size]=\"'L'\">\r\n <es-modal-head (Close)=\"dlgUpdateRecoverySettings.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Modifica Email' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdateRecoverySettingsDTO\" #formUpdateInfos=\"ngForm\" (ngSubmit)=\"formUpdateInfos.valid && doUpdateRecoverySettings()\">\r\n <div class=\"modal-body lastfix\">\r\n <form-input [LabelInputRatio]=\"'3 9'\" [Label]=\"'Email' | localize: lc\" [(ngModel)]=\"UpdateRecoverySettingsDTO.email\" name=\"email\"></form-input>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdateRecoverySettings.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">Conferma</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Upload Picture-->\r\n<es-modal #dlgUpdateProfilePicture [Size]=\"'XL'\">\r\n <es-modal-head (Close)=\"dlgUpdateProfilePicture.hide();\">\r\n <h5 class=\"modal-title pull-left\">Carica immagine</h5>\r\n </es-modal-head>\r\n <div class=\"modal-body d-flex\">\r\n <div style=\"margin: auto;\">\r\n <es-image-cropper #imageCropper [Height]=\"600\" [Width]=\"800\"></es-image-cropper>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"dlgUpdateProfilePicture.hide()\">Annulla</button>\r\n <button type=\"submit\" class=\"btn btn-primary\" (click)=\"doUpdateProfilePicture()\">Conferma</button>\r\n </div>\r\n</es-modal>\r\n\r\n<!--Ruoli e Permessi-->\r\n<es-modal #dlgShowAccountRoles [Size]=\"'L'\">\r\n <es-modal-head (Close)=\"dlgShowAccountRoles.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Ruoli e Permessi' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <div class=\"modal-body\" style=\"max-height: 600px; overflow-y: auto;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngIf=\"AccountRoles\">\r\n <labeled-span [Label]=\"'Ruoli'\" Display=\"Vertical\">\r\n <div *ngFor=\"let r of AccountRoles;\">{{r}}</div>\r\n </labeled-span>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"AccountPermissions\">\r\n <labeled-span [Label]=\"'Permessi'\" Display=\"Vertical\">\r\n <div *ngFor=\"let p of AccountPermissions;\">{{p}}</div>\r\n </labeled-span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"dlgShowAccountRoles.hide();\">{{'Chiudi' | localize : lc}}</button>\r\n </div>\r\n</es-modal>", styles: [".app-wideplus{width:100%;text-align:center;border:1px solid #ccc;border-radius:5px;padding:5px}.btn-outline-main-modified{color:#242d3a;border-color:#242d3a;background:transparent}.btn-outline-main-modified:hover{color:#fff;background:#242D3A;border-color:#242d3a}.user-img-container{position:relative;width:200px;margin:auto}.user-img{object-fit:cover;max-height:200px;min-height:200px;min-width:200px;max-width:200px;border-radius:50%;box-shadow:0 8px 6px #1313130a,0 12px 16px #1313130d}.user-img-btn{position:absolute;right:0;width:40px;height:40px;margin-top:-50px}.user-img-btn-body{background-color:#0056b3;color:#fff;border-radius:50%;text-align:center;height:100%;font-size:1.2rem;line-height:2.5rem}.user-roles-btn{position:absolute;top:0;right:2px;font-size:1.2rem;padding:5px;z-index:1;color:#0056b3;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsAndValidationsModule }, { kind: "component", type: i5.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i3.LocalizePipe, name: "localize" }, { kind: "component", type: EsModalComponent, selector: "es-modal", inputs: ["Size", "IgnoreBackdrop", "Backdrop", "HasOverlap"], outputs: ["onShow", "onHide"] }, { kind: "component", type: EsModalHeadComponent, selector: "es-modal-head", outputs: ["Close"] }, { kind: "component", type: EsImageCropperComponent, selector: "es-image-cropper", inputs: ["Height", "Width"] }, { kind: "component", type: LabeledSpanComponent, selector: "labeled-span", inputs: ["First", "Label", "Display"] }, { kind: "ngmodule", type: ExtensionsModule }, { kind: "ngmodule", type: AccessControlModule }, { kind: "directive", type: i6.AccessControlDirective, selector: "[ac]", inputs: ["ac", "acAbsolute"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], viewProviders: [{ provide: LocalizationService, useClass: UserInfoComponentLoc }] });
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfosComponent, decorators: [{
115
- type: Component,
116
- args: [{ selector: "user-infos", viewProviders: [{ provide: LocalizationService, useClass: UserInfoComponentLoc }], standalone: true, imports: [
117
- FormsModule,
118
- FormsAndValidationsModule,
119
- NgIf,
120
- NgFor,
121
- LocalizationModule,
122
- EsModalComponent,
123
- EsModalHeadComponent,
124
- EsImageCropperComponent,
125
- LabeledSpanComponent,
126
- ExtensionsModule,
127
- AccessControlModule,
128
- MatTooltipModule
129
- ], template: "<div style=\"height: 100%; width: 100%; display: flex;\">\r\n <div style=\"margin: auto;\">\r\n <div class=\"user-img-container\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"user-img\" class=\"user-img\" />\r\n <div class=\"app-pointer user-img-btn\">\r\n <div class=\"app-opacity user-img-btn-body\" (click)=\"onUpdateProfilePicture();\">\r\n <i class=\"far fa-pen\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-15\" style=\"position: relative;\" *ngIf=\"AccountDetails\">\r\n <div class=\"card card-body app-no-margin app-padding-15\">\r\n <div class=\"row\">\r\n <div *ac=\"'R:Jace Admin'\" class=\"user-roles-btn\" [matTooltip]=\"'Visualizza Ruoli e Permessi'\" matTooltipPosition=\"above\" (click)=\"onShowAccountRoles();\">\r\n <i class=\"far fa-book-user\"></i>\r\n </div>\r\n <div class=\"col-md-6\"><labeled-span [Label]=\"'Utente' | localize : lc\" Display=\"Vertical\">{{AccountDetails.username}}</labeled-span></div>\r\n <div class=\"col-md-6\"><labeled-span [Label]=\"'Tenant' | localize : lc\" Display=\"Vertical\">{{AccountDetails.tenantid}}</labeled-span></div>\r\n <div class=\"col-md-6 app-margin-top-10\"><labeled-span [Label]=\"'Nome' | localize : lc\" Display=\"Vertical\">{{AccountDetails.firstname}}</labeled-span></div>\r\n <div class=\"col-md-6 app-margin-top-10\"><labeled-span [Label]=\"'Cognome' | localize : lc\" Display=\"Vertical\">{{AccountDetails.lastname}}</labeled-span> </div>\r\n <div class=\"col-md-12 app-margin-top-10\"><labeled-span [Label]=\"'Email' | localize : lc\" Display=\"Vertical\">{{AccountDetails.recoveryemail || 'Non disponibile'}}</labeled-span></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-10 row\">\r\n <div class=\"col-md-6\" style=\"padding-right: 5px;\">\r\n <button type=\"button\" style=\"width: 100%;\" class=\"btn btn-primary\" (click)=\"onUpdatePassword()\">Modifica Password</button>\r\n </div>\r\n <div class=\"col-md-6\" style=\"padding-left: 5px;\">\r\n <button type=\"button\" style=\"width: 100%;\" class=\"btn btn-primary\" (click)=\"onUpdateRecoverySettings()\">Modifica Email</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--Update Password-->\r\n<es-modal #dlgUpdatePassword [Size]=\"'L'\">\r\n <es-modal-head (Close)=\"dlgUpdatePassword.hide();\">\r\n <h5 class=\"modal-title pull-left\">Modifica Password</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdatePasswordDTO\" #formUpdatePassword=\"ngForm\" (ngSubmit)=\"formUpdatePassword.valid && doUpdatePassword()\">\r\n <div class=\"modal-body lastfix\">\r\n <form-input [Password]=\"true\" [Label]=\"'Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.oldpwd\" name=\"oldpw\" required></form-input>\r\n <form-input [Password]=\"true\" [Label]=\"'Nuova Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.newpwd\" name=\"newpw\" required></form-input>\r\n <form-input [Password]=\"true\" [Label]=\"'Conferma Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.confirmpwd\" name=\"confpw\" required></form-input>\r\n <!--Validazione Custom-->\r\n <div *ngIf=\"CustomError\" class=\"app-white-text app-margin-top-15 app-margin-bottom-0 card app-padding-10 card-danger\">\r\n <strong>{{'Error' | localize : lc}}:&nbsp;</strong>{{CustomError}}\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdatePassword.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">Conferma</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Update Extra Info-->\r\n<es-modal #dlgUpdateRecoverySettings [Size]=\"'L'\">\r\n <es-modal-head (Close)=\"dlgUpdateRecoverySettings.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Modifica Email' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdateRecoverySettingsDTO\" #formUpdateInfos=\"ngForm\" (ngSubmit)=\"formUpdateInfos.valid && doUpdateRecoverySettings()\">\r\n <div class=\"modal-body lastfix\">\r\n <form-input [LabelInputRatio]=\"'3 9'\" [Label]=\"'Email' | localize: lc\" [(ngModel)]=\"UpdateRecoverySettingsDTO.email\" name=\"email\"></form-input>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdateRecoverySettings.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">Conferma</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Upload Picture-->\r\n<es-modal #dlgUpdateProfilePicture [Size]=\"'XL'\">\r\n <es-modal-head (Close)=\"dlgUpdateProfilePicture.hide();\">\r\n <h5 class=\"modal-title pull-left\">Carica immagine</h5>\r\n </es-modal-head>\r\n <div class=\"modal-body d-flex\">\r\n <div style=\"margin: auto;\">\r\n <es-image-cropper #imageCropper [Height]=\"600\" [Width]=\"800\"></es-image-cropper>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"dlgUpdateProfilePicture.hide()\">Annulla</button>\r\n <button type=\"submit\" class=\"btn btn-primary\" (click)=\"doUpdateProfilePicture()\">Conferma</button>\r\n </div>\r\n</es-modal>\r\n\r\n<!--Ruoli e Permessi-->\r\n<es-modal #dlgShowAccountRoles [Size]=\"'L'\">\r\n <es-modal-head (Close)=\"dlgShowAccountRoles.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Ruoli e Permessi' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <div class=\"modal-body\" style=\"max-height: 600px; overflow-y: auto;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngIf=\"AccountRoles\">\r\n <labeled-span [Label]=\"'Ruoli'\" Display=\"Vertical\">\r\n <div *ngFor=\"let r of AccountRoles;\">{{r}}</div>\r\n </labeled-span>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"AccountPermissions\">\r\n <labeled-span [Label]=\"'Permessi'\" Display=\"Vertical\">\r\n <div *ngFor=\"let p of AccountPermissions;\">{{p}}</div>\r\n </labeled-span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"dlgShowAccountRoles.hide();\">{{'Chiudi' | localize : lc}}</button>\r\n </div>\r\n</es-modal>", styles: [".app-wideplus{width:100%;text-align:center;border:1px solid #ccc;border-radius:5px;padding:5px}.btn-outline-main-modified{color:#242d3a;border-color:#242d3a;background:transparent}.btn-outline-main-modified:hover{color:#fff;background:#242D3A;border-color:#242d3a}.user-img-container{position:relative;width:200px;margin:auto}.user-img{object-fit:cover;max-height:200px;min-height:200px;min-width:200px;max-width:200px;border-radius:50%;box-shadow:0 8px 6px #1313130a,0 12px 16px #1313130d}.user-img-btn{position:absolute;right:0;width:40px;height:40px;margin-top:-50px}.user-img-btn-body{background-color:#0056b3;color:#fff;border-radius:50%;text-align:center;height:100%;font-size:1.2rem;line-height:2.5rem}.user-roles-btn{position:absolute;top:0;right:2px;font-size:1.2rem;padding:5px;z-index:1;color:#0056b3;cursor:pointer}\n"] }]
130
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.TokenService }, { type: i2.MessageService }, { type: i2.ExportService }, { type: i2.UtilityService }, { type: i3.LocalizationService }, { type: i1.AppState }, { type: i1.UserPreferencesService }]; }, propDecorators: { dlgShowAccountRoles: [{
131
- type: ViewChild,
132
- args: ["dlgShowAccountRoles"]
133
- }], dlgUpdateProfilePicture: [{
134
- type: ViewChild,
135
- args: ["dlgUpdateProfilePicture"]
136
- }], imageCropper: [{
137
- type: ViewChild,
138
- args: ['imageCropper']
139
- }], dlgUpdateRecoverySettings: [{
140
- type: ViewChild,
141
- args: ["dlgUpdateRecoverySettings"]
142
- }], dlgUpdatePassword: [{
143
- type: ViewChild,
144
- args: ["dlgUpdatePassword"]
145
- }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcl9pbmZvcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3VzZXJfaW5mb3MvdXNlcl9pbmZvcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3VzZXJfaW5mb3MvdXNlcl9pbmZvcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFNBQVMsRUFBWSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQWtDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEYsU0FBUztBQUNULE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBVyx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUl0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FB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QUF1Qjt3QkFDdkIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3FCQUNuQjs4U0EwQmlDLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBUU0sdUJBQXVCO3NCQUE1RCxTQUFTO3VCQUFDLHlCQUF5QjtnQkFDVCxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBbUNlLHlCQUF5QjtzQkFBaEUsU0FBUzt1QkFBQywyQkFBMkI7Z0JBcUJOLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSwgRXh0ZW5zaW9uc01vZHVsZSwgTWVzc2FnZVNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbk1vZHVsZSwgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gQ2xhc3NpXHJcbmltcG9ydCB7IFVwZGF0ZVBhc3N3b3JkRHRvLCBVc2VyQWNjb3VudCB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIjtcclxuaW1wb3J0IHsgQXBwRmlsZSwgRm9ybXNBbmRWYWxpZGF0aW9uc01vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvZm9ybXMtYW5kLXZhbGlkYXRpb25zXCI7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tIFwiLi4vYmFzZS9iYXNlLmNvbXBvbmVudFwiXHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQXBwU3RhdGUsIFRva2VuU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBVc2VySW5mb0NvbXBvbmVudExvYyB9IGZyb20gXCIuL3VzZXJfaW5mb3MuY29tcG9uZW50LmxvY1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sTW9kdWxlIH0gZnJvbSBcIkBlc2ZhZW56YS9hY2Nlc3MtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcclxuaW1wb3J0IHsgRXNNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuLi9lcy1tb2RhbC9lcy1tb2RhbC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRXNNb2RhbEhlYWRDb21wb25lbnQgfSBmcm9tIFwiLi4vZXMtbW9kYWwvZXMtbW9kYWwtaGVhZC9lcy1tb2RhbC1oZWFkLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBMYWJlbGVkU3BhbkNvbXBvbmVudCB9IGZyb20gXCIuLi9sYWJlbGVkLXNwYW4vbGFiZWxlZC1zcGFuLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBFc0ltYWdlQ3JvcHBlckNvbXBvbmVudCB9IGZyb20gXCIuLi9wdWJsaWMtYXBpXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInVzZXItaW5mb3NcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInVzZXJfaW5mb3MuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi91c2VyX2luZm9zLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IFVzZXJJbmZvQ29tcG9uZW50TG9jIH1dLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBGb3Jtc01vZHVsZSwgXHJcbiAgICAgICAgRm9ybXNBbmRWYWxpZGF0aW9uc01vZHVsZSwgXHJcbiAgICAgICAgTmdJZixcclxuICAgICAgICBOZ0ZvcixcclxuICAgICAgICBMb2NhbGl6YXRpb25Nb2R1bGUsIFxyXG4gICAgICAgIEVzTW9kYWxDb21wb25lbnQsIFxyXG4gICAgICAgIEVzTW9kYWxIZWFkQ29tcG9uZW50LFxyXG4gICAgICAgIEVzSW1hZ2VDcm9wcGVyQ29tcG9uZW50LCBcclxuICAgICAgICBMYWJlbGVkU3BhbkNvbXBvbmVudCxcclxuICAgICAgICBFeHRlbnNpb25zTW9kdWxlLFxyXG4gICAgICAgIEFjY2Vzc0NvbnRyb2xNb2R1bGUsXHJcbiAgICAgICAgTWF0VG9vbHRpcE1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlckluZm9zQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgQWNjb3VudERldGFpbHM6IFVzZXJBY2NvdW50O1xyXG4gICAgcHVibGljIEFjY291bnRSb2xlczogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgQWNjb3VudFBlcm1pc3Npb25zOiBzdHJpbmdbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluajogSW5qZWN0b3IsIHByaXZhdGUgdGtzOiBUb2tlblNlcnZpY2UsIHB1YmxpYyBtc2dFeHRzOiBNZXNzYWdlU2VydmljZSwgcHVibGljIGV4cEV4dHM6IEV4cG9ydFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHB1YmxpYyBsYzogTG9jYWxpemF0aW9uU2VydmljZSwgcHVibGljIF9zdGF0ZTogQXBwU3RhdGUsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcHJvZmlsZTogVXNlclByZWZlcmVuY2VzU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKGluaik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBY2NvdW50RGV0YWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRBY2NvdW50RGV0YWlscygpIHtcclxuICAgICAgICAvLyBSZWN1cGVybyBsZSBpbmZvcm1hemlvbmkgQWNjb3VudCBwYXJ0ZW5kbyBkYWxsYSBpZGVudGl0eVxyXG4gICAgICAgIGxldCBpZGVudGl0eSA9IHRoaXMudGtzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgIHRoaXMuQWNjb3VudFJvbGVzID0gaWRlbnRpdHkuUm9sZXM7XHJcbiAgICAgICAgdGhpcy5BY2NvdW50UGVybWlzc2lvbnMgPSBpZGVudGl0eS5QZXJtaXNzaW9ucztcclxuICAgICAgICB0aGlzLkFjY291bnREZXRhaWxzID0gYXdhaXQgdGhpcy5wcm9maWxlLmdldEFjY291bnRQcm9maWxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8jcmVnaW9uIFNob3cgUm9sZXMgYW5kIFBlcm1pc3Npb25zXHJcbiAgICBAVmlld0NoaWxkKFwiZGxnU2hvd0FjY291bnRSb2xlc1wiKSBkbGdTaG93QWNjb3VudFJvbGVzOiBFc01vZGFsQ29tcG9uZW50O1xyXG5cclxuICAgIG9uU2hvd0FjY291bnRSb2xlcygpIHtcclxuICAgICAgICB0aGlzLmRsZ1Nob3dBY2NvdW50Um9sZXMuc2hvdygpO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIFVwZGF0ZSBQcm9maWxlIFBpY3R1cmVcclxuICAgIEBWaWV3Q2hpbGQoXCJkbGdVcGRhdGVQcm9maWxlUGljdHVyZVwiKSBkbGdVcGRhdGVQcm9maWxlUGljdHVyZTogRXNNb2RhbENvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2ltYWdlQ3JvcHBlcicpIGltYWdlQ3JvcHBlcjogRXNJbWFnZUNyb3BwZXJDb21wb25lbnQ7XHJcbiAgICBwdWJsaWMgVXBkYXRlUHJvZmlsZVBpY3R1cmVEVE86IHsgaW1hZ2U6IEFwcEZpbGUgfSA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIG9uVXBkYXRlUHJvZmlsZVBpY3R1cmUoKSB7XHJcbiAgICAgICAgdGhpcy5VcGRhdGVQcm9maWxlUGljdHVyZURUTyA9IG51bGw7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5VcGRhdGVQcm9maWxlUGljdHVyZURUTyA9IHsgaW1hZ2U6IG51bGwgfTtcclxuICAgICAgICAgICAgdGhpcy5kbGdVcGRhdGVQcm9maWxlUGljdHVyZS5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGRvVXBkYXRlUHJvZmlsZVBpY3R1cmUoKSB7XHJcbiAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMucHJvZmlsZS5kb1VwZGF0ZVByb2ZpbGVQaWN0dXJlKG5ldyBGaWxlKFt0aGlzLmltYWdlQ3JvcHBlci5PdXRwdXRJbWFnZV0sIFwicHJvZmlsZS5wbmdcIikpO1xyXG4gICAgICAgIHRoaXMubXNnRXh0cy5tYW5hZ2VDYWxsUmVzdWx0UmVzcG9uc2UocmVzLCBcIk1vZGlmaWNhIGVzZWd1aXRhIGNvbiBTdWNjZXNzb1wiLCBcIkVycm9yaSBuZWxsYSBtb2RpZmljYVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGxnVXBkYXRlUHJvZmlsZVBpY3R1cmUuaGlkZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIERlbGV0ZSBQcm9maWxlIFBpY3R1cmVcclxuICAgIHB1YmxpYyBvbkRlbGV0ZVByb2ZpbGVQaWN0dXJlKCkge1xyXG4gICAgICAgIHRoaXMubXNnRXh0cy5zaW1wbGVXYXJuaW5nV2l0aENob2ljZShcIkNvbmZlcm1hIGVsaW1pbmF6aW9uZVwiLCBcIlNpIGUnIGNlcnRpIGRpIHZvbGVyIHJpbXVvdmVyZSBsJ2ltbWFnaW5lIHByb2ZpbG8/XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb0RlbGV0ZVByb2ZpbGVQaWN0dXJlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGRvRGVsZXRlUHJvZmlsZVBpY3R1cmUoKSB7XHJcbiAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMucHJvZmlsZS5kb0RlbGV0ZVByb2ZpbGVQaWN0dXJlKCk7XHJcbiAgICAgICAgdGhpcy5tc2dFeHRzLm1hbmFnZUNhbGxSZXN1bHRSZXNwb25zZShyZXMsIFwiSW1tYWdpbmUgcHJvZmlsbyByaW1vc3NhIGNvbiBzdWNjZXNzb1wiLCBcIkVycm9yaSBuZWxsYSByaW1vemlvbmUgZGVsbGEgaW1tYWdpbmUgcHJvZmlsb1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGxnVXBkYXRlUHJvZmlsZVBpY3R1cmUuaGlkZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIFVwZGF0ZSBSZWNvdmVyeSBJbmZvXHJcbiAgICBAVmlld0NoaWxkKFwiZGxnVXBkYXRlUmVjb3ZlcnlTZXR0aW5nc1wiKSBkbGdVcGRhdGVSZWNvdmVyeVNldHRpbmdzOiBFc01vZGFsQ29tcG9uZW50O1xyXG4gICAgcHVibGljIFVwZGF0ZVJlY292ZXJ5U2V0dGluZ3NEVE86IHsgZW1haWw6IHN0cmluZyB9ID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgb25VcGRhdGVSZWNvdmVyeVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMuVXBkYXRlUmVjb3ZlcnlTZXR0aW5nc0RUTyA9IG51bGw7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5VcGRhdGVSZWNvdmVyeVNldHRpbmdzRFRPID0geyBlbWFpbDogdGhpcy5BY2NvdW50RGV0YWlscy5yZWNvdmVyeWVtYWlsIH07XHJcbiAgICAgICAgICAgIHRoaXMuZGxnVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncy5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGRvVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncygpIHtcclxuICAgICAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5wcm9maWxlLmRvVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncyh0aGlzLlVwZGF0ZVJlY292ZXJ5U2V0dGluZ3NEVE8uZW1haWwpO1xyXG4gICAgICAgIHRoaXMubXNnRXh0cy5tYW5hZ2VDYWxsUmVzdWx0UmVzcG9uc2UocmVzLCBcIk1vZGlmaWNhIGVzZWd1aXRhIGNvbiBTdWNjZXNzb1wiLCBcIkVycm9yaSBuZWxsYSBtb2RpZmljYVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWNjb3VudERldGFpbHMoKTtcclxuICAgICAgICAgICAgdGhpcy5kbGdVcGRhdGVSZWNvdmVyeVNldHRpbmdzLmhpZGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBVcGRhdGUgUGFzc3dvcmRcclxuICAgIEBWaWV3Q2hpbGQoXCJkbGdVcGRhdGVQYXNzd29yZFwiKSBkbGdVcGRhdGVQYXNzd29yZDogRXNNb2RhbENvbXBvbmVudDtcclxuICAgIHB1YmxpYyBVcGRhdGVQYXNzd29yZERUTzogVXBkYXRlUGFzc3dvcmREdG8gPSBudWxsO1xyXG4gICAgQ3VzdG9tRXJyb3I6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgb25VcGRhdGVQYXNzd29yZCgpIHtcclxuICAgICAgICB0aGlzLlVwZGF0ZVBhc3N3b3JkRFRPID0gbnVsbDtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLkN1c3RvbUVycm9yID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5VcGRhdGVQYXNzd29yZERUTyA9IG5ldyBVcGRhdGVQYXNzd29yZER0bygpO1xyXG4gICAgICAgICAgICB0aGlzLmRsZ1VwZGF0ZVBhc3N3b3JkLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9VcGRhdGVQYXNzd29yZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5VcGRhdGVQYXNzd29yZERUTy5uZXdwd2QgIT0gdGhpcy5VcGRhdGVQYXNzd29yZERUTy5jb25maXJtcHdkKVxyXG4gICAgICAgICAgICB0aGlzLkN1c3RvbUVycm9yID0gXCJMZSBwYXNzd29yZCBpbnNlcml0ZSBub24gY29pbmNpZG9uby5cIjtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMucHJvZmlsZS5kb1VwZGF0ZVBhc3N3b3JkKHRoaXMuVXBkYXRlUGFzc3dvcmREVE8ub2xkcHdkLCB0aGlzLlVwZGF0ZVBhc3N3b3JkRFRPLm5ld3B3ZCwgdGhpcy5VcGRhdGVQYXNzd29yZERUTy5jb25maXJtcHdkKTtcclxuICAgICAgICAgICAgdGhpcy5tc2dFeHRzLm1hbmFnZUNhbGxSZXN1bHRSZXNwb25zZShyZXMsIFwiUGFzc3dvcmQgbW9kaWZpY2F0YSBjb24gU3VjY2Vzc29cIiwgXCJFcnJvcmkgbmVsbGEgbW9kaWZpY2EgZGVsbGEgUGFzc3dvcmRcIixcclxuICAgICAgICAgICAgICAgICgpID0+IHsgdGhpcy5kbGdVcGRhdGVQYXNzd29yZC5oaWRlKCk7IH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxufSIsIjxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogYXV0bztcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1pbWctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJwcm9maWxlLlByb2ZpbGVQaWN0dXJlXCIgYWx0PVwidXNlci1pbWdcIiBjbGFzcz1cInVzZXItaW1nXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1wb2ludGVyIHVzZXItaW1nLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1vcGFjaXR5IHVzZXItaW1nLWJ0bi1ib2R5XCIgKGNsaWNrKT1cIm9uVXBkYXRlUHJvZmlsZVBpY3R1cmUoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1wZW5cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1tYXJnaW4tdG9wLTE1XCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIgKm5nSWY9XCJBY2NvdW50RGV0YWlsc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHkgYXBwLW5vLW1hcmdpbiBhcHAtcGFkZGluZy0xNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKmFjPVwiJ1I6SmFjZSBBZG1pbidcIiBjbGFzcz1cInVzZXItcm9sZXMtYnRuXCIgW21hdFRvb2x0aXBdPVwiJ1Zpc3VhbGl6emEgUnVvbGkgZSBQZXJtZXNzaSdcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJvblNob3dBY2NvdW50Um9sZXMoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtYm9vay11c2VyXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPjxsYWJlbGVkLXNwYW4gW0xhYmVsXT1cIidVdGVudGUnIHwgbG9jYWxpemUgOiBsY1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPnt7QWNjb3VudERldGFpbHMudXNlcm5hbWV9fTwvbGFiZWxlZC1zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPjxsYWJlbGVkLXNwYW4gW0xhYmVsXT1cIidUZW5hbnQnIHwgbG9jYWxpemUgOiBsY1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPnt7QWNjb3VudERldGFpbHMudGVuYW50aWR9fTwvbGFiZWxlZC1zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBhcHAtbWFyZ2luLXRvcC0xMFwiPjxsYWJlbGVkLXNwYW4gW0xhYmVsXT1cIidOb21lJyB8IGxvY2FsaXplIDogbGNcIiBEaXNwbGF5PVwiVmVydGljYWxcIj57e0FjY291bnREZXRhaWxzLmZpcnN0bmFtZX19PC9sYWJlbGVkLXNwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGFwcC1tYXJnaW4tdG9wLTEwXCI+PGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ0NvZ25vbWUnIHwgbG9jYWxpemUgOiBsY1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPnt7QWNjb3VudERldGFpbHMubGFzdG5hbWV9fTwvbGFiZWxlZC1zcGFuPiA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGFwcC1tYXJnaW4tdG9wLTEwXCI+PGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ0VtYWlsJyB8IGxvY2FsaXplIDogbGNcIiBEaXNwbGF5PVwiVmVydGljYWxcIj57e0FjY291bnREZXRhaWxzLnJlY292ZXJ5ZW1haWwgfHwgJ05vbiBkaXNwb25pYmlsZSd9fTwvbGFiZWxlZC1zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtbWFyZ2luLXRvcC0xMCByb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uVXBkYXRlUGFzc3dvcmQoKVwiPk1vZGlmaWNhIFBhc3N3b3JkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJvblVwZGF0ZVJlY292ZXJ5U2V0dGluZ3MoKVwiPk1vZGlmaWNhIEVtYWlsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLVVwZGF0ZSBQYXNzd29yZC0tPlxyXG48ZXMtbW9kYWwgI2RsZ1VwZGF0ZVBhc3N3b3JkIFtTaXplXT1cIidMJ1wiPlxyXG4gICAgPGVzLW1vZGFsLWhlYWQgKENsb3NlKT1cImRsZ1VwZGF0ZVBhc3N3b3JkLmhpZGUoKTtcIj5cclxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZSBwdWxsLWxlZnRcIj5Nb2RpZmljYSBQYXNzd29yZDwvaDU+XHJcbiAgICA8L2VzLW1vZGFsLWhlYWQ+XHJcbiAgICA8Zm9ybSAqbmdJZj1cIlVwZGF0ZVBhc3N3b3JkRFRPXCIgI2Zvcm1VcGRhdGVQYXNzd29yZD1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJmb3JtVXBkYXRlUGFzc3dvcmQudmFsaWQgJiYgZG9VcGRhdGVQYXNzd29yZCgpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbGFzdGZpeFwiPlxyXG4gICAgICAgICAgICA8Zm9ybS1pbnB1dCBbUGFzc3dvcmRdPVwidHJ1ZVwiIFtMYWJlbF09XCInUGFzc3dvcmQnIHwgbG9jYWxpemU6IGxjXCIgWyhuZ01vZGVsKV09XCJVcGRhdGVQYXNzd29yZERUTy5vbGRwd2RcIiBuYW1lPVwib2xkcHdcIiByZXF1aXJlZD48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgICAgIDxmb3JtLWlucHV0IFtQYXNzd29yZF09XCJ0cnVlXCIgW0xhYmVsXT1cIidOdW92YSBQYXNzd29yZCcgfCBsb2NhbGl6ZTogbGNcIiBbKG5nTW9kZWwpXT1cIlVwZGF0ZVBhc3N3b3JkRFRPLm5ld3B3ZFwiIG5hbWU9XCJuZXdwd1wiIHJlcXVpcmVkPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICAgICAgPGZvcm0taW5wdXQgW1Bhc3N3b3JkXT1cInRydWVcIiBbTGFiZWxdPVwiJ0NvbmZlcm1hIFBhc3N3b3JkJyB8IGxvY2FsaXplOiBsY1wiIFsobmdNb2RlbCldPVwiVXBkYXRlUGFzc3dvcmREVE8uY29uZmlybXB3ZFwiIG5hbWU9XCJjb25mcHdcIiByZXF1aXJlZD48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgICAgIDwhLS1WYWxpZGF6aW9uZSBDdXN0b20tLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIkN1c3RvbUVycm9yXCIgY2xhc3M9XCJhcHAtd2hpdGUtdGV4dCBhcHAtbWFyZ2luLXRvcC0xNSBhcHAtbWFyZ2luLWJvdHRvbS0wIGNhcmQgYXBwLXBhZGRpbmctMTAgY2FyZC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3snRXJyb3InIHwgbG9jYWxpemUgOiBsY319OiZuYnNwOzwvc3Ryb25nPnt7Q3VzdG9tRXJyb3J9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYXBwLW1hcmdpbi1yaWdodC0xMFwiIChjbGljayk9XCJkbGdVcGRhdGVQYXNzd29yZC5oaWRlKCk7XCI+e3snQ2FuY2VsJyB8IGxvY2FsaXplIDogbGN9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPkNvbmZlcm1hPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbjwvZXMtbW9kYWw+XHJcblxyXG48IS0tVXBkYXRlIEV4dHJhIEluZm8tLT5cclxuPGVzLW1vZGFsICNkbGdVcGRhdGVSZWNvdmVyeVNldHRpbmdzIFtTaXplXT1cIidMJ1wiPlxyXG4gICAgPGVzLW1vZGFsLWhlYWQgKENsb3NlKT1cImRsZ1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MuaGlkZSgpO1wiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiPnt7J01vZGlmaWNhIEVtYWlsJyB8IGxvY2FsaXplIDogbGN9fTwvaDU+XHJcbiAgICA8L2VzLW1vZGFsLWhlYWQ+XHJcbiAgICA8Zm9ybSAqbmdJZj1cIlVwZGF0ZVJlY292ZXJ5U2V0dGluZ3NEVE9cIiAjZm9ybVVwZGF0ZUluZm9zPVwibmdGb3JtXCIgKG5nU3VibWl0KT1cImZvcm1VcGRhdGVJbmZvcy52YWxpZCAmJiBkb1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IGxhc3RmaXhcIj5cclxuICAgICAgICAgICAgPGZvcm0taW5wdXQgW0xhYmVsSW5wdXRSYXRpb109XCInMyA5J1wiIFtMYWJlbF09XCInRW1haWwnIHwgbG9jYWxpemU6IGxjXCIgWyhuZ01vZGVsKV09XCJVcGRhdGVSZWNvdmVyeVNldHRpbmdzRFRPLmVtYWlsXCIgbmFtZT1cImVtYWlsXCI+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBhcHAtbWFyZ2luLXJpZ2h0LTEwXCIgKGNsaWNrKT1cImRsZ1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MuaGlkZSgpO1wiPnt7J0NhbmNlbCcgfCBsb2NhbGl6ZSA6IGxjfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5Db25mZXJtYTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG48L2VzLW1vZGFsPlxyXG5cclxuPCEtLVVwbG9hZCBQaWN0dXJlLS0+XHJcbjxlcy1tb2RhbCAjZGxnVXBkYXRlUHJvZmlsZVBpY3R1cmUgW1NpemVdPVwiJ1hMJ1wiPlxyXG4gICAgPGVzLW1vZGFsLWhlYWQgKENsb3NlKT1cImRsZ1VwZGF0ZVByb2ZpbGVQaWN0dXJlLmhpZGUoKTtcIj5cclxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZSBwdWxsLWxlZnRcIj5DYXJpY2EgaW1tYWdpbmU8L2g1PlxyXG4gICAgPC9lcy1tb2RhbC1oZWFkPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgZC1mbGV4XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogYXV0bztcIj5cclxuICAgICAgICAgICAgPGVzLWltYWdlLWNyb3BwZXIgI2ltYWdlQ3JvcHBlciBbSGVpZ2h0XT1cIjYwMFwiIFtXaWR0aF09XCI4MDBcIj48L2VzLWltYWdlLWNyb3BwZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImRsZ1VwZGF0ZVByb2ZpbGVQaWN0dXJlLmhpZGUoKVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJkb1VwZGF0ZVByb2ZpbGVQaWN0dXJlKClcIj5Db25mZXJtYTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZXMtbW9kYWw+XHJcblxyXG48IS0tUnVvbGkgZSBQZXJtZXNzaS0tPlxyXG48ZXMtbW9kYWwgI2RsZ1Nob3dBY2NvdW50Um9sZXMgW1NpemVdPVwiJ0wnXCI+XHJcbiAgICA8ZXMtbW9kYWwtaGVhZCAoQ2xvc2UpPVwiZGxnU2hvd0FjY291bnRSb2xlcy5oaWRlKCk7XCI+XHJcbiAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+e3snUnVvbGkgZSBQZXJtZXNzaScgfCBsb2NhbGl6ZSA6IGxjfX08L2g1PlxyXG4gICAgPC9lcy1tb2RhbC1oZWFkPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDYwMHB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJBY2NvdW50Um9sZXNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbGVkLXNwYW4gW0xhYmVsXT1cIidSdW9saSdcIiBEaXNwbGF5PVwiVmVydGljYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByIG9mIEFjY291bnRSb2xlcztcIj57e3J9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbGVkLXNwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIkFjY291bnRQZXJtaXNzaW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ1Blcm1lc3NpJ1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHAgb2YgQWNjb3VudFBlcm1pc3Npb25zO1wiPnt7cH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsZWQtc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImRsZ1Nob3dBY2NvdW50Um9sZXMuaGlkZSgpO1wiPnt7J0NoaXVkaScgfCBsb2NhbGl6ZSA6IGxjfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2VzLW1vZGFsPiJdfQ==
@@ -1,15 +0,0 @@
1
- // Angular
2
- import { InjectionToken } from "@angular/core";
3
- /** Token che indica i default da assegnare agli Input */
4
- export const REDIRECT_MAP = new InjectionToken('REDIRECT_MAP');
5
- /** Token che indica il servizio di localizzazione utilizzato per i menù */
6
- export const MENU_LOCALIZATION = new InjectionToken('MENU_LOCALIZATION');
7
- /** Token che indica i menù dell'applicazione, da quello vegano fino a quello celiaco */
8
- export const MENU = new InjectionToken('MENU');
9
- /** Token che indica se il servizio di autenticazione deve utilizzare un token finto */
10
- export const USE_FAKE_ACCESS_TOKEN = new InjectionToken('USE_FAKE_ACCESS_TOKEN');
11
- /** Token che indica i componenti di estensione da aggiungere alla navbar. Verranno bootstrappati in maniera dinamica */
12
- export const NAVBAR_EXTENSIONS = new InjectionToken('NAVBAR_EXTENSIONS');
13
- /** Token che identifica se utilizzare la versione vecchia dell'url di auth (${myconfig.AUTH_URL}/login/form?client=${myconfig.CLIENT_NAME}) invece che la nuova (${myconfig.AUTH_URL}/login;client=${myconfig.CLIENT_NAME}) */
14
- export const LOGIN_URL_LEGACY = new InjectionToken('LOGIN_URL_LEGACY');
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9kb21haW4vc3JjL3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQVFyRCx5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEyRSxJQUFJLGNBQWMsQ0FBeUQsY0FBYyxDQUFDLENBQUM7QUFFL0wsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUE4QyxJQUFJLGNBQWMsQ0FBNEIsbUJBQW1CLENBQUMsQ0FBQztBQUUvSSx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFzQyxJQUFJLGNBQWMsQ0FBb0IsTUFBTSxDQUFDLENBQUM7QUFFckcsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUE0QixJQUFJLGNBQWMsQ0FBVSx1QkFBdUIsQ0FBQyxDQUFDO0FBRW5ILHdIQUF3SDtBQUN4SCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBZ0MsSUFBSSxjQUFjLENBQWMsbUJBQW1CLENBQUMsQ0FBQztBQUVuSCwrTkFBK047QUFDL04sTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTRCLElBQUksY0FBYyxDQUFVLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbk1lbnUgfSBmcm9tIFwiLi9tb2RlbHMvY29yZS9BcHBsaWNhdGlvbk1lbnVcIjtcclxuXHJcbi8qKiBUb2tlbiBjaGUgaW5kaWNhIGkgZGVmYXVsdCBkYSBhc3NlZ25hcmUgYWdsaSBJbnB1dCAqL1xyXG5leHBvcnQgY29uc3QgUkVESVJFQ1RfTUFQOiBJbmplY3Rpb25Ub2tlbjx7IFtpbmRleDogc3RyaW5nXTogeyB1cmw6IHN0cmluZywgcGFyYW1zOiBzdHJpbmdbXSB9IH0+ID0gbmV3IEluamVjdGlvblRva2VuPHsgW2luZGV4OiBzdHJpbmddOiB7IHVybDogc3RyaW5nLCBwYXJhbXM6IHN0cmluZ1tdIH0gfT4oJ1JFRElSRUNUX01BUCcpO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpbmRpY2EgaWwgc2Vydml6aW8gZGkgbG9jYWxpenphemlvbmUgdXRpbGl6emF0byBwZXIgaSBtZW7DuSAqL1xyXG5leHBvcnQgY29uc3QgTUVOVV9MT0NBTElaQVRJT046IEluamVjdGlvblRva2VuPFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT4+ID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT4+KCdNRU5VX0xPQ0FMSVpBVElPTicpO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpbmRpY2EgaSBtZW7DuSBkZWxsJ2FwcGxpY2F6aW9uZSwgZGEgcXVlbGxvIHZlZ2FubyBmaW5vIGEgcXVlbGxvIGNlbGlhY28gKi9cclxuZXhwb3J0IGNvbnN0IE1FTlU6IEluamVjdGlvblRva2VuPEFwcGxpY2F0aW9uTWVudVtdPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcHBsaWNhdGlvbk1lbnVbXT4oJ01FTlUnKTtcclxuXHJcbi8qKiBUb2tlbiBjaGUgaW5kaWNhIHNlIGlsIHNlcnZpemlvIGRpIGF1dGVudGljYXppb25lIGRldmUgdXRpbGl6emFyZSB1biB0b2tlbiBmaW50byAqL1xyXG5leHBvcnQgY29uc3QgVVNFX0ZBS0VfQUNDRVNTX1RPS0VOOiBJbmplY3Rpb25Ub2tlbjxib29sZWFuPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignVVNFX0ZBS0VfQUNDRVNTX1RPS0VOJyk7XHJcblxyXG4vKiogVG9rZW4gY2hlIGluZGljYSBpIGNvbXBvbmVudGkgZGkgZXN0ZW5zaW9uZSBkYSBhZ2dpdW5nZXJlIGFsbGEgbmF2YmFyLiBWZXJyYW5ubyBib290c3RyYXBwYXRpIGluIG1hbmllcmEgZGluYW1pY2EgKi9cclxuZXhwb3J0IGNvbnN0IE5BVkJBUl9FWFRFTlNJT05TOiBJbmplY3Rpb25Ub2tlbjxUeXBlPGFueT5bXT4gPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTxhbnk+W10+KCdOQVZCQVJfRVhURU5TSU9OUycpO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpZGVudGlmaWNhIHNlIHV0aWxpenphcmUgbGEgdmVyc2lvbmUgdmVjY2hpYSBkZWxsJ3VybCBkaSBhdXRoICgke215Y29uZmlnLkFVVEhfVVJMfS9sb2dpbi9mb3JtP2NsaWVudD0ke215Y29uZmlnLkNMSUVOVF9OQU1FfSkgaW52ZWNlIGNoZSBsYSBudW92YSAoJHtteWNvbmZpZy5BVVRIX1VSTH0vbG9naW47Y2xpZW50PSR7bXljb25maWcuQ0xJRU5UX05BTUV9KSAqL1xyXG5leHBvcnQgY29uc3QgTE9HSU5fVVJMX0xFR0FDWTogSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ0xPR0lOX1VSTF9MRUdBQ1knKTsiXX0=