desy-angular 9.1.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/esm2022/lib/desy-buttons/components/button/button.component.mjs +3 -3
  2. package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +3 -3
  3. package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +3 -3
  4. package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +3 -3
  5. package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +3 -3
  6. package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +5 -3
  7. package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +5 -3
  8. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +3 -3
  9. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +4 -5
  10. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +3 -3
  11. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +3 -3
  12. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +6 -6
  13. package/esm2022/lib/desy-nav/components/header/header.component.mjs +1 -1
  14. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.mjs +14 -0
  15. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +38 -0
  16. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.mjs +33 -0
  17. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +38 -0
  18. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.mjs +14 -0
  19. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +38 -0
  20. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.mjs +19 -0
  21. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.mjs +34 -0
  22. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +53 -0
  23. package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +31 -0
  24. package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +4 -6
  25. package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +4 -7
  26. package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +31 -29
  27. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +9 -21
  28. package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +8 -8
  29. package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +1 -1
  30. package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +6 -7
  31. package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +3 -3
  32. package/esm2022/lib/desy-nav/desy-nav.module.mjs +94 -39
  33. package/esm2022/lib/desy-nav/directives/dynamic-heading.directive.mjs +40 -0
  34. package/esm2022/lib/desy-nav/interfaces/header-advanced-logo.mjs +7 -0
  35. package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +47 -5
  36. package/esm2022/lib/desy-tables/components/table/components/table-footer.component.mjs +18 -0
  37. package/esm2022/lib/desy-tables/components/table/table.component.mjs +26 -6
  38. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.mjs +23 -0
  39. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.mjs +27 -0
  40. package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +14 -5
  41. package/esm2022/lib/desy-tables/desy-tables.module.mjs +29 -14
  42. package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +4 -9
  43. package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +3 -3
  44. package/esm2022/lib/desy-views/components/card/card.component.mjs +3 -3
  45. package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +3 -3
  46. package/esm2022/public-api.mjs +94 -79
  47. package/fesm2022/desy-angular.mjs +3247 -2786
  48. package/fesm2022/desy-angular.mjs.map +1 -1
  49. package/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.d.ts +2 -1
  50. package/lib/desy-nav/components/footer/footer.component.d.ts +2 -1
  51. package/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.d.ts +2 -2
  52. package/lib/desy-nav/components/header/header-navigation/header-navigation.component.d.ts +2 -2
  53. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.d.ts +1 -1
  54. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.d.ts +1 -1
  55. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +2 -2
  56. package/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.d.ts +5 -0
  57. package/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.d.ts +14 -0
  58. package/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.d.ts +14 -0
  59. package/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.d.ts +17 -0
  60. package/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.d.ts +6 -0
  61. package/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.d.ts +17 -0
  62. package/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.d.ts +8 -0
  63. package/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.d.ts +15 -0
  64. package/lib/desy-nav/components/header-advanced/header-advanced.component.d.ts +16 -0
  65. package/lib/desy-nav/components/header-mini/header-mini.component.d.ts +12 -0
  66. package/lib/desy-nav/components/menu-navigation/menu-navigation.component.d.ts +4 -2
  67. package/lib/desy-nav/components/menubar/menubar.component.d.ts +4 -4
  68. package/lib/desy-nav/components/nav/nav-item/nav-item.component.d.ts +1 -1
  69. package/lib/desy-nav/components/nav/nav.component.d.ts +2 -1
  70. package/lib/desy-nav/desy-nav.module.d.ts +40 -29
  71. package/lib/desy-nav/directives/dynamic-heading.directive.d.ts +15 -0
  72. package/lib/desy-nav/interfaces/header-advanced-logo.d.ts +5 -0
  73. package/lib/desy-pagination/components/pagination/pagination.component.d.ts +14 -2
  74. package/lib/desy-tables/components/table/components/table-footer.component.d.ts +8 -0
  75. package/lib/desy-tables/components/table/table.component.d.ts +7 -3
  76. package/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.d.ts +11 -0
  77. package/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.d.ts +11 -0
  78. package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +10 -6
  79. package/lib/desy-tables/desy-tables.module.d.ts +19 -16
  80. package/package.json +2 -2
  81. package/public-api.d.ts +93 -78
@@ -1,9 +1,9 @@
1
- import { Component, Input, ContentChildren, QueryList } from '@angular/core';
2
- import { AccessibilityComponent } from '../../../shared/components';
3
1
  import { animate, state, style, transition, trigger } from '@angular/animations';
2
+ import { Component, ContentChildren, Input, QueryList } from '@angular/core';
3
+ import { AccessibilityComponent } from '../../../shared/components';
4
4
  import { StringUtils } from '../../../shared/utils/string-utils';
5
- import { MenuVerticalItemComponent } from './menu-vertical-item/menu-vertical-item.component';
6
5
  import { MenuVerticalItemSubComponent } from './menu-vertical-item-sub/menu-vertical-item-sub.component';
6
+ import { MenuVerticalItemComponent } from './menu-vertical-item/menu-vertical-item.component';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/common";
9
9
  import * as i2 from "@angular/router";
@@ -12,14 +12,7 @@ import * as i4 from "../../../shared/pipes/make-html-list.pipe";
12
12
  import * as i5 from "../../../shared/pipes/external-href.pipe";
13
13
  export class MenuVerticalComponent extends AccessibilityComponent {
14
14
  getItemHtml(item) {
15
- let itemHtml;
16
- if (item.active) {
17
- itemHtml = item.html ? `<strong>${item.html}</strong>` : `<strong>${StringUtils.escapeHtml(item.text)}</strong>`;
18
- }
19
- else {
20
- itemHtml = item.html;
21
- }
22
- return itemHtml;
15
+ return item.html ? item.html : StringUtils.escapeHtml(item.text);
23
16
  }
24
17
  getId(item, i) {
25
18
  if (item.id) {
@@ -27,12 +20,7 @@ export class MenuVerticalComponent extends AccessibilityComponent {
27
20
  }
28
21
  else {
29
22
  const idPrefix = this.idPrefix ? this.idPrefix : 'nav-item';
30
- if (i === 0) {
31
- return idPrefix + '-0';
32
- }
33
- else {
34
- return idPrefix + '-' + i;
35
- }
23
+ return idPrefix + '-' + ++i;
36
24
  }
37
25
  }
38
26
  getSubItemId(item, itemIndex, subItemIndex) {
@@ -46,7 +34,7 @@ export class MenuVerticalComponent extends AccessibilityComponent {
46
34
  }
47
35
  else {
48
36
  const itemId = this.getId(item, itemIndex);
49
- subItemId = subItemIndex === 0 ? `sub-${itemId}` : `sub-${itemId}-${subItemIndex}`;
37
+ subItemId = `sub-${itemId}-${++subItemIndex}`;
50
38
  }
51
39
  }
52
40
  return subItemId;
@@ -63,7 +51,7 @@ export class MenuVerticalComponent extends AccessibilityComponent {
63
51
  return subItems && subItems.length > 0 ? subItems : null;
64
52
  }
65
53
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MenuVerticalComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MenuVerticalComponent, selector: "desy-menu-vertical", inputs: { id: "id", idPrefix: "idPrefix", items: "items", hasUnderline: "hasUnderline", classes: "classes" }, queries: [{ propertyName: "itemComponents", predicate: MenuVerticalItemComponent }], usesInheritance: true, ngImport: i0, template: "<!--\n Template para ser utilizado tanto por los items como por los subitems:\n - item: Item que representa\n - index: indice del item en la lista\n - id: identificador del item\n - isRoot: si pertenece al nivel raiz\n-->\n<ng-template #itemTemplate let-item=\"item\" let-index=\"index\" let-id=\"id\" let-sub=\"sub\" let-isRoot=\"isRoot\">\n <ng-container *ngIf=\"item\">\n <li class=\"m-base\" [ngClass]=\"{'origin-top-left text-sm': !isRoot}\">\n <ng-container *ngIf=\"item.href || item.routerLink; else notHref\">\n <a *ngIf=\"item.href; else hasRouterLink\" [attr.id]=\"id\"\n [href]=\"item.href | externalHref\"\n [class]=\"['block px-xs focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'underline': hasUnderline,\n 'hover:text-primary-base hover:underline': !item.disabled,\n 'no-underline pointer-events-none': item.disabled,\n 'font-bold': item.active\n }\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </a>\n <ng-template #hasRouterLink>\n <!-- Todos los enlaces que admiten o href o routerLink estar\u00EDa bien unificarlos (en todos los componentes).\n Para ello, ser\u00EDa necesario crear una directiva para a\u00F1adir o quitar la directiva routerLink si no tiene href.\n Sin embargo, esto no es posible actualmente, ya que Angular todav\u00EDa no permite a\u00F1adir directivas din\u00E1micamente:\n https://angular.io/guide/roadmap#support-adding-directives-to-host-elements -->\n <a [attr.id]=\"id\"\n [routerLink]=\"item.routerLink\" [fragment]=\"item.fragment ? item.fragment : null\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [class]=\"['block px-xs focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'underline': hasUnderline,\n 'hover:text-primary-base hover:underline': !item.disabled,\n 'no-underline pointer-events-none': item.disabled,\n 'font-bold': item.active\n }\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </a>\n </ng-template>\n </ng-container>\n <ng-template #notHref>\n <span [attr.id]=\"id\"\n [class]=\"['block px-xs', item.classes] | makeHtmlList\"\n [ngClass]=\"{'font-bold': item.active}\"\n\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </span>\n </ng-template>\n <ng-container *ngIf=\"isRoot && sub\">\n <ul *ngIf=\"getSubItems(sub)\" [ngClass]=\"sub.classes\"\n [attr.aria-describedby]=\"sub.ariaDescribedBy\"\n [attr.aria-errormessage]=\"sub.ariaErrorMessage\"\n [attr.aria-label]=\"sub.ariaLabel\"\n [attr.aria-labelledby]=\"sub.ariaLabelledBy\"\n [attr.aria-hidden]=\"sub.ariaHidden\"\n [attr.aria-disabled]=\"sub.ariaDisabled\"\n [attr.aria-controls]=\"sub.ariaControls\"\n [attr.aria-current]=\"sub.ariaCurrent\"\n [attr.aria-live]=\"sub.ariaLive\"\n [attr.aria-expanded]=\"sub.ariaExpanded\"\n [attr.aria-haspopup]=\"sub.ariaHasPopup\"\n [attr.tabindex]=\"sub.tabindex\">\n <ng-container *ngFor=\"let subItem of getSubItems(sub); index as subIndex\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: subItem,\n id: getSubItemId(item, index, subIndex),\n index: subIndex,\n isRoot: false\n }\">\n </ng-container>\n </ng-container>\n </ul>\n <div *ngIf=\"!getSubItems(sub)\"\n [class]=\"['mb-base px-xs origin-top-left text-sm text-neutral-dark', sub.classes] | makeHtmlList\"\n [id]=\"'sub-' + id\">\n <ng-container *desyCustomInnerContent=\"{ component: sub, html: sub.html }\"></ng-container>\n </div>\n </ng-container>\n </li>\n <li *ngIf=\"item.divider\" class=\"my-sm border-b border-neutral-base\" aria-hidden=\"true\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n</ng-template>\n\n<nav [ngClass]=\"classes\"\n [attr.role]=\"(role ? role : null)\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n [attr.aria-errormessage]=\"ariaErrorMessage\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-disabled]=\"ariaDisabled\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-current]=\"ariaCurrent\"\n [attr.aria-live]=\"ariaLive\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup\"\n [attr.tabindex]=\"tabindex\">\n <ul class=\"text-base\">\n <ng-container *ngFor=\"let item of getItems(); index as index\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, id: getId(item, index), index: index, sub: getItemSub(item), isRoot: true }\">\n </ng-container>\n </ng-container>\n </ul>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "pipe", type: i4.MakeHtmlListPipe, name: "makeHtmlList" }, { kind: "pipe", type: i5.ExternalHrefPipe, name: "externalHref" }], animations: [
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MenuVerticalComponent, selector: "desy-menu-vertical", inputs: { id: "id", idPrefix: "idPrefix", items: "items", hasUnderline: "hasUnderline", classes: "classes" }, queries: [{ propertyName: "itemComponents", predicate: MenuVerticalItemComponent }], usesInheritance: true, ngImport: i0, template: "<!--\n Template para ser utilizado tanto por los items como por los subitems:\n - item: Item que representa\n - index: indice del item en la lista\n - id: identificador del item\n - isRoot: si pertenece al nivel raiz\n-->\n<ng-template #itemTemplate let-item=\"item\" let-index=\"index\" let-id=\"id\" let-sub=\"sub\" let-isRoot=\"isRoot\">\n <ng-template #noActiveTemplate><ng-container *desyCustomInnerContent=\"{component: item, html: getItemHtml(item), text: item.text }\"></ng-container></ng-template>\n <ng-container *ngIf=\"item\">\n <li class=\"m-base\" [ngClass]=\"{'origin-top-left text-sm': !isRoot}\">\n <ng-container *ngIf=\"item.href || item.routerLink; else notHref\">\n <a *ngIf=\"item.href; else hasRouterLink\" [attr.id]=\"id\"\n [href]=\"item.href | externalHref\"\n [class]=\"['block px-xs focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'underline': hasUnderline,\n 'hover:text-primary-base hover:underline': !item.disabled,\n 'no-underline pointer-events-none': item.disabled\n }\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *ngIf=\"item.active; else noActiveTemplate\">\n <strong class=\"font-bold\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </strong>\n </ng-container>\n </a>\n <ng-template #hasRouterLink>\n <!-- Todos los enlaces que admiten o href o routerLink estar\u00EDa bien unificarlos (en todos los componentes).\n Para ello, ser\u00EDa necesario crear una directiva para a\u00F1adir o quitar la directiva routerLink si no tiene href.\n Sin embargo, esto no es posible actualmente, ya que Angular todav\u00EDa no permite a\u00F1adir directivas din\u00E1micamente:\n https://angular.io/guide/roadmap#support-adding-directives-to-host-elements -->\n <a [attr.id]=\"id\"\n [routerLink]=\"item.routerLink\" [fragment]=\"item.fragment ? item.fragment : null\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [class]=\"['block px-xs focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'underline': hasUnderline,\n 'hover:text-primary-base hover:underline': !item.disabled,\n 'no-underline pointer-events-none': item.disabled\n }\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *ngIf=\"item.active; else noActiveTemplate\">\n <strong class=\"font-bold\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </strong>\n </ng-container>\n </a>\n </ng-template>\n </ng-container>\n <ng-template #notHref>\n <span [attr.id]=\"id\"\n [class]=\"['block px-xs', item.classes] | makeHtmlList\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *ngIf=\"item.active; else noActiveTemplate\">\n <strong class=\"font-bold\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </strong>\n </ng-container>\n </span>\n </ng-template>\n <ng-container *ngIf=\"isRoot && sub\">\n <ul *ngIf=\"getSubItems(sub)\" [ngClass]=\"sub.classes\"\n [attr.aria-describedby]=\"sub.ariaDescribedBy\"\n [attr.aria-errormessage]=\"sub.ariaErrorMessage\"\n [attr.aria-label]=\"sub.ariaLabel\"\n [attr.aria-labelledby]=\"sub.ariaLabelledBy\"\n [attr.aria-hidden]=\"sub.ariaHidden\"\n [attr.aria-disabled]=\"sub.ariaDisabled\"\n [attr.aria-controls]=\"sub.ariaControls\"\n [attr.aria-current]=\"sub.ariaCurrent\"\n [attr.aria-live]=\"sub.ariaLive\"\n [attr.aria-expanded]=\"sub.ariaExpanded\"\n [attr.aria-haspopup]=\"sub.ariaHasPopup\"\n [attr.tabindex]=\"sub.tabindex\">\n <ng-container *ngFor=\"let subItem of getSubItems(sub); index as subIndex\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: subItem,\n id: getSubItemId(item, index, subIndex),\n index: subIndex,\n isRoot: false\n }\">\n </ng-container>\n </ng-container>\n </ul>\n <div *ngIf=\"!getSubItems(sub)\"\n [class]=\"['mb-base px-xs origin-top-left text-sm text-neutral-dark', sub.classes] | makeHtmlList\"\n [id]=\"'sub-' + id\">\n <ng-container *desyCustomInnerContent=\"{ component: sub, html: sub.html }\"></ng-container>\n </div>\n </ng-container>\n </li>\n <li *ngIf=\"item.divider\" class=\"my-sm border-b border-neutral-base\" aria-hidden=\"true\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n</ng-template>\n\n<nav [ngClass]=\"classes\"\n [attr.role]=\"(role ? role : null)\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n [attr.aria-errormessage]=\"ariaErrorMessage\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-disabled]=\"ariaDisabled\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-current]=\"ariaCurrent\"\n [attr.aria-live]=\"ariaLive\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup\"\n [attr.tabindex]=\"tabindex\">\n <ul class=\"text-base\">\n <ng-container *ngFor=\"let item of getItems(); index as index\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, id: getId(item, index), index: index, sub: getItemSub(item), isRoot: true }\">\n </ng-container>\n </ng-container>\n </ul>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "pipe", type: i4.MakeHtmlListPipe, name: "makeHtmlList" }, { kind: "pipe", type: i5.ExternalHrefPipe, name: "externalHref" }], animations: [
67
55
  trigger('displayMenuVertical', [
68
56
  state('void', style({
69
57
  opacity: '0.0',
@@ -95,7 +83,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
95
83
  animate('100ms ease-out')
96
84
  ])
97
85
  ])
98
- ], template: "<!--\n Template para ser utilizado tanto por los items como por los subitems:\n - item: Item que representa\n - index: indice del item en la lista\n - id: identificador del item\n - isRoot: si pertenece al nivel raiz\n-->\n<ng-template #itemTemplate let-item=\"item\" let-index=\"index\" let-id=\"id\" let-sub=\"sub\" let-isRoot=\"isRoot\">\n <ng-container *ngIf=\"item\">\n <li class=\"m-base\" [ngClass]=\"{'origin-top-left text-sm': !isRoot}\">\n <ng-container *ngIf=\"item.href || item.routerLink; else notHref\">\n <a *ngIf=\"item.href; else hasRouterLink\" [attr.id]=\"id\"\n [href]=\"item.href | externalHref\"\n [class]=\"['block px-xs focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'underline': hasUnderline,\n 'hover:text-primary-base hover:underline': !item.disabled,\n 'no-underline pointer-events-none': item.disabled,\n 'font-bold': item.active\n }\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </a>\n <ng-template #hasRouterLink>\n <!-- Todos los enlaces que admiten o href o routerLink estar\u00EDa bien unificarlos (en todos los componentes).\n Para ello, ser\u00EDa necesario crear una directiva para a\u00F1adir o quitar la directiva routerLink si no tiene href.\n Sin embargo, esto no es posible actualmente, ya que Angular todav\u00EDa no permite a\u00F1adir directivas din\u00E1micamente:\n https://angular.io/guide/roadmap#support-adding-directives-to-host-elements -->\n <a [attr.id]=\"id\"\n [routerLink]=\"item.routerLink\" [fragment]=\"item.fragment ? item.fragment : null\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [class]=\"['block px-xs focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'underline': hasUnderline,\n 'hover:text-primary-base hover:underline': !item.disabled,\n 'no-underline pointer-events-none': item.disabled,\n 'font-bold': item.active\n }\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </a>\n </ng-template>\n </ng-container>\n <ng-template #notHref>\n <span [attr.id]=\"id\"\n [class]=\"['block px-xs', item.classes] | makeHtmlList\"\n [ngClass]=\"{'font-bold': item.active}\"\n\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </span>\n </ng-template>\n <ng-container *ngIf=\"isRoot && sub\">\n <ul *ngIf=\"getSubItems(sub)\" [ngClass]=\"sub.classes\"\n [attr.aria-describedby]=\"sub.ariaDescribedBy\"\n [attr.aria-errormessage]=\"sub.ariaErrorMessage\"\n [attr.aria-label]=\"sub.ariaLabel\"\n [attr.aria-labelledby]=\"sub.ariaLabelledBy\"\n [attr.aria-hidden]=\"sub.ariaHidden\"\n [attr.aria-disabled]=\"sub.ariaDisabled\"\n [attr.aria-controls]=\"sub.ariaControls\"\n [attr.aria-current]=\"sub.ariaCurrent\"\n [attr.aria-live]=\"sub.ariaLive\"\n [attr.aria-expanded]=\"sub.ariaExpanded\"\n [attr.aria-haspopup]=\"sub.ariaHasPopup\"\n [attr.tabindex]=\"sub.tabindex\">\n <ng-container *ngFor=\"let subItem of getSubItems(sub); index as subIndex\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: subItem,\n id: getSubItemId(item, index, subIndex),\n index: subIndex,\n isRoot: false\n }\">\n </ng-container>\n </ng-container>\n </ul>\n <div *ngIf=\"!getSubItems(sub)\"\n [class]=\"['mb-base px-xs origin-top-left text-sm text-neutral-dark', sub.classes] | makeHtmlList\"\n [id]=\"'sub-' + id\">\n <ng-container *desyCustomInnerContent=\"{ component: sub, html: sub.html }\"></ng-container>\n </div>\n </ng-container>\n </li>\n <li *ngIf=\"item.divider\" class=\"my-sm border-b border-neutral-base\" aria-hidden=\"true\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n</ng-template>\n\n<nav [ngClass]=\"classes\"\n [attr.role]=\"(role ? role : null)\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n [attr.aria-errormessage]=\"ariaErrorMessage\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-disabled]=\"ariaDisabled\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-current]=\"ariaCurrent\"\n [attr.aria-live]=\"ariaLive\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup\"\n [attr.tabindex]=\"tabindex\">\n <ul class=\"text-base\">\n <ng-container *ngFor=\"let item of getItems(); index as index\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, id: getId(item, index), index: index, sub: getItemSub(item), isRoot: true }\">\n </ng-container>\n </ng-container>\n </ul>\n</nav>\n" }]
86
+ ], template: "<!--\n Template para ser utilizado tanto por los items como por los subitems:\n - item: Item que representa\n - index: indice del item en la lista\n - id: identificador del item\n - isRoot: si pertenece al nivel raiz\n-->\n<ng-template #itemTemplate let-item=\"item\" let-index=\"index\" let-id=\"id\" let-sub=\"sub\" let-isRoot=\"isRoot\">\n <ng-template #noActiveTemplate><ng-container *desyCustomInnerContent=\"{component: item, html: getItemHtml(item), text: item.text }\"></ng-container></ng-template>\n <ng-container *ngIf=\"item\">\n <li class=\"m-base\" [ngClass]=\"{'origin-top-left text-sm': !isRoot}\">\n <ng-container *ngIf=\"item.href || item.routerLink; else notHref\">\n <a *ngIf=\"item.href; else hasRouterLink\" [attr.id]=\"id\"\n [href]=\"item.href | externalHref\"\n [class]=\"['block px-xs focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'underline': hasUnderline,\n 'hover:text-primary-base hover:underline': !item.disabled,\n 'no-underline pointer-events-none': item.disabled\n }\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *ngIf=\"item.active; else noActiveTemplate\">\n <strong class=\"font-bold\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </strong>\n </ng-container>\n </a>\n <ng-template #hasRouterLink>\n <!-- Todos los enlaces que admiten o href o routerLink estar\u00EDa bien unificarlos (en todos los componentes).\n Para ello, ser\u00EDa necesario crear una directiva para a\u00F1adir o quitar la directiva routerLink si no tiene href.\n Sin embargo, esto no es posible actualmente, ya que Angular todav\u00EDa no permite a\u00F1adir directivas din\u00E1micamente:\n https://angular.io/guide/roadmap#support-adding-directives-to-host-elements -->\n <a [attr.id]=\"id\"\n [routerLink]=\"item.routerLink\" [fragment]=\"item.fragment ? item.fragment : null\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [class]=\"['block px-xs focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'underline': hasUnderline,\n 'hover:text-primary-base hover:underline': !item.disabled,\n 'no-underline pointer-events-none': item.disabled\n }\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *ngIf=\"item.active; else noActiveTemplate\">\n <strong class=\"font-bold\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </strong>\n </ng-container>\n </a>\n </ng-template>\n </ng-container>\n <ng-template #notHref>\n <span [attr.id]=\"id\"\n [class]=\"['block px-xs', item.classes] | makeHtmlList\"\n [attr.title]=\"item.title\"\n [attr.tabindex]=\"item.disabled ? -1 : null\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled\"\n [attr.aria-describedby]=\"item.ariaDescribedBy\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy\"\n [attr.aria-hidden]=\"item.ariaHidden\"\n [attr.aria-controls]=\"item.ariaControls\"\n [attr.aria-live]=\"item.ariaLive\"\n [attr.aria-expanded]=\"item.ariaExpanded\"\n [attr.aria-haspopup]=\"item.ariaHasPopup\"\n [attr.disabled]=\"item.disabled\">\n <ng-container *ngIf=\"item.active; else noActiveTemplate\">\n <strong class=\"font-bold\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: getItemHtml(item), text: item.text }\"></ng-container>\n </strong>\n </ng-container>\n </span>\n </ng-template>\n <ng-container *ngIf=\"isRoot && sub\">\n <ul *ngIf=\"getSubItems(sub)\" [ngClass]=\"sub.classes\"\n [attr.aria-describedby]=\"sub.ariaDescribedBy\"\n [attr.aria-errormessage]=\"sub.ariaErrorMessage\"\n [attr.aria-label]=\"sub.ariaLabel\"\n [attr.aria-labelledby]=\"sub.ariaLabelledBy\"\n [attr.aria-hidden]=\"sub.ariaHidden\"\n [attr.aria-disabled]=\"sub.ariaDisabled\"\n [attr.aria-controls]=\"sub.ariaControls\"\n [attr.aria-current]=\"sub.ariaCurrent\"\n [attr.aria-live]=\"sub.ariaLive\"\n [attr.aria-expanded]=\"sub.ariaExpanded\"\n [attr.aria-haspopup]=\"sub.ariaHasPopup\"\n [attr.tabindex]=\"sub.tabindex\">\n <ng-container *ngFor=\"let subItem of getSubItems(sub); index as subIndex\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: subItem,\n id: getSubItemId(item, index, subIndex),\n index: subIndex,\n isRoot: false\n }\">\n </ng-container>\n </ng-container>\n </ul>\n <div *ngIf=\"!getSubItems(sub)\"\n [class]=\"['mb-base px-xs origin-top-left text-sm text-neutral-dark', sub.classes] | makeHtmlList\"\n [id]=\"'sub-' + id\">\n <ng-container *desyCustomInnerContent=\"{ component: sub, html: sub.html }\"></ng-container>\n </div>\n </ng-container>\n </li>\n <li *ngIf=\"item.divider\" class=\"my-sm border-b border-neutral-base\" aria-hidden=\"true\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n</ng-template>\n\n<nav [ngClass]=\"classes\"\n [attr.role]=\"(role ? role : null)\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n [attr.aria-errormessage]=\"ariaErrorMessage\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-disabled]=\"ariaDisabled\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-current]=\"ariaCurrent\"\n [attr.aria-live]=\"ariaLive\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup\"\n [attr.tabindex]=\"tabindex\">\n <ul class=\"text-base\">\n <ng-container *ngFor=\"let item of getItems(); index as index\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, id: getId(item, index), index: index, sub: getItemSub(item), isRoot: true }\">\n </ng-container>\n </ng-container>\n </ul>\n</nav>\n" }]
99
87
  }], propDecorators: { id: [{
100
88
  type: Input
101
89
  }], idPrefix: [{
@@ -110,4 +98,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
110
98
  type: ContentChildren,
111
99
  args: [MenuVerticalItemComponent]
112
100
  }] } });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS12ZXJ0aWNhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtdmVydGljYWwvbWVudS12ZXJ0aWNhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtdmVydGljYWwvbWVudS12ZXJ0aWNhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQzVGLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDJEQUEyRCxDQUFDOzs7Ozs7O0FBcUJ2RyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsc0JBQXNCO0lBVS9ELFdBQVcsQ0FBQyxJQUEyQjtRQUNyQyxJQUFJLFFBQWdCLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVksSUFBSSxDQUFDLElBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFZLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElB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Q3hCLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsUUFBUSxFQUFFO29CQUNuQixPQUFPLENBQUMsZ0JBQWdCLENBQUM7aUJBQzFCLENBQUM7YUFDSCxDQUFDO1NBQ0g7OzRGQUVVLHFCQUFxQjtrQkFuQmpDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBRWxCO3dCQUNWLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTs0QkFDN0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7Z0NBQ2xCLE9BQU8sRUFBRSxLQUFLO2dDQUNkLFNBQVMsRUFBRSxhQUFhOzZCQUN6QixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7Z0NBQ2YsT0FBTyxFQUFFLEtBQUs7Z0NBQ2QsU0FBUyxFQUFFLFlBQVk7NkJBQ3hCLENBQUMsQ0FBQzs0QkFDSCxVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixPQUFPLENBQUMsZ0JBQWdCLENBQUM7NkJBQzFCLENBQUM7eUJBQ0gsQ0FBQztxQkFDSDs4QkFJUSxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRXNDLGNBQWM7c0JBQXpELGVBQWU7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtNZW51VmVydGljYWxJdGVtc0RhdGEsIE1lbnVWZXJ0aWNhbFN1YkRhdGEsIE1lbnVWZXJ0aWNhbFN1Ykl0ZW1zRGF0YX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IFN0cmluZ1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3N0cmluZy11dGlscyc7XG5pbXBvcnQge01lbnVWZXJ0aWNhbEl0ZW1Db21wb25lbnR9IGZyb20gJy4vbWVudS12ZXJ0aWNhbC1pdGVtL21lbnUtdmVydGljYWwtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHtNZW51VmVydGljYWxJdGVtU3ViQ29tcG9uZW50fSBmcm9tICcuL21lbnUtdmVydGljYWwtaXRlbS1zdWIvbWVudS12ZXJ0aWNhbC1pdGVtLXN1Yi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LW1lbnUtdmVydGljYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS12ZXJ0aWNhbC5jb21wb25lbnQuaHRtbCcsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkaXNwbGF5TWVudVZlcnRpY2FsJywgW1xuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7XG4gICAgICAgIG9wYWNpdHk6ICcwLjAnLFxuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwLjk1KSdcbiAgICAgIH0pKSxcbiAgICAgIHN0YXRlKCcqJywgc3R5bGUoe1xuICAgICAgICBvcGFjaXR5OiAnMS4wJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMS4wKSdcbiAgICAgIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgYW5pbWF0ZSgnMTAwbXMgZWFzZS1vdXQnKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVWZXJ0aWNhbENvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2liaWxpdHlDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkUHJlZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGl0ZW1zOiBNZW51VmVydGljYWxJdGVtc0RhdGFbXTtcbiAgQElucHV0KCkgaGFzVW5kZXJsaW5lOiBib29sZWFuO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNZW51VmVydGljYWxJdGVtQ29tcG9uZW50KSBpdGVtQ29tcG9uZW50czogUXVlcnlMaXN0PE1lbnVWZXJ0aWNhbEl0ZW1Db21wb25lbnQ+O1xuXG4gIGdldEl0ZW1IdG1sKGl0ZW06IE1lbnVWZXJ0aWNhbEl0ZW1zRGF0YSk6IHN0cmluZyB7XG4gICAgbGV0IGl0ZW1IdG1sOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICBpdGVtSHRtbCA9IGl0ZW0uaHRtbCA/IGA8c3Ryb25nPiR7IGl0ZW0uaHRtbCB9PC9zdHJvbmc+YCA6IGA8c3Ryb25nPiR7IFN0cmluZ1V0aWxzLmVzY2FwZUh0bWwoaXRlbS50ZXh0KSB9PC9zdHJvbmc+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbUh0bWwgPSBpdGVtLmh0bWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1IdG1sO1xuICB9XG5cbiAgZ2V0SWQoaXRlbTogTWVudVZlcnRpY2FsSXRlbXNEYXRhLCBpOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaWRQcmVmaXggPSB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6ICduYXYtaXRlbSc7XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRQcmVmaXggKyAnLTAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlkUHJlZml4ICsgJy0nICsgaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRTdWJJdGVtSWQoaXRlbTogTWVudVZlcnRpY2FsSXRlbXNEYXRhLCBpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIpOiBzdHJpbmd7XG4gICAgbGV0IHN1Ykl0ZW1JZDogc3RyaW5nO1xuICAgIGNvbnN0IHN1YiA9IHRoaXMuZ2V0SXRlbVN1YihpdGVtKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbXMoc3ViKTtcbiAgICBjb25zdCBzdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcbiAgICBpZiAoc3ViSXRlbSkge1xuICAgICAgaWYgKHN1Ykl0ZW0uaWQpIHtcbiAgICAgICAgc3ViSXRlbUlkID0gc3ViSXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SWQoaXRlbSwgaXRlbUluZGV4KTtcbiAgICAgICAgc3ViSXRlbUlkID0gc3ViSXRlbUluZGV4ID09PSAwID8gYHN1Yi0ke2l0ZW1JZH1gIDogYHN1Yi0ke2l0ZW1JZH0tJHtzdWJJdGVtSW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3ViSXRlbUlkO1xuICB9XG5cbiAgZ2V0SXRlbXMoKTogTWVudVZlcnRpY2FsSXRlbXNEYXRhW10ge1xuICAgIGNvbnN0IGl0ZW1MaXN0ID0gdGhpcy5pdGVtQ29tcG9uZW50cyAmJiB0aGlzLml0ZW1Db21wb25lbnRzLmxlbmd0aCA+IDAgPyB0aGlzLml0ZW1Db21wb25lbnRzLnRvQXJyYXkoKSA6IHRoaXMuaXRlbXM7XG4gICAgcmV0dXJuIGl0ZW1MaXN0O1xuICB9XG5cbiAgZ2V0SXRlbVN1YihpdGVtOiBNZW51VmVydGljYWxJdGVtc0RhdGEpOiBNZW51VmVydGljYWxTdWJEYXRhIHtcbiAgICByZXR1cm4gaXRlbSBpbnN0YW5jZW9mIE1lbnVWZXJ0aWNhbEl0ZW1Db21wb25lbnQgPyBpdGVtLnN1YkNvbXBvbmVudCA6IGl0ZW0uc3ViO1xuICB9XG5cbiAgZ2V0U3ViSXRlbXMoc3ViOiBNZW51VmVydGljYWxTdWJEYXRhKTogTWVudVZlcnRpY2FsU3ViSXRlbXNEYXRhW10ge1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gc3ViIGluc3RhbmNlb2YgTWVudVZlcnRpY2FsSXRlbVN1YkNvbXBvbmVudCA/IHN1Yi5pdGVtQ29tcG9uZW50cy50b0FycmF5KCkgOiBzdWIuaXRlbXM7XG4gICAgcmV0dXJuIHN1Ykl0ZW1zICYmIHN1Ykl0ZW1zLmxlbmd0aCA+IDAgPyBzdWJJdGVtcyA6IG51bGw7XG4gIH1cbn1cbiIsIjwhLS1cbiAgVGVtcGxhdGUgcGFyYSBzZXIgdXRpbGl6YWRvIHRhbnRvIHBvciBsb3MgaXRlbXMgY29tbyBwb3IgbG9zIHN1Yml0ZW1zOlxuICAtIGl0ZW06IEl0ZW0gcXVlIHJlcHJlc2VudGFcbiAgLSBpbmRleDogaW5kaWNlIGRlbCBpdGVtIGVuIGxhIGxpc3RhXG4gIC0gaWQ6IGlkZW50aWZpY2Fkb3IgZGVsIGl0ZW1cbiAgLSBpc1Jvb3Q6IHNpIHBlcnRlbmVjZSBhbCBuaXZlbCByYWl6XG4tLT5cbjxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LWlkPVwiaWRcIiBsZXQtc3ViPVwic3ViXCIgbGV0LWlzUm9vdD1cImlzUm9vdFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbVwiPlxuICAgIDxsaSBjbGFzcz1cIm0tYmFzZVwiIFtuZ0NsYXNzXT1cInsnb3JpZ2luLXRvcC1sZWZ0IHRleHQtc20nOiAhaXNSb290fVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uaHJlZiB8fCBpdGVtLnJvdXRlckxpbms7IGVsc2Ugbm90SHJlZlwiPlxuICAgICAgICA8YSAqbmdJZj1cIml0ZW0uaHJlZjsgZWxzZSBoYXNSb3V0ZXJMaW5rXCIgW2F0dHIuaWRdPVwiaWRcIlxuICAgICAgICAgICBbaHJlZl09XCJpdGVtLmhyZWYgfCBleHRlcm5hbEhyZWZcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydibG9jayBweC14cyBmb2N1czpiZy13YXJuaW5nLWJhc2UgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWZvY3VzIGZvY3VzOnRleHQtYmxhY2snLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3VuZGVybGluZSc6IGhhc1VuZGVybGluZSxcbiAgICAgICAgICAgICdob3Zlcjp0ZXh0LXByaW1hcnktYmFzZSBob3Zlcjp1bmRlcmxpbmUnOiAhaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAgICduby11bmRlcmxpbmUgcG9pbnRlci1ldmVudHMtbm9uZSc6IGl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICAgICAnZm9udC1ib2xkJzogaXRlbS5hY3RpdmVcbiAgICAgICAgICAgfVwiXG4gICAgICAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGVcIlxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIudGFyZ2V0XT1cIml0ZW0udGFyZ2V0ID8gaXRlbS50YXJnZXQgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaXRlbS5hcmlhRGVzY3JpYmVkQnlcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW0uYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJpdGVtLmFyaWFIaWRkZW5cIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cIml0ZW0uYXJpYUxpdmVcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uYXJpYUV4cGFuZGVkXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLmFyaWFIYXNQb3B1cFwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGdldEl0ZW1IdG1sKGl0ZW0pLCB0ZXh0OiBpdGVtLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjaGFzUm91dGVyTGluaz5cbiAgICAgICAgICA8IS0tIFRvZG9zIGxvcyBlbmxhY2VzIHF1ZSBhZG1pdGVuIG8gaHJlZiBvIHJvdXRlckxpbmsgZXN0YXLDrWEgYmllbiB1bmlmaWNhcmxvcyAoZW4gdG9kb3MgbG9zIGNvbXBvbmVudGVzKS5cbiAgICAgICAgICAgICAgICBQYXJhIGVsbG8sIHNlcsOtYSBuZWNlc2FyaW8gY3JlYXIgdW5hIGRpcmVjdGl2YSBwYXJhIGHDsWFkaXIgbyBxdWl0YXIgbGEgZGlyZWN0aXZhIHJvdXRlckxpbmsgc2kgbm8gdGllbmUgaHJlZi5cbiAgICAgICAgICAgICAgICBTaW4gZW1iYXJnbywgZXN0byBubyBlcyBwb3NpYmxlIGFjdHVhbG1lbnRlLCB5YSBxdWUgQW5ndWxhciB0b2RhdsOtYSBubyBwZXJtaXRlIGHDsWFkaXIgZGlyZWN0aXZhcyBkaW7DoW1pY2FtZW50ZTpcbiAgICAgICAgICAgICAgICBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvcm9hZG1hcCNzdXBwb3J0LWFkZGluZy1kaXJlY3RpdmVzLXRvLWhvc3QtZWxlbWVudHMgLS0+XG4gICAgICAgICAgPGEgW2F0dHIuaWRdPVwiaWRcIlxuICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiIFtmcmFnbWVudF09XCJpdGVtLmZyYWdtZW50ID8gaXRlbS5mcmFnbWVudCA6IG51bGxcIlxuICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIml0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgPyBpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzIDogW11cIlxuICAgICAgICAgICAgIFtjbGFzc109XCJbJ2Jsb2NrIHB4LXhzIGZvY3VzOmJnLXdhcm5pbmctYmFzZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMgZm9jdXM6dGV4dC1ibGFjaycsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3VuZGVybGluZSc6IGhhc1VuZGVybGluZSxcbiAgICAgICAgICAgICAgJ2hvdmVyOnRleHQtcHJpbWFyeS1iYXNlIGhvdmVyOnVuZGVybGluZSc6ICFpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgICAnbm8tdW5kZXJsaW5lIHBvaW50ZXItZXZlbnRzLW5vbmUnOiBpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgICAnZm9udC1ib2xkJzogaXRlbS5hY3RpdmVcbiAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJpdGVtLnRpdGxlXCJcbiAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwiaXRlbS50YXJnZXQgPyBpdGVtLnRhcmdldCA6IG51bGxcIlxuICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpdGVtLmFjdGl2ZSA/ICdwYWdlJyA6IG51bGxcIlxuICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpdGVtLmFyaWFEZXNjcmliZWRCeVwiXG4gICAgICAgICAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiaXRlbS5hcmlhRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsXCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaXRlbS5hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiaXRlbS5hcmlhSGlkZGVuXCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzXCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWxpdmVdPVwiaXRlbS5hcmlhTGl2ZVwiXG4gICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtLmFyaWFFeHBhbmRlZFwiXG4gICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLmFyaWFIYXNQb3B1cFwiXG4gICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBnZXRJdGVtSHRtbChpdGVtKSwgdGV4dDogaXRlbS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SHJlZj5cbiAgICAgICAgICAgIDxzcGFuIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJbJ2Jsb2NrIHB4LXhzJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZvbnQtYm9sZCc6IGl0ZW0uYWN0aXZlfVwiXG5cbiAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5hY3RpdmUgPyAncGFnZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIml0ZW0uYXJpYURlc2NyaWJlZEJ5XCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cIml0ZW0uYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpdGVtLmFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbS5hcmlhRXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLmFyaWFIYXNQb3B1cFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogZ2V0SXRlbUh0bWwoaXRlbSksIHRleHQ6IGl0ZW0udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUm9vdCAmJiBzdWJcIj5cbiAgICAgICAgPHVsICpuZ0lmPVwiZ2V0U3ViSXRlbXMoc3ViKVwiIFtuZ0NsYXNzXT1cInN1Yi5jbGFzc2VzXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwic3ViLmFyaWFEZXNjcmliZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJzdWIuYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN1Yi5hcmlhTGFiZWxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInN1Yi5hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJzdWIuYXJpYUhpZGRlblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInN1Yi5hcmlhRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJzdWIuYXJpYUNvbnRyb2xzXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJzdWIuYXJpYUN1cnJlbnRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cInN1Yi5hcmlhTGl2ZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInN1Yi5hcmlhRXhwYW5kZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJzdWIuYXJpYUhhc1BvcHVwXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInN1Yi50YWJpbmRleFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Ykl0ZW0gb2YgZ2V0U3ViSXRlbXMoc3ViKTsgaW5kZXggYXMgc3ViSW5kZXhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IHN1Ykl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2V0U3ViSXRlbUlkKGl0ZW0sIGluZGV4LCBzdWJJbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogc3ViSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jvb3Q6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWdldFN1Ykl0ZW1zKHN1YilcIlxuICAgICAgICAgICAgIFtjbGFzc109XCJbJ21iLWJhc2UgcHgteHMgb3JpZ2luLXRvcC1sZWZ0IHRleHQtc20gdGV4dC1uZXV0cmFsLWRhcmsnLCBzdWIuY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICAgIFtpZF09XCInc3ViLScgKyBpZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3ViLCBodG1sOiBzdWIuaHRtbCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nSWY9XCJpdGVtLmRpdmlkZXJcIiBjbGFzcz1cIm15LXNtIGJvcmRlci1iIGJvcmRlci1uZXV0cmFsLWJhc2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzci1vbmx5XCI+U2VwYXJhZG9yPC9kaXY+XG4gICAgPC9saT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmF2IFtuZ0NsYXNzXT1cImNsYXNzZXNcIlxuICAgICBbYXR0ci5yb2xlXT1cIihyb2xlID8gcm9sZSA6IG51bGwpXCJcbiAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnlcIlxuICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJhcmlhRXJyb3JNZXNzYWdlXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJhcmlhSGlkZGVuXCJcbiAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJhcmlhRGlzYWJsZWRcIlxuICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9sc1wiXG4gICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJhcmlhQ3VycmVudFwiXG4gICAgIFthdHRyLmFyaWEtbGl2ZV09XCJhcmlhTGl2ZVwiXG4gICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiYXJpYUV4cGFuZGVkXCJcbiAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhcmlhSGFzUG9wdXBcIlxuICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiPlxuICA8dWwgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7IGluZGV4IGFzIGluZGV4XCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICBpdGVtOiBpdGVtLCBpZDogZ2V0SWQoaXRlbSwgaW5kZXgpLCBpbmRleDogaW5kZXgsIHN1YjogZ2V0SXRlbVN1YihpdGVtKSwgaXNSb290OiB0cnVlIH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuPC9uYXY+XG4iXX0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS12ZXJ0aWNhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtdmVydGljYWwvbWVudS12ZXJ0aWNhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtdmVydGljYWwvbWVudS12ZXJ0aWNhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7O0FBcUI5RixNQUFNLE9BQU8scUJBQXNCLFNBQVEsc0JBQXNCO0lBVS9ELFdBQVcsQ0FBQyxJQUEyQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBMkIsRUFBRSxDQUFTO1FBQzFDLElBQUksSUFBSSxD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Q0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO2dDQUNmLE9BQU8sRUFBRSxLQUFLO2dDQUNkLFNBQVMsRUFBRSxZQUFZOzZCQUN4QixDQUFDLENBQUM7NEJBQ0gsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsT0FBTyxDQUFDLGdCQUFnQixDQUFDOzZCQUMxQixDQUFDO3lCQUNILENBQUM7cUJBQ0g7OEJBSVEsRUFBRTtzQkFBVixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVzQyxjQUFjO3NCQUF6RCxlQUFlO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIElucHV0LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9zdHJpbmctdXRpbHMnO1xuaW1wb3J0IHsgTWVudVZlcnRpY2FsSXRlbXNEYXRhLCBNZW51VmVydGljYWxTdWJEYXRhLCBNZW51VmVydGljYWxTdWJJdGVtc0RhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1lbnVWZXJ0aWNhbEl0ZW1TdWJDb21wb25lbnQgfSBmcm9tICcuL21lbnUtdmVydGljYWwtaXRlbS1zdWIvbWVudS12ZXJ0aWNhbC1pdGVtLXN1Yi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudVZlcnRpY2FsSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS12ZXJ0aWNhbC1pdGVtL21lbnUtdmVydGljYWwtaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LW1lbnUtdmVydGljYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS12ZXJ0aWNhbC5jb21wb25lbnQuaHRtbCcsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkaXNwbGF5TWVudVZlcnRpY2FsJywgW1xuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7XG4gICAgICAgIG9wYWNpdHk6ICcwLjAnLFxuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwLjk1KSdcbiAgICAgIH0pKSxcbiAgICAgIHN0YXRlKCcqJywgc3R5bGUoe1xuICAgICAgICBvcGFjaXR5OiAnMS4wJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMS4wKSdcbiAgICAgIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgYW5pbWF0ZSgnMTAwbXMgZWFzZS1vdXQnKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVWZXJ0aWNhbENvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2liaWxpdHlDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkUHJlZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGl0ZW1zOiBNZW51VmVydGljYWxJdGVtc0RhdGFbXTtcbiAgQElucHV0KCkgaGFzVW5kZXJsaW5lOiBib29sZWFuO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNZW51VmVydGljYWxJdGVtQ29tcG9uZW50KSBpdGVtQ29tcG9uZW50czogUXVlcnlMaXN0PE1lbnVWZXJ0aWNhbEl0ZW1Db21wb25lbnQ+O1xuXG4gIGdldEl0ZW1IdG1sKGl0ZW06IE1lbnVWZXJ0aWNhbEl0ZW1zRGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0uaHRtbCA/IGl0ZW0uaHRtbCA6IFN0cmluZ1V0aWxzLmVzY2FwZUh0bWwoaXRlbS50ZXh0KTtcbiAgfVxuXG4gIGdldElkKGl0ZW06IE1lbnVWZXJ0aWNhbEl0ZW1zRGF0YSwgaTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlkUHJlZml4ID0gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggOiAnbmF2LWl0ZW0nO1xuICAgICAgcmV0dXJuIGlkUHJlZml4ICsgJy0nICsgKytpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN1Ykl0ZW1JZChpdGVtOiBNZW51VmVydGljYWxJdGVtc0RhdGEsIGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IHN1Ykl0ZW1JZDogc3RyaW5nO1xuICAgIGNvbnN0IHN1YiA9IHRoaXMuZ2V0SXRlbVN1YihpdGVtKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbXMoc3ViKTtcbiAgICBjb25zdCBzdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcbiAgICBpZiAoc3ViSXRlbSkge1xuICAgICAgaWYgKHN1Ykl0ZW0uaWQpIHtcbiAgICAgICAgc3ViSXRlbUlkID0gc3ViSXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SWQoaXRlbSwgaXRlbUluZGV4KTtcbiAgICAgICAgc3ViSXRlbUlkID0gYHN1Yi0ke2l0ZW1JZH0tJHsrK3N1Ykl0ZW1JbmRleH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJJdGVtSWQ7XG4gIH1cblxuICBnZXRJdGVtcygpOiBNZW51VmVydGljYWxJdGVtc0RhdGFbXSB7XG4gICAgY29uc3QgaXRlbUxpc3QgPSB0aGlzLml0ZW1Db21wb25lbnRzICYmIHRoaXMuaXRlbUNvbXBvbmVudHMubGVuZ3RoID4gMCA/IHRoaXMuaXRlbUNvbXBvbmVudHMudG9BcnJheSgpIDogdGhpcy5pdGVtcztcbiAgICByZXR1cm4gaXRlbUxpc3Q7XG4gIH1cblxuICBnZXRJdGVtU3ViKGl0ZW06IE1lbnVWZXJ0aWNhbEl0ZW1zRGF0YSk6IE1lbnVWZXJ0aWNhbFN1YkRhdGEge1xuICAgIHJldHVybiBpdGVtIGluc3RhbmNlb2YgTWVudVZlcnRpY2FsSXRlbUNvbXBvbmVudCA/IGl0ZW0uc3ViQ29tcG9uZW50IDogaXRlbS5zdWI7XG4gIH1cblxuICBnZXRTdWJJdGVtcyhzdWI6IE1lbnVWZXJ0aWNhbFN1YkRhdGEpOiBNZW51VmVydGljYWxTdWJJdGVtc0RhdGFbXSB7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSBzdWIgaW5zdGFuY2VvZiBNZW51VmVydGljYWxJdGVtU3ViQ29tcG9uZW50ID8gc3ViLml0ZW1Db21wb25lbnRzLnRvQXJyYXkoKSA6IHN1Yi5pdGVtcztcbiAgICByZXR1cm4gc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMCA/IHN1Ykl0ZW1zIDogbnVsbDtcbiAgfVxufVxuIiwiPCEtLVxuICBUZW1wbGF0ZSBwYXJhIHNlciB1dGlsaXphZG8gdGFudG8gcG9yIGxvcyBpdGVtcyBjb21vIHBvciBsb3Mgc3ViaXRlbXM6XG4gIC0gaXRlbTogSXRlbSBxdWUgcmVwcmVzZW50YVxuICAtIGluZGV4OiBpbmRpY2UgZGVsIGl0ZW0gZW4gbGEgbGlzdGFcbiAgLSBpZDogaWRlbnRpZmljYWRvciBkZWwgaXRlbVxuICAtIGlzUm9vdDogc2kgcGVydGVuZWNlIGFsIG5pdmVsIHJhaXpcbi0tPlxuPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtaWQ9XCJpZFwiIGxldC1zdWI9XCJzdWJcIiBsZXQtaXNSb290PVwiaXNSb290XCI+XG4gIDxuZy10ZW1wbGF0ZSAjbm9BY3RpdmVUZW1wbGF0ZT48bmctY29udGFpbmVyICAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGdldEl0ZW1IdG1sKGl0ZW0pLCB0ZXh0OiBpdGVtLnRleHQgfVwiPjwvbmctY29udGFpbmVyPjwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtXCI+XG4gICAgPGxpIGNsYXNzPVwibS1iYXNlXCIgW25nQ2xhc3NdPVwieydvcmlnaW4tdG9wLWxlZnQgdGV4dC1zbSc6ICFpc1Jvb3R9XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5ocmVmIHx8IGl0ZW0ucm91dGVyTGluazsgZWxzZSBub3RIcmVmXCI+XG4gICAgICAgIDxhICpuZ0lmPVwiaXRlbS5ocmVmOyBlbHNlIGhhc1JvdXRlckxpbmtcIiBbYXR0ci5pZF09XCJpZFwiXG4gICAgICAgICAgIFtocmVmXT1cIml0ZW0uaHJlZiB8IGV4dGVybmFsSHJlZlwiXG4gICAgICAgICAgIFtjbGFzc109XCJbJ2Jsb2NrIHB4LXhzIGZvY3VzOmJnLXdhcm5pbmctYmFzZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMgZm9jdXM6dGV4dC1ibGFjaycsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAndW5kZXJsaW5lJzogaGFzVW5kZXJsaW5lLFxuICAgICAgICAgICAgJ2hvdmVyOnRleHQtcHJpbWFyeS1iYXNlIGhvdmVyOnVuZGVybGluZSc6ICFpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgJ25vLXVuZGVybGluZSBwb2ludGVyLWV2ZW50cy1ub25lJzogaXRlbS5kaXNhYmxlZFxuICAgICAgICAgICB9XCJcbiAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiaXRlbS50aXRsZVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwiaXRlbS50YXJnZXQgPyBpdGVtLnRhcmdldCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5hY3RpdmUgPyAncGFnZScgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpdGVtLmFyaWFEZXNjcmliZWRCeVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cIml0ZW0uYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hcmlhTGFiZWxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaXRlbS5hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlblwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHNcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxpdmVdPVwiaXRlbS5hcmlhTGl2ZVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbS5hcmlhRXhwYW5kZWRcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIml0ZW0uYXJpYUhhc1BvcHVwXCJcbiAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5hY3RpdmU7IGVsc2Ugbm9BY3RpdmVUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGdldEl0ZW1IdG1sKGl0ZW0pLCB0ZXh0OiBpdGVtLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2hhc1JvdXRlckxpbms+XG4gICAgICAgICAgPCEtLSBUb2RvcyBsb3MgZW5sYWNlcyBxdWUgYWRtaXRlbiBvIGhyZWYgbyByb3V0ZXJMaW5rIGVzdGFyw61hIGJpZW4gdW5pZmljYXJsb3MgKGVuIHRvZG9zIGxvcyBjb21wb25lbnRlcykuXG4gICAgICAgICAgICAgICAgUGFyYSBlbGxvLCBzZXLDrWEgbmVjZXNhcmlvIGNyZWFyIHVuYSBkaXJlY3RpdmEgcGFyYSBhw7FhZGlyIG8gcXVpdGFyIGxhIGRpcmVjdGl2YSByb3V0ZXJMaW5rIHNpIG5vIHRpZW5lIGhyZWYuXG4gICAgICAgICAgICAgICAgU2luIGVtYmFyZ28sIGVzdG8gbm8gZXMgcG9zaWJsZSBhY3R1YWxtZW50ZSwgeWEgcXVlIEFuZ3VsYXIgdG9kYXbDrWEgbm8gcGVybWl0ZSBhw7FhZGlyIGRpcmVjdGl2YXMgZGluw6FtaWNhbWVudGU6XG4gICAgICAgICAgICAgICAgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL3JvYWRtYXAjc3VwcG9ydC1hZGRpbmctZGlyZWN0aXZlcy10by1ob3N0LWVsZW1lbnRzIC0tPlxuICAgICAgICAgIDxhIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIiBbZnJhZ21lbnRdPVwiaXRlbS5mcmFnbWVudCA/IGl0ZW0uZnJhZ21lbnQgOiBudWxsXCJcbiAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzID8gaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA6IFtdXCJcbiAgICAgICAgICAgICBbY2xhc3NdPVwiWydibG9jayBweC14cyBmb2N1czpiZy13YXJuaW5nLWJhc2UgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWZvY3VzIGZvY3VzOnRleHQtYmxhY2snLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICd1bmRlcmxpbmUnOiBoYXNVbmRlcmxpbmUsXG4gICAgICAgICAgICAgICdob3Zlcjp0ZXh0LXByaW1hcnktYmFzZSBob3Zlcjp1bmRlcmxpbmUnOiAhaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgJ25vLXVuZGVybGluZSBwb2ludGVyLWV2ZW50cy1ub25lJzogaXRlbS5kaXNhYmxlZFxuICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGVcIlxuICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IG51bGxcIlxuICAgICAgICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldCA/IGl0ZW0udGFyZ2V0IDogbnVsbFwiXG4gICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIml0ZW0uYXJpYURlc2NyaWJlZEJ5XCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hcmlhTGFiZWxcIlxuICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpdGVtLmFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJpdGVtLmFyaWFIaWRkZW5cIlxuICAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHNcIlxuICAgICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlXCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uYXJpYUV4cGFuZGVkXCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIml0ZW0uYXJpYUhhc1BvcHVwXCJcbiAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uYWN0aXZlOyBlbHNlIG5vQWN0aXZlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogZ2V0SXRlbUh0bWwoaXRlbSksIHRleHQ6IGl0ZW0udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SHJlZj5cbiAgICAgICAgICAgIDxzcGFuIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJbJ2Jsb2NrIHB4LXhzJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJpdGVtLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpdGVtLmFyaWFEZXNjcmliZWRCeVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmFyaWFMYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaXRlbS5hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJpdGVtLmFyaWFIaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpdGVtLmFyaWFDb250cm9sc1wiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxpdmVdPVwiaXRlbS5hcmlhTGl2ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uYXJpYUV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5hcmlhSGFzUG9wdXBcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uYWN0aXZlOyBlbHNlIG5vQWN0aXZlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogZ2V0SXRlbUh0bWwoaXRlbSksIHRleHQ6IGl0ZW0udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Jvb3QgJiYgc3ViXCI+XG4gICAgICAgIDx1bCAqbmdJZj1cImdldFN1Ykl0ZW1zKHN1YilcIiBbbmdDbGFzc109XCJzdWIuY2xhc3Nlc1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cInN1Yi5hcmlhRGVzY3JpYmVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwic3ViLmFyaWFFcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdWIuYXJpYUxhYmVsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJzdWIuYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwic3ViLmFyaWFIaWRkZW5cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJzdWIuYXJpYURpc2FibGVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwic3ViLmFyaWFDb250cm9sc1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3ViLmFyaWFDdXJyZW50XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJzdWIuYXJpYUxpdmVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzdWIuYXJpYUV4cGFuZGVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwic3ViLmFyaWFIYXNQb3B1cFwiXG4gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJzdWIudGFiaW5kZXhcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJJdGVtIG9mIGdldFN1Ykl0ZW1zKHN1Yik7IGluZGV4IGFzIHN1YkluZGV4XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBzdWJJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdldFN1Ykl0ZW1JZChpdGVtLCBpbmRleCwgc3ViSW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHN1YkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSb290OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFnZXRTdWJJdGVtcyhzdWIpXCJcbiAgICAgICAgICAgICBbY2xhc3NdPVwiWydtYi1iYXNlIHB4LXhzIG9yaWdpbi10b3AtbGVmdCB0ZXh0LXNtIHRleHQtbmV1dHJhbC1kYXJrJywgc3ViLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgICBbaWRdPVwiJ3N1Yi0nICsgaWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1YiwgaHRtbDogc3ViLmh0bWwgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbGk+XG4gICAgPGxpICpuZ0lmPVwiaXRlbS5kaXZpZGVyXCIgY2xhc3M9XCJteS1zbSBib3JkZXItYiBib3JkZXItbmV1dHJhbC1iYXNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Itb25seVwiPlNlcGFyYWRvcjwvZGl2PlxuICAgIDwvbGk+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5hdiBbbmdDbGFzc109XCJjbGFzc2VzXCJcbiAgICAgW2F0dHIucm9sZV09XCIocm9sZSA/IHJvbGUgOiBudWxsKVwiXG4gICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZEJ5XCJcbiAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiYXJpYUhpZGRlblwiXG4gICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiYXJpYURpc2FibGVkXCJcbiAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHNcIlxuICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiYXJpYUN1cnJlbnRcIlxuICAgICBbYXR0ci5hcmlhLWxpdmVdPVwiYXJpYUxpdmVcIlxuICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImFyaWFFeHBhbmRlZFwiXG4gICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXJpYUhhc1BvcHVwXCJcbiAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIj5cbiAgPHVsIGNsYXNzPVwidGV4dC1iYXNlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRJdGVtcygpOyBpbmRleCBhcyBpbmRleFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAgaXRlbTogaXRlbSwgaWQ6IGdldElkKGl0ZW0sIGluZGV4KSwgaW5kZXg6IGluZGV4LCBzdWI6IGdldEl0ZW1TdWIoaXRlbSksIGlzUm9vdDogdHJ1ZSB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC91bD5cbjwvbmF2PlxuIl19