desy-angular 12.0.0 → 13.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.
- package/esm2022/lib/desy-angular.module.mjs +10 -9
- package/esm2022/lib/desy-buttons/components/button/button.component.mjs +5 -4
- package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +8 -5
- package/esm2022/lib/desy-buttons/components/dropdown/dropdown.component.mjs +11 -6
- package/esm2022/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +3 -3
- package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +6 -5
- package/esm2022/lib/desy-buttons/components/pill/pill.component.mjs +5 -4
- package/esm2022/lib/desy-buttons/components/toggle/toggle.component.mjs +4 -3
- package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +15 -15
- package/esm2022/lib/desy-buttons/interfaces/listbox-item-data.mjs +1 -1
- package/esm2022/lib/desy-commons/interfaces/title-data.mjs +1 -1
- package/esm2022/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +6 -5
- package/esm2022/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +11 -10
- package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +10 -9
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +190 -0
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +34 -0
- package/esm2022/lib/desy-forms/components/error-message/error-message.component.mjs +4 -3
- package/esm2022/lib/desy-forms/components/fieldset/fieldset.component.mjs +5 -4
- package/esm2022/lib/desy-forms/components/file-upload/file-upload.component.mjs +8 -7
- package/esm2022/lib/desy-forms/components/hint/hint.component.mjs +4 -3
- package/esm2022/lib/desy-forms/components/input/input.component.mjs +8 -7
- package/esm2022/lib/desy-forms/components/input-group/input-group.component.mjs +11 -10
- package/esm2022/lib/desy-forms/components/label/label.component.mjs +4 -3
- package/esm2022/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +6 -5
- package/esm2022/lib/desy-forms/components/radios/radios.component.mjs +11 -10
- package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +7 -6
- package/esm2022/lib/desy-forms/components/select/select.component.mjs +8 -7
- package/esm2022/lib/desy-forms/components/textarea/textarea.component.mjs +8 -7
- package/esm2022/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +4 -3
- package/esm2022/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +13 -12
- package/esm2022/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +5 -4
- package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +12 -9
- package/esm2022/lib/desy-forms/desy-forms.module.mjs +40 -24
- package/esm2022/lib/desy-forms/interfaces/error-message-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/fieldset-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/hint-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-checkbox-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-date-input-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-input-group-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-radio-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/label-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/select-item-data.mjs +1 -1
- package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +4 -3
- package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +15 -14
- package/esm2022/lib/desy-modals/interfaces/dialog-options.mjs +1 -1
- package/esm2022/lib/desy-modals/interfaces/modal-options.mjs +1 -1
- package/esm2022/lib/desy-modals/services/dialog.service.mjs +2 -2
- package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +4 -3
- package/esm2022/lib/desy-nav/components/error-summary/error-summary.component.mjs +5 -4
- package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +4 -2
- package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +6 -5
- package/esm2022/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.mjs +246 -2
- package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +4 -3
- package/esm2022/lib/desy-nav/components/header/header.component.mjs +15 -14
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +6 -5
- package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +5 -4
- package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +16 -0
- package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +7 -3
- package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +8 -5
- package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +6 -5
- package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +280 -31
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +6 -5
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +281 -32
- package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +6 -5
- package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +7 -6
- package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +8 -3
- package/esm2022/lib/desy-nav/desy-nav.module.mjs +6 -5
- package/esm2022/lib/desy-nav/interfaces/breadcrumbs.data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/error-summary-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/footer-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +2 -1
- package/esm2022/lib/desy-nav/interfaces/header-dropdown-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/header-mobile-text-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/header-navigation-item-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/header-subnav-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-navigation.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-items-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-items-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menubar-item-sub.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menubar-item.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/nav-item.data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/notification-items-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/notification-options.mjs +1 -1
- package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +22 -22
- package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +2 -2
- package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +16 -8
- package/esm2022/lib/desy-tables/components/table/table.component.mjs +26 -5
- package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +16 -16
- package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +12 -7
- package/esm2022/lib/desy-tables/interfaces/cell-data.mjs +1 -1
- package/esm2022/lib/desy-tables/interfaces/wrapper-data.mjs +1 -1
- package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +279 -30
- package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +5 -4
- package/esm2022/lib/desy-views/components/alert/alert.component.mjs +4 -3
- package/esm2022/lib/desy-views/components/card/card.component.mjs +4 -3
- package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +13 -4
- package/esm2022/lib/desy-views/components/description-list/description-list.component.mjs +4 -3
- package/esm2022/lib/desy-views/components/details/details.component.mjs +4 -3
- package/esm2022/lib/desy-views/components/item/item.component.mjs +11 -10
- package/esm2022/lib/desy-views/components/media-object/media-object.component.mjs +280 -32
- package/esm2022/lib/desy-views/components/status/status.component.mjs +283 -32
- package/esm2022/lib/desy-views/components/status-item/status-item.component.mjs +286 -37
- package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +284 -35
- package/esm2022/lib/desy-views/components/tooltip/tooltip.component.mjs +281 -33
- package/esm2022/lib/desy-views/desy-views.module.mjs +27 -32
- package/esm2022/lib/desy-views/interfaces/accordion-item.data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/alert-options.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/description-item.data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/status-data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/tabs-items-data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/tabs-panel-data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/term-definition.data.mjs +1 -1
- package/esm2022/lib/shared/components/accessibility/accessibility-attributes.mjs +78 -0
- package/esm2022/lib/shared/components/accessibility/accessibility.component.mjs +124 -2
- package/esm2022/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +126 -2
- package/esm2022/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +126 -2
- package/esm2022/lib/shared/components/index.mjs +4 -3
- package/esm2022/lib/shared/components/spinner/spinner.component.mjs +329 -0
- package/esm2022/lib/shared/directives/accessibility-directive.mjs +52 -0
- package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +21 -4
- package/esm2022/lib/shared/interfaces/accessibility-data.mjs +2 -0
- package/esm2022/lib/shared/pipes/make-html-list.pipe.mjs +2 -2
- package/esm2022/lib/shared/shared.module.mjs +12 -7
- package/esm2022/lib/shared/sharedExternal.module.mjs +24 -0
- package/esm2022/lib/shared/utils/search-utils.mjs +5 -1
- package/esm2022/public-api.mjs +5 -2
- package/fesm2022/desy-angular.mjs +4273 -965
- package/fesm2022/desy-angular.mjs.map +1 -1
- package/lib/desy-angular.module.d.ts +2 -1
- package/lib/desy-buttons/components/button-loader/button-loader.component.d.ts +2 -0
- package/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.d.ts +3 -3
- package/lib/desy-buttons/desy-buttons.module.d.ts +3 -3
- package/lib/desy-buttons/interfaces/listbox-item-data.d.ts +2 -2
- package/lib/desy-commons/interfaces/title-data.d.ts +2 -2
- package/lib/desy-forms/components/datepicker/datepicker.component.d.ts +31 -0
- package/lib/desy-forms/components/datepicker/datepicker.pipe.d.ts +7 -0
- package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +5 -5
- package/lib/desy-forms/components/tree/tree.component.d.ts +5 -4
- package/lib/desy-forms/desy-forms.module.d.ts +10 -6
- package/lib/desy-forms/interfaces/error-message-data.d.ts +2 -2
- package/lib/desy-forms/interfaces/fieldset-data.d.ts +2 -2
- package/lib/desy-forms/interfaces/hint-data.d.ts +2 -2
- package/lib/desy-forms/interfaces/item-checkbox-data.d.ts +3 -3
- package/lib/desy-forms/interfaces/item-date-input-data.d.ts +3 -3
- package/lib/desy-forms/interfaces/item-input-group-data.d.ts +3 -3
- package/lib/desy-forms/interfaces/item-radio-data.d.ts +3 -3
- package/lib/desy-forms/interfaces/label-data.d.ts +2 -2
- package/lib/desy-forms/interfaces/select-item-data.d.ts +2 -2
- package/lib/desy-modals/components/modal/modal.component.d.ts +8 -8
- package/lib/desy-modals/interfaces/dialog-options.d.ts +2 -2
- package/lib/desy-modals/interfaces/modal-options.d.ts +4 -4
- package/lib/desy-modals/services/dialog.service.d.ts +1 -1
- package/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.d.ts +2 -1
- package/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.d.ts +61 -0
- package/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.d.ts +1 -1
- package/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.d.ts +1 -1
- package/lib/desy-nav/components/header-mini/header-mini.component.d.ts +1 -1
- package/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.d.ts +8 -0
- package/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.d.ts +4 -2
- package/lib/desy-nav/components/links-list/links-list.component.d.ts +2 -1
- package/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.d.ts +2 -2
- package/lib/desy-nav/components/menu-navigation/menu-navigation.component.d.ts +75 -13
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.d.ts +3 -3
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.d.ts +3 -3
- package/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.d.ts +3 -3
- package/lib/desy-nav/components/menubar/menubar.component.d.ts +75 -13
- package/lib/desy-nav/components/nav/nav-item/nav-item.component.d.ts +2 -2
- package/lib/desy-nav/components/notification/notification.component.d.ts +2 -2
- package/lib/desy-nav/desy-nav.module.d.ts +29 -28
- package/lib/desy-nav/interfaces/breadcrumbs.data.d.ts +2 -2
- package/lib/desy-nav/interfaces/error-summary-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/footer-data.d.ts +3 -3
- package/lib/desy-nav/interfaces/footer-logo.d.ts +1 -0
- package/lib/desy-nav/interfaces/header-dropdown-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/header-mobile-text-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/header-navigation-item-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/header-subnav-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/menu-horizontal-item-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.d.ts +2 -2
- package/lib/desy-nav/interfaces/menu-navigation-item-sub-item.d.ts +2 -2
- package/lib/desy-nav/interfaces/menu-navigation.d.ts +2 -2
- package/lib/desy-nav/interfaces/menu-vertical-items-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/menu-vertical-sub-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/menu-vertical-sub-items-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/menubar-item-sub.d.ts +2 -2
- package/lib/desy-nav/interfaces/menubar-item.d.ts +3 -3
- package/lib/desy-nav/interfaces/nav-item.data.d.ts +2 -2
- package/lib/desy-nav/interfaces/notification-items-data.d.ts +2 -2
- package/lib/desy-nav/interfaces/notification-options.d.ts +4 -4
- package/lib/desy-pagination/components/pagination/pagination.component.d.ts +4 -4
- package/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.d.ts +3 -3
- package/lib/desy-pagination/desy-pagination.module.d.ts +3 -1
- package/lib/desy-tables/components/table/table.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +1 -1
- package/lib/desy-tables/directives/focus-clicked-cell.directive.d.ts +1 -0
- package/lib/desy-tables/interfaces/cell-data.d.ts +2 -2
- package/lib/desy-tables/interfaces/wrapper-data.d.ts +2 -2
- package/lib/desy-views/components/accordion/accordion.component.d.ts +75 -13
- package/lib/desy-views/components/collapsible/collapsible.component.d.ts +5 -1
- package/lib/desy-views/components/item/item.component.d.ts +7 -7
- package/lib/desy-views/components/media-object/media-object.component.d.ts +75 -13
- package/lib/desy-views/components/status/status.component.d.ts +75 -13
- package/lib/desy-views/components/status-item/status-item.component.d.ts +77 -15
- package/lib/desy-views/components/tabs/tabs.component.d.ts +77 -15
- package/lib/desy-views/components/tooltip/tooltip.component.d.ts +75 -13
- package/lib/desy-views/desy-views.module.d.ts +30 -31
- package/lib/desy-views/interfaces/accordion-item.data.d.ts +2 -2
- package/lib/desy-views/interfaces/alert-options.d.ts +2 -2
- package/lib/desy-views/interfaces/description-item.data.d.ts +2 -2
- package/lib/desy-views/interfaces/status-data.d.ts +2 -2
- package/lib/desy-views/interfaces/tabs-items-data.d.ts +2 -2
- package/lib/desy-views/interfaces/tabs-panel-data.d.ts +2 -2
- package/lib/desy-views/interfaces/term-definition.data.d.ts +2 -2
- package/lib/shared/components/accessibility/accessibility-attributes.d.ts +1 -0
- package/lib/shared/components/accessibility/accessibility.component.d.ts +78 -17
- package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +79 -16
- package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +79 -16
- package/lib/shared/components/index.d.ts +3 -2
- package/lib/shared/components/spinner/spinner.component.d.ts +86 -0
- package/lib/shared/directives/accessibility-directive.d.ts +16 -0
- package/lib/shared/directives/custom-inner-content.directive.d.ts +3 -2
- package/lib/shared/interfaces/accessibility-data.d.ts +77 -0
- package/lib/shared/shared.module.d.ts +4 -3
- package/lib/shared/sharedExternal.module.d.ts +8 -0
- package/package.json +2 -2
- package/public-api.d.ts +4 -1
- package/esm2022/lib/desy-forms/interfaces/accesibility-data.mjs +0 -2
- package/esm2022/lib/desy-pagination/interfaces/index.mjs +0 -2
- package/esm2022/lib/desy-views/components/spinner/spinner.component.mjs +0 -81
- package/esm2022/lib/shared/interfaces/accesibility-data.mjs +0 -2
- package/lib/desy-forms/interfaces/accesibility-data.d.ts +0 -15
- package/lib/desy-pagination/interfaces/index.d.ts +0 -1
- package/lib/desy-views/components/spinner/spinner.component.d.ts +0 -24
- package/lib/shared/interfaces/accesibility-data.d.ts +0 -16
|
@@ -13,9 +13,10 @@ import * as i1 from "@angular/common";
|
|
|
13
13
|
import * as i2 from "@angular/router";
|
|
14
14
|
import * as i3 from "../../../shared/directives/attribute-change.directive";
|
|
15
15
|
import * as i4 from "../../../shared/directives/custom-inner-content.directive";
|
|
16
|
-
import * as i5 from "
|
|
17
|
-
import * as i6 from "
|
|
18
|
-
import * as i7 from "../../../shared/pipes/
|
|
16
|
+
import * as i5 from "../../../shared/directives/accessibility-directive";
|
|
17
|
+
import * as i6 from "./directives/menubaritem.directive";
|
|
18
|
+
import * as i7 from "../../../shared/pipes/make-html-list.pipe";
|
|
19
|
+
import * as i8 from "../../../shared/pipes/external-href.pipe";
|
|
19
20
|
export class MenubarComponent extends AccessibilityComponent {
|
|
20
21
|
constructor(changeDetectorRef) {
|
|
21
22
|
super();
|
|
@@ -24,23 +25,85 @@ export class MenubarComponent extends AccessibilityComponent {
|
|
|
24
25
|
this.activeItemChange = new EventEmitter();
|
|
25
26
|
this.activeSubItemChange = new EventEmitter();
|
|
26
27
|
this.cfg = true;
|
|
28
|
+
this.role = null;
|
|
29
|
+
this.ariaLabel = null;
|
|
30
|
+
this.ariaDescribedBy = null;
|
|
31
|
+
this.ariaLabelledBy = null;
|
|
32
|
+
this.ariaHidden = null;
|
|
33
|
+
this.ariaDisabled = null;
|
|
34
|
+
this.ariaControls = null;
|
|
35
|
+
this.ariaCurrent = null;
|
|
36
|
+
this.ariaLive = null;
|
|
37
|
+
this.ariaExpanded = null;
|
|
38
|
+
this.ariaErrorMessage = null;
|
|
39
|
+
this.ariaHasPopup = null;
|
|
40
|
+
this.ariaModal = null;
|
|
41
|
+
this.ariaChecked = null;
|
|
42
|
+
this.ariaPressed = null;
|
|
43
|
+
this.ariaReadonly = null;
|
|
44
|
+
this.ariaRequired = null;
|
|
45
|
+
this.ariaSelected = null;
|
|
46
|
+
this.ariaValuemin = null;
|
|
47
|
+
this.ariaValuemax = null;
|
|
48
|
+
this.ariaValuenow = null;
|
|
49
|
+
this.ariaValuetext = null;
|
|
50
|
+
this.ariaOrientation = null;
|
|
51
|
+
this.ariaLevel = null;
|
|
52
|
+
this.ariaMultiselectable = null;
|
|
53
|
+
this.ariaPlaceholder = null;
|
|
54
|
+
this.ariaPosinset = null;
|
|
55
|
+
this.ariaSetsize = null;
|
|
56
|
+
this.ariaSort = null;
|
|
57
|
+
this.ariaBusy = null;
|
|
58
|
+
this.ariaDropeffect = null;
|
|
59
|
+
this.ariaGrabbed = null;
|
|
60
|
+
this.ariaActivedescendant = null;
|
|
61
|
+
this.ariaAtomic = null;
|
|
62
|
+
this.ariaAutocomplete = null;
|
|
63
|
+
this.ariaBraillelabel = null;
|
|
64
|
+
this.ariaBrailleroledescription = null;
|
|
65
|
+
this.ariaColcount = null;
|
|
66
|
+
this.ariaColindex = null;
|
|
67
|
+
this.ariaColindextext = null;
|
|
68
|
+
this.ariaColspan = null;
|
|
69
|
+
this.ariaDescription = null;
|
|
70
|
+
this.ariaDetails = null;
|
|
71
|
+
this.ariaFlowto = null;
|
|
72
|
+
this.ariaInvalid = null;
|
|
73
|
+
this.ariaKeyshortcuts = null;
|
|
74
|
+
this.ariaOwns = null;
|
|
75
|
+
this.ariaRelevant = null;
|
|
76
|
+
this.ariaRoledescription = null;
|
|
77
|
+
this.ariaRowcount = null;
|
|
78
|
+
this.ariaRowindex = null;
|
|
79
|
+
this.ariaRowindextext = null;
|
|
80
|
+
this.ariaRowspan = null;
|
|
81
|
+
this.tabindex = null;
|
|
82
|
+
this.title = null;
|
|
83
|
+
this.alt = null;
|
|
84
|
+
this.lang = null;
|
|
85
|
+
this.accesskey = null;
|
|
86
|
+
this.autocomplete = null;
|
|
87
|
+
this.autofocus = null;
|
|
88
|
+
this.contenteditable = null;
|
|
89
|
+
this.dir = null;
|
|
90
|
+
this.draggable = null;
|
|
91
|
+
this.enterkeyhint = null;
|
|
92
|
+
this.hidden = null;
|
|
93
|
+
this.inputmode = null;
|
|
94
|
+
this.spellcheck = null;
|
|
95
|
+
this.translate = null;
|
|
96
|
+
this.ariaMultiline = null;
|
|
97
|
+
this.for = null;
|
|
98
|
+
this.form = null;
|
|
99
|
+
this.headers = null;
|
|
100
|
+
this.placeholder = null;
|
|
101
|
+
this.readonly = null;
|
|
102
|
+
this.required = null;
|
|
27
103
|
this.viewInit = false;
|
|
28
104
|
this.currentFocusItemIndex = 0;
|
|
29
105
|
}
|
|
30
106
|
ngOnChanges(changes) {
|
|
31
|
-
this.roleData = this.role ? this.role : null;
|
|
32
|
-
this.ariaLabelData = this.ariaLabel ? this.ariaLabel : null;
|
|
33
|
-
this.ariaDescribedbyData = this.ariaDescribedBy ? this.ariaDescribedBy : null;
|
|
34
|
-
this.ariaLabelledbyData = this.ariaLabelledBy ? this.ariaLabelledBy : null;
|
|
35
|
-
this.ariaHiddenData = this.ariaHidden ? this.ariaHidden : null;
|
|
36
|
-
this.ariaDisabledData = this.ariaDisabled ? this.ariaDisabled : null;
|
|
37
|
-
this.ariaControlsData = this.ariaControls ? this.ariaControls : null;
|
|
38
|
-
this.ariaCurrentData = this.ariaCurrent ? this.ariaCurrent : null;
|
|
39
|
-
this.ariaLiveData = this.ariaLive ? this.ariaLive : null;
|
|
40
|
-
this.ariaExpandedData = this.ariaExpanded ? this.ariaExpanded : null;
|
|
41
|
-
this.ariaErrormessageData = this.ariaErrorMessage ? this.ariaErrorMessage : null;
|
|
42
|
-
this.ariaHaspopupData = this.ariaHasPopup ? this.ariaHasPopup : null;
|
|
43
|
-
this.ariaModalData = this.ariaModal ? this.ariaModal : null;
|
|
44
107
|
if (this.viewInit) {
|
|
45
108
|
this.checkChanges();
|
|
46
109
|
}
|
|
@@ -620,7 +683,7 @@ export class MenubarComponent extends AccessibilityComponent {
|
|
|
620
683
|
return ariaChecked;
|
|
621
684
|
}
|
|
622
685
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MenubarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
623
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MenubarComponent, selector: "desy-menubar", inputs: { idPrefix: "idPrefix", items: "items", labelRef: "labelRef", labelData: "labelData", labelText: "labelText", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menubar": "this.cfg", "attr.id": "this.id", "attr.role": "this.roleData", "attr.aria-label": "this.ariaLabelData", "attr.aria-describedby": "this.ariaDescribedbyData", "attr.aria-labelledby": "this.ariaLabelledbyData", "attr.aria-hidden": "this.ariaHiddenData", "attr.aria-disabled": "this.ariaDisabledData", "attr.aria-controls": "this.ariaControlsData", "attr.aria-current": "this.ariaCurrentData", "attr.aria-live": "this.ariaLiveData", "attr.aria-expanded": "this.ariaExpandedData", "attr.aria-errormessage": "this.ariaErrormessageData", "attr.aria-haspopup": "this.ariaHaspopupData", "attr.aria-modal": "this.ariaModalData" } }, queries: [{ propertyName: "labelComponent", predicate: MenubarLabelComponent }, { propertyName: "itemComponentList", predicate: MenubarItemComponent }], viewQueries: [{ propertyName: "menubar", first: true, predicate: ["menubar"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" aria-expanded=\"false\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-describedby]=\"item.sub.ariaDescribedBy ? item.sub.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.sub.ariaLabelledBy ? item.sub.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.sub.ariaHidden ? item.sub.ariaHidden : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [attr.aria-controls]=\"item.sub.ariaControls ? item.sub.ariaControls : null\"\n [attr.aria-current]=\"item.sub.ariaCurrent ? item.sub.ariaCurrent : null\"\n [attr.aria-live]=\"item.sub.ariaLive ? item.sub.ariaLive : null\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\"\n [attr.aria-errormessage]=\"item.sub.ariaErrorMessage ? item.sub.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.sub.ariaHasPopup ? item.sub.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.sub.ariaModal ? item.sub.ariaModal : null\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\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: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { 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.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i6.MakeHtmlListPipe, name: "makeHtmlList" }, { kind: "pipe", type: i7.ExternalHrefPipe, name: "externalHref" }] }); }
|
|
686
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MenubarComponent, selector: "desy-menubar", inputs: { idPrefix: "idPrefix", items: "items", labelRef: "labelRef", labelData: "labelData", labelText: "labelText", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menubar": "this.cfg", "attr.id": "this.id", "attr.role": "this.role", "attr.aria-label": "this.ariaLabel", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-labelledby": "this.ariaLabelledBy", "attr.aria-hidden": "this.ariaHidden", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-controls": "this.ariaControls", "attr.aria-current": "this.ariaCurrent", "attr.aria-live": "this.ariaLive", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-errormessage": "this.ariaErrorMessage", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-modal": "this.ariaModal", "attr.aria-checked": "this.ariaChecked", "attr.aria-pressed": "this.ariaPressed", "attr.aria-readonly": "this.ariaReadonly", "attr.aria-required": "this.ariaRequired", "attr.aria-selected": "this.ariaSelected", "attr.aria-valuemin": "this.ariaValuemin", "attr.aria-valuemax": "this.ariaValuemax", "attr.aria-valuenow": "this.ariaValuenow", "attr.aria-valuetext": "this.ariaValuetext", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-level": "this.ariaLevel", "attr.aria-multiselectable": "this.ariaMultiselectable", "attr.aria-placeholder": "this.ariaPlaceholder", "attr.aria-posinset": "this.ariaPosinset", "attr.aria-setsize": "this.ariaSetsize", "attr.aria-sort": "this.ariaSort", "attr.aria-busy": "this.ariaBusy", "attr.aria-dropeffect": "this.ariaDropeffect", "attr.aria-grabbed": "this.ariaGrabbed", "attr.aria-activedescendant": "this.ariaActivedescendant", "attr.aria-atomic": "this.ariaAtomic", "attr.aria-autocomplete": "this.ariaAutocomplete", "attr.aria-braillelabel": "this.ariaBraillelabel", "attr.aria-brailleroledescription": "this.ariaBrailleroledescription", "attr.aria-colcount": "this.ariaColcount", "attr.aria-colindex": "this.ariaColindex", "attr.aria-colindextext": "this.ariaColindextext", "attr.aria-colspan": "this.ariaColspan", "attr.aria-description": "this.ariaDescription", "attr.aria-details": "this.ariaDetails", "attr.aria-flowto": "this.ariaFlowto", "attr.aria-invalid": "this.ariaInvalid", "attr.aria-keyshortcuts": "this.ariaKeyshortcuts", "attr.aria-owns": "this.ariaOwns", "attr.aria-relevant": "this.ariaRelevant", "attr.aria-roledescription": "this.ariaRoledescription", "attr.aria-rowcount": "this.ariaRowcount", "attr.aria-rowindex": "this.ariaRowindex", "attr.aria-rowindextext": "this.ariaRowindextext", "attr.aria-rowspan": "this.ariaRowspan", "attr.tabindex": "this.tabindex", "attr.title": "this.title", "attr.alt": "this.alt", "attr.lang": "this.lang", "attr.accesskey": "this.accesskey", "attr.autocomplete": "this.autocomplete", "attr.autofocus": "this.autofocus", "attr.contenteditable": "this.contenteditable", "attr.dir": "this.dir", "attr.draggable": "this.draggable", "attr.enterkeyhint": "this.enterkeyhint", "attr.hidden": "this.hidden", "attr.inputmode": "this.inputmode", "attr.spellcheck": "this.spellcheck", "attr.translate": "this.translate", "attr.aria-multiline": "this.ariaMultiline", "attr.for": "this.for", "attr.form": "this.form", "attr.headers": "this.headers", "attr.placeholder": "this.placeholder", "attr.readonly": "this.readonly", "attr.required": "this.required" } }, queries: [{ propertyName: "labelComponent", predicate: MenubarLabelComponent }, { propertyName: "itemComponentList", predicate: MenubarItemComponent }], viewQueries: [{ propertyName: "menubar", first: true, predicate: ["menubar"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" \n [attr.aria-expanded]=\"menuData && menuData[itemIndex] ? menuData[itemIndex].open ? 'true' : 'false' : 'false'\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [desyAppAccessibility]=\"item\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [desyAppAccessibility]=\"item\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [desyAppAccessibility]=\"item.sub\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\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: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { 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.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "directive", type: i6.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i7.MakeHtmlListPipe, name: "makeHtmlList" }, { kind: "pipe", type: i8.ExternalHrefPipe, name: "externalHref" }] }); }
|
|
624
687
|
}
|
|
625
688
|
__decorate([
|
|
626
689
|
DesyContentChild(),
|
|
@@ -628,7 +691,7 @@ __decorate([
|
|
|
628
691
|
], MenubarComponent.prototype, "labelComponent", void 0);
|
|
629
692
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MenubarComponent, decorators: [{
|
|
630
693
|
type: Component,
|
|
631
|
-
args: [{ selector: 'desy-menubar', template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" aria-expanded=\"false\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-describedby]=\"item.sub.ariaDescribedBy ? item.sub.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.sub.ariaLabelledBy ? item.sub.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.sub.ariaHidden ? item.sub.ariaHidden : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [attr.aria-controls]=\"item.sub.ariaControls ? item.sub.ariaControls : null\"\n [attr.aria-current]=\"item.sub.ariaCurrent ? item.sub.ariaCurrent : null\"\n [attr.aria-live]=\"item.sub.ariaLive ? item.sub.ariaLive : null\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\"\n [attr.aria-errormessage]=\"item.sub.ariaErrorMessage ? item.sub.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.sub.ariaHasPopup ? item.sub.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.sub.ariaModal ? item.sub.ariaModal : null\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n" }]
|
|
694
|
+
args: [{ selector: 'desy-menubar', template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" \n [attr.aria-expanded]=\"menuData && menuData[itemIndex] ? menuData[itemIndex].open ? 'true' : 'false' : 'false'\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [desyAppAccessibility]=\"item\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [desyAppAccessibility]=\"item\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [desyAppAccessibility]=\"item.sub\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n" }]
|
|
632
695
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { idPrefix: [{
|
|
633
696
|
type: Input
|
|
634
697
|
}], items: [{
|
|
@@ -658,45 +721,231 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
658
721
|
}, {
|
|
659
722
|
type: HostBinding,
|
|
660
723
|
args: ['attr.id']
|
|
661
|
-
}],
|
|
724
|
+
}], role: [{
|
|
662
725
|
type: HostBinding,
|
|
663
726
|
args: ['attr.role']
|
|
664
|
-
}],
|
|
727
|
+
}], ariaLabel: [{
|
|
665
728
|
type: HostBinding,
|
|
666
729
|
args: ['attr.aria-label']
|
|
667
|
-
}],
|
|
730
|
+
}], ariaDescribedBy: [{
|
|
668
731
|
type: HostBinding,
|
|
669
732
|
args: ['attr.aria-describedby']
|
|
670
|
-
}],
|
|
733
|
+
}], ariaLabelledBy: [{
|
|
671
734
|
type: HostBinding,
|
|
672
735
|
args: ['attr.aria-labelledby']
|
|
673
|
-
}],
|
|
736
|
+
}], ariaHidden: [{
|
|
674
737
|
type: HostBinding,
|
|
675
738
|
args: ['attr.aria-hidden']
|
|
676
|
-
}],
|
|
739
|
+
}], ariaDisabled: [{
|
|
677
740
|
type: HostBinding,
|
|
678
741
|
args: ['attr.aria-disabled']
|
|
679
|
-
}],
|
|
742
|
+
}], ariaControls: [{
|
|
680
743
|
type: HostBinding,
|
|
681
744
|
args: ['attr.aria-controls']
|
|
682
|
-
}],
|
|
745
|
+
}], ariaCurrent: [{
|
|
683
746
|
type: HostBinding,
|
|
684
747
|
args: ['attr.aria-current']
|
|
685
|
-
}],
|
|
748
|
+
}], ariaLive: [{
|
|
686
749
|
type: HostBinding,
|
|
687
750
|
args: ['attr.aria-live']
|
|
688
|
-
}],
|
|
751
|
+
}], ariaExpanded: [{
|
|
689
752
|
type: HostBinding,
|
|
690
753
|
args: ['attr.aria-expanded']
|
|
691
|
-
}],
|
|
754
|
+
}], ariaErrorMessage: [{
|
|
692
755
|
type: HostBinding,
|
|
693
756
|
args: ['attr.aria-errormessage']
|
|
694
|
-
}],
|
|
757
|
+
}], ariaHasPopup: [{
|
|
695
758
|
type: HostBinding,
|
|
696
759
|
args: ['attr.aria-haspopup']
|
|
697
|
-
}],
|
|
760
|
+
}], ariaModal: [{
|
|
698
761
|
type: HostBinding,
|
|
699
762
|
args: ['attr.aria-modal']
|
|
763
|
+
}], ariaChecked: [{
|
|
764
|
+
type: HostBinding,
|
|
765
|
+
args: ['attr.aria-checked']
|
|
766
|
+
}], ariaPressed: [{
|
|
767
|
+
type: HostBinding,
|
|
768
|
+
args: ['attr.aria-pressed']
|
|
769
|
+
}], ariaReadonly: [{
|
|
770
|
+
type: HostBinding,
|
|
771
|
+
args: ['attr.aria-readonly']
|
|
772
|
+
}], ariaRequired: [{
|
|
773
|
+
type: HostBinding,
|
|
774
|
+
args: ['attr.aria-required']
|
|
775
|
+
}], ariaSelected: [{
|
|
776
|
+
type: HostBinding,
|
|
777
|
+
args: ['attr.aria-selected']
|
|
778
|
+
}], ariaValuemin: [{
|
|
779
|
+
type: HostBinding,
|
|
780
|
+
args: ['attr.aria-valuemin']
|
|
781
|
+
}], ariaValuemax: [{
|
|
782
|
+
type: HostBinding,
|
|
783
|
+
args: ['attr.aria-valuemax']
|
|
784
|
+
}], ariaValuenow: [{
|
|
785
|
+
type: HostBinding,
|
|
786
|
+
args: ['attr.aria-valuenow']
|
|
787
|
+
}], ariaValuetext: [{
|
|
788
|
+
type: HostBinding,
|
|
789
|
+
args: ['attr.aria-valuetext']
|
|
790
|
+
}], ariaOrientation: [{
|
|
791
|
+
type: HostBinding,
|
|
792
|
+
args: ['attr.aria-orientation']
|
|
793
|
+
}], ariaLevel: [{
|
|
794
|
+
type: HostBinding,
|
|
795
|
+
args: ['attr.aria-level']
|
|
796
|
+
}], ariaMultiselectable: [{
|
|
797
|
+
type: HostBinding,
|
|
798
|
+
args: ['attr.aria-multiselectable']
|
|
799
|
+
}], ariaPlaceholder: [{
|
|
800
|
+
type: HostBinding,
|
|
801
|
+
args: ['attr.aria-placeholder']
|
|
802
|
+
}], ariaPosinset: [{
|
|
803
|
+
type: HostBinding,
|
|
804
|
+
args: ['attr.aria-posinset']
|
|
805
|
+
}], ariaSetsize: [{
|
|
806
|
+
type: HostBinding,
|
|
807
|
+
args: ['attr.aria-setsize']
|
|
808
|
+
}], ariaSort: [{
|
|
809
|
+
type: HostBinding,
|
|
810
|
+
args: ['attr.aria-sort']
|
|
811
|
+
}], ariaBusy: [{
|
|
812
|
+
type: HostBinding,
|
|
813
|
+
args: ['attr.aria-busy']
|
|
814
|
+
}], ariaDropeffect: [{
|
|
815
|
+
type: HostBinding,
|
|
816
|
+
args: ['attr.aria-dropeffect']
|
|
817
|
+
}], ariaGrabbed: [{
|
|
818
|
+
type: HostBinding,
|
|
819
|
+
args: ['attr.aria-grabbed']
|
|
820
|
+
}], ariaActivedescendant: [{
|
|
821
|
+
type: HostBinding,
|
|
822
|
+
args: ['attr.aria-activedescendant']
|
|
823
|
+
}], ariaAtomic: [{
|
|
824
|
+
type: HostBinding,
|
|
825
|
+
args: ['attr.aria-atomic']
|
|
826
|
+
}], ariaAutocomplete: [{
|
|
827
|
+
type: HostBinding,
|
|
828
|
+
args: ['attr.aria-autocomplete']
|
|
829
|
+
}], ariaBraillelabel: [{
|
|
830
|
+
type: HostBinding,
|
|
831
|
+
args: ['attr.aria-braillelabel']
|
|
832
|
+
}], ariaBrailleroledescription: [{
|
|
833
|
+
type: HostBinding,
|
|
834
|
+
args: ['attr.aria-brailleroledescription']
|
|
835
|
+
}], ariaColcount: [{
|
|
836
|
+
type: HostBinding,
|
|
837
|
+
args: ['attr.aria-colcount']
|
|
838
|
+
}], ariaColindex: [{
|
|
839
|
+
type: HostBinding,
|
|
840
|
+
args: ['attr.aria-colindex']
|
|
841
|
+
}], ariaColindextext: [{
|
|
842
|
+
type: HostBinding,
|
|
843
|
+
args: ['attr.aria-colindextext']
|
|
844
|
+
}], ariaColspan: [{
|
|
845
|
+
type: HostBinding,
|
|
846
|
+
args: ['attr.aria-colspan']
|
|
847
|
+
}], ariaDescription: [{
|
|
848
|
+
type: HostBinding,
|
|
849
|
+
args: ['attr.aria-description']
|
|
850
|
+
}], ariaDetails: [{
|
|
851
|
+
type: HostBinding,
|
|
852
|
+
args: ['attr.aria-details']
|
|
853
|
+
}], ariaFlowto: [{
|
|
854
|
+
type: HostBinding,
|
|
855
|
+
args: ['attr.aria-flowto']
|
|
856
|
+
}], ariaInvalid: [{
|
|
857
|
+
type: HostBinding,
|
|
858
|
+
args: ['attr.aria-invalid']
|
|
859
|
+
}], ariaKeyshortcuts: [{
|
|
860
|
+
type: HostBinding,
|
|
861
|
+
args: ['attr.aria-keyshortcuts']
|
|
862
|
+
}], ariaOwns: [{
|
|
863
|
+
type: HostBinding,
|
|
864
|
+
args: ['attr.aria-owns']
|
|
865
|
+
}], ariaRelevant: [{
|
|
866
|
+
type: HostBinding,
|
|
867
|
+
args: ['attr.aria-relevant']
|
|
868
|
+
}], ariaRoledescription: [{
|
|
869
|
+
type: HostBinding,
|
|
870
|
+
args: ['attr.aria-roledescription']
|
|
871
|
+
}], ariaRowcount: [{
|
|
872
|
+
type: HostBinding,
|
|
873
|
+
args: ['attr.aria-rowcount']
|
|
874
|
+
}], ariaRowindex: [{
|
|
875
|
+
type: HostBinding,
|
|
876
|
+
args: ['attr.aria-rowindex']
|
|
877
|
+
}], ariaRowindextext: [{
|
|
878
|
+
type: HostBinding,
|
|
879
|
+
args: ['attr.aria-rowindextext']
|
|
880
|
+
}], ariaRowspan: [{
|
|
881
|
+
type: HostBinding,
|
|
882
|
+
args: ['attr.aria-rowspan']
|
|
883
|
+
}], tabindex: [{
|
|
884
|
+
type: HostBinding,
|
|
885
|
+
args: ['attr.tabindex']
|
|
886
|
+
}], title: [{
|
|
887
|
+
type: HostBinding,
|
|
888
|
+
args: ['attr.title']
|
|
889
|
+
}], alt: [{
|
|
890
|
+
type: HostBinding,
|
|
891
|
+
args: ['attr.alt']
|
|
892
|
+
}], lang: [{
|
|
893
|
+
type: HostBinding,
|
|
894
|
+
args: ['attr.lang']
|
|
895
|
+
}], accesskey: [{
|
|
896
|
+
type: HostBinding,
|
|
897
|
+
args: ['attr.accesskey']
|
|
898
|
+
}], autocomplete: [{
|
|
899
|
+
type: HostBinding,
|
|
900
|
+
args: ['attr.autocomplete']
|
|
901
|
+
}], autofocus: [{
|
|
902
|
+
type: HostBinding,
|
|
903
|
+
args: ['attr.autofocus']
|
|
904
|
+
}], contenteditable: [{
|
|
905
|
+
type: HostBinding,
|
|
906
|
+
args: ['attr.contenteditable']
|
|
907
|
+
}], dir: [{
|
|
908
|
+
type: HostBinding,
|
|
909
|
+
args: ['attr.dir']
|
|
910
|
+
}], draggable: [{
|
|
911
|
+
type: HostBinding,
|
|
912
|
+
args: ['attr.draggable']
|
|
913
|
+
}], enterkeyhint: [{
|
|
914
|
+
type: HostBinding,
|
|
915
|
+
args: ['attr.enterkeyhint']
|
|
916
|
+
}], hidden: [{
|
|
917
|
+
type: HostBinding,
|
|
918
|
+
args: ['attr.hidden']
|
|
919
|
+
}], inputmode: [{
|
|
920
|
+
type: HostBinding,
|
|
921
|
+
args: ['attr.inputmode']
|
|
922
|
+
}], spellcheck: [{
|
|
923
|
+
type: HostBinding,
|
|
924
|
+
args: ['attr.spellcheck']
|
|
925
|
+
}], translate: [{
|
|
926
|
+
type: HostBinding,
|
|
927
|
+
args: ['attr.translate']
|
|
928
|
+
}], ariaMultiline: [{
|
|
929
|
+
type: HostBinding,
|
|
930
|
+
args: ['attr.aria-multiline']
|
|
931
|
+
}], for: [{
|
|
932
|
+
type: HostBinding,
|
|
933
|
+
args: ['attr.for']
|
|
934
|
+
}], form: [{
|
|
935
|
+
type: HostBinding,
|
|
936
|
+
args: ['attr.form']
|
|
937
|
+
}], headers: [{
|
|
938
|
+
type: HostBinding,
|
|
939
|
+
args: ['attr.headers']
|
|
940
|
+
}], placeholder: [{
|
|
941
|
+
type: HostBinding,
|
|
942
|
+
args: ['attr.placeholder']
|
|
943
|
+
}], readonly: [{
|
|
944
|
+
type: HostBinding,
|
|
945
|
+
args: ['attr.readonly']
|
|
946
|
+
}], required: [{
|
|
947
|
+
type: HostBinding,
|
|
948
|
+
args: ['attr.required']
|
|
700
949
|
}], menubar: [{
|
|
701
950
|
type: ViewChild,
|
|
702
951
|
args: ['menubar', { read: ElementRef }]
|
|
@@ -710,4 +959,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
710
959
|
type: ContentChildren,
|
|
711
960
|
args: [MenubarItemComponent]
|
|
712
961
|
}] } });
|
|
713
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNVLGlCQUFpQixFQUNoQyxTQUFTLEVBQUUsZUFBZSxFQUMxQixVQUFVLEVBQUUsWUFBWSxFQUN4QixXQUFXLEVBQ1gsS0FBSyxFQUNNLE1BQU0sRUFDakIsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUlqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7O0FBTTFFLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxzQkFBc0I7SUErQzFELFlBQW9CLGlCQUFvQztRQUN0RCxLQUFLLEVBQUUsQ0FBQztR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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Rlc3ktZm9ybXMvY29tcG9uZW50cy9sYWJlbC9sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGFiZWxEYXRhIH0gZnJvbSAnLi4vLi4vLi4vZGVzeS1mb3Jtcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBEZXN5Q29udGVudENoaWxkIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RlY29yYXRvcnMvZGVzeS1jb250ZW50LWNoaWxkLmRlY29yYXRvcic7XG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9zdHJpbmctdXRpbHMnO1xuaW1wb3J0IHsgTWVudWJhckl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnViYXItaXRlbSc7XG5pbXBvcnQgeyBNZW51YmFySXRlbVN1Ykl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnViYXItaXRlbS1zdWItaXRlbSc7XG5pbXBvcnQgeyBNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51YmFyLWl0ZW0tc3ViLWl0ZW0tc3ViLWl0ZW0nO1xuaW1wb3J0IHsgTWVudWJhckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudWJhci1pdGVtL21lbnViYXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudWJhckxhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItbGFiZWwvbWVudWJhci1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudWJhclN1Yml0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudWJhci1zdWJpdGVtL21lbnViYXItc3ViaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudWJhclN1YnN1Yml0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudWJhci1zdWJzdWJpdGVtL21lbnViYXItc3Vic3ViaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudWJhcml0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvbWVudWJhcml0ZW0uZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGVzeS1tZW51YmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnViYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnViYXJDb21wb25lbnQgZXh0ZW5kcyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuICBASW5wdXQoKSBpZFByZWZpeDogc3RyaW5nO1xuICBASW5wdXQoKSBpdGVtczogTWVudWJhckl0ZW1bXTtcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51YmFySXRlbVtdPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlSXRlbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudWJhckl0ZW0+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVTdWJJdGVtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51YmFySXRlbVN1Ykl0ZW18TWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbT4oKTtcblxuICAvKipcbiAgICogbGFiZWwsIGRpZmVyZW50ZXMgZm9ybWFzIGRlIGltcGxlbWVudGFyLCBlbnVtZXJhZGFzIHBvciBwcmlvcmlkYWRcbiAgICogMSkgaW5jbHVpciBjb21wb25lbnRlIG1lbnViYXItbGFiZWwgYW5pZGFkb1xuICAgKiAyKSBpbmNsdWlyIHRlbXBsYXRlXG4gICAqIDMpIGluY2x1aXIgb2JqZXRvIGxhYmVsIChpbnRlcmZheiBleHB1ZXN0YSlcbiAgICogNCkgaW5jbHVpciBsZWdlbmRUZXh0IC0gaW5jbHVpciB1biBsYWJlbCBjb24gc29sbyB1biB0ZXh0b1xuICAgKi9cbiAgQElucHV0KCkgbGFiZWxSZWY6IFRlbXBsYXRlUmVmPExhYmVsQ29tcG9uZW50PjtcbiAgQElucHV0KCkgbGFiZWxEYXRhOiBMYWJlbERhdGE7XG4gIEBJbnB1dCgpIGxhYmVsVGV4dDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzc2VzOiBhbnk7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYy1tZW51YmFyJykgY2ZnID0gdHJ1ZVxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBpZDogYW55O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZURhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWxEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZGJ5RGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkYnlEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW5EYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sc0RhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50RGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmVEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JtZXNzYWdlRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNwb3B1cERhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWxEYXRhOiBhbnlcblxuICBAVmlld0NoaWxkKCdtZW51YmFyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG1lbnViYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGRyZW4oTWVudWJhcml0ZW1EaXJlY3RpdmUpIG1lbnVJdGVtczogUXVlcnlMaXN0PE1lbnViYXJpdGVtRGlyZWN0aXZlPjtcbiAgQERlc3lDb250ZW50Q2hpbGQoKSBAQ29udGVudENoaWxkcmVuKE1lbnViYXJMYWJlbENvbXBvbmVudCkgbGFiZWxDb21wb25lbnQ6IE1lbnViYXJMYWJlbENvbXBvbmVudDtcbiAgQENvbnRlbnRDaGlsZHJlbihNZW51YmFySXRlbUNvbXBvbmVudCkgaXRlbUNvbXBvbmVudExpc3Q6IFF1ZXJ5TGlzdDxNZW51YmFySXRlbUNvbXBvbmVudD47XG5cbiAgbWVudURhdGE6IGFueVtdO1xuICB2aWV3SW5pdCA9IGZhbHNlO1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlcz86IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLnJvbGVEYXRhID0gdGhpcy5yb2xlID8gdGhpcy5yb2xlIDogbnVsbDtcbiAgICB0aGlzLmFyaWFMYWJlbERhdGEgPSB0aGlzLmFyaWFMYWJlbCA/IHRoaXMuYXJpYUxhYmVsIDogbnVsbDtcbiAgICB0aGlzLmFyaWFEZXNjcmliZWRieURhdGEgPSB0aGlzLmFyaWFEZXNjcmliZWRCeSA/IHRoaXMuYXJpYURlc2NyaWJlZEJ5IDogbnVsbDtcbiAgICB0aGlzLmFyaWFMYWJlbGxlZGJ5RGF0YSA9IHRoaXMuYXJpYUxhYmVsbGVkQnkgPyB0aGlzLmFyaWFMYWJlbGxlZEJ5IDogbnVsbDtcbiAgICB0aGlzLmFyaWFIaWRkZW5EYXRhID0gdGhpcy5hcmlhSGlkZGVuID8gdGhpcy5hcmlhSGlkZGVuIDogbnVsbDtcbiAgICB0aGlzLmFyaWFEaXNhYmxlZERhdGEgPSB0aGlzLmFyaWFEaXNhYmxlZCA/IHRoaXMuYXJpYURpc2FibGVkIDogbnVsbDtcbiAgICB0aGlzLmFyaWFDb250cm9sc0RhdGEgPSB0aGlzLmFyaWFDb250cm9scyA/IHRoaXMuYXJpYUNvbnRyb2xzIDogbnVsbDtcbiAgICB0aGlzLmFyaWFDdXJyZW50RGF0YSA9IHRoaXMuYXJpYUN1cnJlbnQgPyB0aGlzLmFyaWFDdXJyZW50IDogbnVsbDtcbiAgICB0aGlzLmFyaWFMaXZlRGF0YSA9IHRoaXMuYXJpYUxpdmUgPyB0aGlzLmFyaWFMaXZlIDogbnVsbDtcbiAgICB0aGlzLmFyaWFFeHBhbmRlZERhdGEgPSB0aGlzLmFyaWFFeHBhbmRlZCA/IHRoaXMuYXJpYUV4cGFuZGVkIDogbnVsbDtcbiAgICB0aGlzLmFyaWFFcnJvcm1lc3NhZ2VEYXRhID0gdGhpcy5hcmlhRXJyb3JNZXNzYWdlID8gdGhpcy5hcmlhRXJyb3JNZXNzYWdlIDogbnVsbDtcbiAgICB0aGlzLmFyaWFIYXNwb3B1cERhdGEgPSB0aGlzLmFyaWFIYXNQb3B1cCA/IHRoaXMuYXJpYUhhc1BvcHVwIDogbnVsbDtcbiAgICB0aGlzLmFyaWFNb2RhbERhdGEgPSB0aGlzLmFyaWFNb2RhbCA/IHRoaXMuYXJpYU1vZGFsIDogbnVsbDtcbiAgICBpZiAodGhpcy52aWV3SW5pdCkge1xuICAgICAgdGhpcy5jaGVja0NoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3SW5pdCA9IHRydWU7XG4gICAgdGhpcy5jaGVja0NoYW5nZXMoKTtcbiAgfVxuXG4gIGNoZWNrQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWVudUl0ZW1zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMubWVudURhdGEgPSBbXTtcbiAgICB0aGlzLmdldEl0ZW1zKCkuZm9yRWFjaCgoXywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1EYXRhID0ge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgY3VycmVudEZvY3VzU3ViSXRlbUluZGV4OiAwLFxuICAgICAgICBjdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg6IDAsXG4gICAgICAgIG1lbnVJdGVtOiB0aGlzLm1lbnVJdGVtcy50b0FycmF5KClbaW5kZXhdXG4gICAgICB9O1xuICAgICAgdGhpcy5tZW51RGF0YS5wdXNoKGl0ZW1EYXRhKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnZpZXdJbml0KSB7XG4gICAgICB0aGlzLmNoZWNrUmVxdWlyZWQoKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGxhc3RDdXJyZW50Rm9jdXNJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggJSBpdGVtcy5sZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9PT0gbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIGhhbmRsZU1lbnVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVGb2N1c091dChldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51YmFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgfVxuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBoYW5kbGVNZW51SXRlbUNsaWNrKGV2ZW50LCBpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW47XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNZW51SXRlbUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleCkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtSW5kZXgsIC0xKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKGl0ZW1JbmRleCwgKzEpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNMYXN0U3ViSXRlbShpdGVtSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdEl0ZW0oKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0xhc3RJdGVtKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNQcmludGFibGVDaGFyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzSXRlbUJ5Rmlyc3RDaGFyKGV2ZW50LmtleSk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCwgdHJ1ZSk7XG4gIH1cblxuICBoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gIH1cblxuICBoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U3ViSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4O1xuICAgIGNvbnN0IGN1cnJlbnRTdWJTdWJJbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICB0aGlzLmFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMubXVzdENsb3NlQWZ0ZXJTZWxlY3RQb3B1cEl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGN1cnJlbnRTdWJJbmRleCwgY3VycmVudFN1YlN1YkluZGV4LCAtMSk7XG4gICAgICAgIC8vIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgKGN1cnJlbnRTdWJJbmRleCArIGxpc3RMZW5ndGggLSAxKSAlIGxpc3RMZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGN1cnJlbnRTdWJJbmRleCwgY3VycmVudFN1YlN1YkluZGV4LCArMSk7XG4gICAgICAgIC8vIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgKGN1cnJlbnRTdWJJbmRleCArIGxpc3RMZW5ndGggKyAxKSAlIGxpc3RMZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKChpdGVtSW5kZXggKyBpdGVtcy5sZW5ndGggLSAxKSAlIGl0ZW1zLmxlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKChpdGVtSW5kZXggKyBpdGVtcy5sZW5ndGggKyAxKSAlIGl0ZW1zLmxlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICB0aGlzLmZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgdGhpcy5mb2N1c0xhc3RTdWJJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlzUHJpbnRhYmxlQ2hhcihldmVudC5rZXkpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW1CeUZpcnN0Q2hhcihpdGVtSW5kZXgsIGV2ZW50LmtleSk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gIH1cblxuICAvKlxuICAgKiBDb211bmVzXG4gICAqL1xuXG4gIGNoZWNrUmVxdWlyZWQoKTogdm9pZCB7XG5cblxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuXG4gICAgLy8gTm8gc2UgaGEgcHVlc3RvIGxhYmVsIHJlcXVpcmVkIHBvcnF1ZSBlbiBhbGd1bm9zIGVqZW1wbG9zIGRlIGRlc3ktaHRtbCBubyBhcGFyZWNlXG4gIH1cblxuXG4gIGFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UuZW1pdChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnViYXJJdGVtKTtcbiAgICBpZiAoaXRlbXNbaXRlbUluZGV4XSBpbnN0YW5jZW9mIE1lbnViYXJJdGVtQ29tcG9uZW50KSB7XG4gICAgICAoaXRlbXNbaXRlbUluZGV4XSBhcyBNZW51YmFySXRlbUNvbXBvbmVudCkuc2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgbGV0IGl0ZW06IE1lbnViYXJJdGVtU3ViSXRlbXxNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcbiAgICBsZXQgc3ViU3ViSXRlbXMgPSBbXTtcbiAgICBpZiAoc3ViU3ViSXRlbUluZGV4ICE9PSBudWxsICYmIHN1YlN1Ykl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKGl0ZW0pO1xuICAgICAgaXRlbSA9IHN1YlN1Ykl0ZW1zW3N1YlN1Ykl0ZW1JbmRleF07XG4gICAgfVxuXG4gICAgbGV0IGNoZWNrZWRDaGFuZ2UgPSBmYWxzZTtcbiAgICBpZiAoaXRlbS5yb2xlID09PSAnbWVudWl0ZW1jaGVja2JveCcpIHtcbiAgICAgIGl0ZW0uY2hlY2tlZCA9ICFpdGVtLmNoZWNrZWQ7XG4gICAgICBjaGVja2VkQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0ucm9sZSA9PT0gJ21lbnVpdGVtcmFkaW8nKSB7XG4gICAgICBjaGVja2VkQ2hhbmdlID0gIWl0ZW0uY2hlY2tlZDtcbiAgICAgIHN1YlN1Ykl0ZW1zLmZvckVhY2goaSA9PiBpLmNoZWNrZWQgPSBmYWxzZSk7XG4gICAgICBpdGVtLmNoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgdGhpcy5hY3RpdmVTdWJJdGVtQ2hhbmdlLmVtaXQoaXRlbSBhcyBNZW51YmFySXRlbSk7XG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNZW51YmFyU3ViaXRlbUNvbXBvbmVudCB8fCBpdGVtIGluc3RhbmNlb2YgTWVudWJhclN1YnN1Yml0ZW1Db21wb25lbnQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuZW1pdCgpO1xuXG4gICAgICBpZiAoY2hlY2tlZENoYW5nZSkge1xuICAgICAgICBpdGVtLmNoZWNrZWRDaGFuZ2UuZW1pdChpdGVtLmNoZWNrZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG11c3RDbG9zZUFmdGVyU2VsZWN0UG9wdXBJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuICAgIGlmIChzdWJTdWJJdGVtSW5kZXggIT09IG51bGwgJiYgc3ViU3ViSXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpdGVtID0gc3ViU3ViSXRlbXNbc3ViU3ViSXRlbUluZGV4XTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbS5yb2xlICE9PSAnbWVudWl0ZW1jaGVja2JveCcgJiYgaXRlbS5yb2xlICE9PSAnbWVudWl0ZW1yYWRpbyc7XG4gIH1cblxuICBvcGVuTWVudShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHdhc09wZW5lZCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuO1xuICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuID0gdHJ1ZTtcbiAgICBpZiAod2FzT3BlbmVkKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBjbG9zZU1lbnUoaXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGl0ZW1JbmRleCAhPT0gbnVsbCAmJiBpdGVtSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZW51RGF0YS5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5vcGVuID0gZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGhhc1BvcHVwTWVudShpdGVtSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgcmV0dXJuIGl0ZW1zW2l0ZW1JbmRleF0uc3ViICYmIHN1Ykl0ZW1zICYmIHN1Ykl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGlzUHJpbnRhYmxlQ2hhcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdHIubGVuZ3RoID09PSAxICYmICEhc3RyLm1hdGNoKC9cXFMvKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWVudURhdGFJbmRleChpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IG1lbnVEYXRhSW5kZXggPSAwO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJJdGVtSW5kZXg7IGkrKykge1xuICAgICAgY29uc3Qgc3ViSXRlbSA9IHN1Ykl0ZW1zW2ldO1xuICAgICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhzdWJJdGVtKTtcbiAgICAgIG1lbnVEYXRhSW5kZXggKz0gc3ViU3ViSXRlbXMgJiYgc3ViU3ViSXRlbXMubGVuZ3RoID4gMCA/IHN1YlN1Ykl0ZW1zLmxlbmd0aCA6IDE7XG4gICAgfVxuXG4gICAgaWYgKHN1YlN1Ykl0ZW1JbmRleCAhPT0gbnVsbCAmJiBzdWJTdWJJdGVtSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVudURhdGFJbmRleCArPSBzdWJTdWJJdGVtSW5kZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnVEYXRhSW5kZXg7XG4gIH1cblxuICAvKlxuICAgKiBDb211bmVzIC0gZm9jdXNcbiAgICovXG5cbiAgZm9jdXNJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBob3Zlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBoYXNGb2N1cyA9IHRoaXMubWVudWJhci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXhdLm9wZW47XG5cbiAgICBpZiAoIWhvdmVyIHx8IGhhc0ZvY3VzKSB7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ubGluay5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICBpZiAoaXNPcGVuICYmIHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9IGl0ZW1JbmRleDtcbiAgfVxuXG4gIGZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oZnJvbUl0ZW1JbmRleDogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgbmV4dEl0ZW0gPSBmcm9tSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIG5leHRJdGVtID0gKG5leHRJdGVtICsgaXRlbXMubGVuZ3RoICsgc3RlcCkgJSBpdGVtcy5sZW5ndGg7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNJdGVtRm9jdXNhYmxlKG5leHRJdGVtKSAmJiBuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCk7XG5cbiAgICBpZiAobmV4dEl0ZW0gIT09IGZyb21JdGVtSW5kZXgpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHRJdGVtKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoMCkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oMCwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdEl0ZW0oKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgaWYgKHRoaXMuaXNJdGVtRm9jdXNhYmxlKGl0ZW1zLmxlbmd0aCAtIDEpKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShpdGVtcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKGl0ZW1zLmxlbmd0aCAtIDEsIC0xKTtcbiAgICB9XG4gIH1cblxuICBpc0l0ZW1Gb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZ2V0SXRlbXMoKVtpdGVtSW5kZXhdLmRpc2FibGVkO1xuICB9XG5cbiAgZm9jdXNJdGVtQnlGaXJzdENoYXIoY2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUNvbnRlbnRzOiBzdHJpbmdbXSA9IHRoaXMubWVudUl0ZW1zLm1hcChtZW51SXRlbSA9PiBtZW51SXRlbS5pdGVtQ29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICBkbyB7XG4gICAgICBpbmRleCA9IChpbmRleCArIGl0ZW1Db250ZW50cy5sZW5ndGggKyAxKSAlIGl0ZW1Db250ZW50cy5sZW5ndGg7XG4gICAgICBpZiAoaXRlbUNvbnRlbnRzW2luZGV4XSAmJiBpdGVtQ29udGVudHNbaW5kZXhdLnRyaW0oKS5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSA9PT0gY2hhci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgJiYgdGhpcy5pc0l0ZW1Gb2N1c2FibGUoaW5kZXgpKSB7XG4gICAgICAgIGZvdW5kSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZEluZGV4ID09PSAtMSAmJiBpbmRleCAhPT0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXgpO1xuXG4gICAgaWYgKGZvdW5kSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oZm91bmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtZW51RGF0YUluZGV4ID0gdGhpcy5nZXRNZW51RGF0YUluZGV4KGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuXG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID0gc3ViSXRlbUluZGV4O1xuICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9IHN1YlN1Ykl0ZW1JbmRleDtcbiAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ucG9wdXBNZW51SXRlbXMudG9BcnJheSgpW21lbnVEYXRhSW5kZXhdLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoZWxlbSkge1xuICAgICAgICBlbGVtLmZvY3VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzdWJpdGVtIHRvIGZvY3VzJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1Yml0ZW1zJyk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXg6IG51bWJlciwgZnJvbUl0ZW1TdWJJbmRleDogbnVtYmVyLCBmcm9tSXRlbVN1YlN1YkluZGV4OiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBuZXh0U3ViSW5kZXggPSBmcm9tSXRlbVN1YkluZGV4O1xuICAgIGxldCBuZXh0U3ViU3ViSW5kZXggPSBmcm9tSXRlbVN1YlN1YkluZGV4O1xuICAgIGxldCBhbGxTdWJJdGVtc0NoZWNrZWQ7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgY29uc3QgbmV4dEluZGV4ZXMgPSB0aGlzLmdldE5leHRTdWJJdGVtSW5kZXhlcyhpdGVtcywgaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCwgc3RlcCk7XG4gICAgICBuZXh0U3ViSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJJbmRleDtcbiAgICAgIG5leHRTdWJTdWJJbmRleCA9IG5leHRJbmRleGVzLnN1YlN1YkluZGV4O1xuICAgICAgYWxsU3ViSXRlbXNDaGVja2VkID0gKGZyb21JdGVtU3ViSW5kZXggPT09IG5leHRTdWJJbmRleCAmJiBmcm9tSXRlbVN1YlN1YkluZGV4ID09PSBuZXh0U3ViU3ViSW5kZXgpO1xuICAgIH0gd2hpbGUgKCF0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIG5leHRTdWJJbmRleCwgbmV4dFN1YlN1YkluZGV4KSAmJiAhYWxsU3ViSXRlbXNDaGVja2VkKTtcblxuICAgIGlmICghYWxsU3ViSXRlbXNDaGVja2VkKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIG5leHRTdWJJbmRleCwgbmV4dFN1YlN1YkluZGV4KTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBmaXJzdFN1YlN1Ykl0ZW0gPSBudWxsO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhzdWJJdGVtc1swXSk7XG4gICAgaWYgKHN1YlN1Ykl0ZW1zICYmIHN1YlN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpcnN0U3ViU3ViSXRlbSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgMCwgZmlyc3RTdWJTdWJJdGVtKSkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0sICsxKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0xhc3RTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBjb25zdCBsYXN0SXRlbUluZGV4ID0gc3ViSXRlbXMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBsYXN0SXRlbSA9IHN1Ykl0ZW1zW2xhc3RJdGVtSW5kZXhdO1xuICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMobGFzdEl0ZW0pO1xuICAgIGxldCBsYXN0U3ViU3ViSXRlbSA9IG51bGw7XG4gICAgaWYgKHN1YlN1Ykl0ZW1zICYmIHN1YlN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RTdWJTdWJJdGVtID0gc3ViU3ViSXRlbXMubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSkpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCwgbGFzdFN1YlN1Ykl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSwgLTEpO1xuICAgIH1cbiAgfVxuXG4gIGlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgbGV0IGl0ZW06IE1lbnViYXJJdGVtU3ViSXRlbXxNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcbiAgICBpZiAoc3ViU3ViSXRlbUluZGV4ICE9PSBudWxsICYmIHN1YlN1Ykl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKGl0ZW0pO1xuICAgICAgaXRlbSA9IHN1YlN1Ykl0ZW1zW3N1YlN1Ykl0ZW1JbmRleF07XG4gICAgfVxuXG4gICAgbGV0IGlzRm9jdXNhYmxlID0gZmFsc2U7XG4gICAgaWYgKGl0ZW0ucm9sZSAhPT0gJ3NlcGFyYXRvcicgJiYgaXRlbS5yb2xlICE9PSAnbm9uZScpIHtcbiAgICAgIGlzRm9jdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNGb2N1c2FibGU7XG4gIH1cblxuICBmb2N1c1N1Ykl0ZW1CeUZpcnN0Q2hhcihpdGVtSW5kZXg6IG51bWJlciwgY2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUNvbnRlbnRzOiBzdHJpbmdbXSA9IHRoaXMubWVudUl0ZW1zLnRvQXJyYXkoKVtpdGVtSW5kZXhdLnBvcHVwTWVudUl0ZW1zLm1hcChtZW51SXRlbSA9PiBtZW51SXRlbS5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICBsZXQgc3ViSXRlbUluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDtcbiAgICBsZXQgc3ViU3ViSXRlbUluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDtcbiAgICBsZXQgZm91bmRTdWJJbmRleCA9IC0xO1xuICAgIGxldCBmb3VuZFN1YlN1YkluZGV4ID0gbnVsbDtcbiAgICBsZXQgYWxsU3ViSXRlbXNDaGVja2VkID0gZmFsc2U7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgY29uc3QgbmV4dEluZGV4ZXMgPSB0aGlzLmdldE5leHRTdWJJdGVtSW5kZXhlcyhpdGVtcywgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCwgKzEpO1xuICAgICAgc3ViSXRlbUluZGV4ID0gbmV4dEluZGV4ZXMuc3ViSW5kZXg7XG4gICAgICBzdWJTdWJJdGVtSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJTdWJJbmRleDtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRNZW51RGF0YUluZGV4KGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgaWYgKGl0ZW1Db250ZW50c1tpbmRleF0gJiYgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICYmIHRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpKSB7XG4gICAgICAgIGZvdW5kU3ViSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICAgIGZvdW5kU3ViU3ViSW5kZXggPSBzdWJTdWJJdGVtSW5kZXg7XG4gICAgICB9XG4gICAgICBhbGxTdWJJdGVtc0NoZWNrZWQgPSAodGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleCA9PT0gc3ViSXRlbUluZGV4XG4gICAgICAgICYmIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXggPT09IHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgfSB3aGlsZSAoZm91bmRTdWJJbmRleCA9PT0gLTEgJiYgIWFsbFN1Ykl0ZW1zQ2hlY2tlZCk7XG5cbiAgICBpZiAoZm91bmRTdWJJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIGZvdW5kU3ViSW5kZXgsIGZvdW5kU3ViU3ViSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIE1ldG9kb3MgcGFyYSBmYWNpbGl0YXIgY29udGVuaWRvXG4gICAqL1xuXG4gIGdldEl0ZW1zKCk6IE1lbnViYXJJdGVtW118TWVudWJhckl0ZW1Db21wb25lbnRbXSB7XG4gICAgbGV0IGl0ZW1zO1xuICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRMaXN0ICYmIHRoaXMuaXRlbUNvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbXMgPSB0aGlzLml0ZW1Db21wb25lbnRMaXN0LnRvQXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBnZXRJdGVtU3ViaXRlbXMoaXRlbTogTWVudWJhckl0ZW18TWVudWJhckl0ZW1Db21wb25lbnQpOiBNZW51YmFySXRlbVN1Ykl0ZW1bXXxNZW51YmFyU3ViaXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgc3ViSXRlbXMgPSBbXTtcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnViYXJJdGVtQ29tcG9uZW50KXtcbiAgICAgIHN1Ykl0ZW1zID0gaXRlbS5nZXRTdWJJdGVtcygpO1xuICAgIH1cblxuICAgIGlmICghc3ViSXRlbXMgfHwgc3ViSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdWJJdGVtcyA9IGl0ZW0uc3ViID8gaXRlbS5zdWIuaXRlbXMgOiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3ViSXRlbXM7XG4gIH1cblxuICBnZXRTdWJJdGVtU3ViaXRlbXMoaXRlbTogTWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJTdWJpdGVtQ29tcG9uZW50KTogTWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbVtdfE1lbnViYXJTdWJzdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuXG4gICAgaWYgKGl0ZW0ucm9sZSA9PT0gJ2dyb3VwJykge1xuICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNZW51YmFyU3ViaXRlbUNvbXBvbmVudCkge1xuICAgICAgICBzdWJJdGVtcyA9IGl0ZW0uZ2V0U3ViSXRlbXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzdWJJdGVtcyB8fCBzdWJJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc3ViSXRlbXMgPSBpdGVtLml0ZW1zID8gaXRlbS5pdGVtcyA6IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldE5leHRTdWJJdGVtSW5kZXhlcyhpdGVtcywgaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCwgc3RlcCk6IHsgc3ViSW5kZXg6IG51bWJlciwgc3ViU3ViSW5kZXg/OiBudW1iZXJ9IHtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbXNbbmV4dFN1YkluZGV4XSk7XG5cbiAgICBsZXQgY2hlY2tOZXh0U3ViSXRlbSA9IHRydWU7XG4gICAgaWYgKHN1YlN1Ykl0ZW1zICYmIHN1YlN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChuZXh0U3ViU3ViSW5kZXggKyBzdGVwID49IDAgJiYgbmV4dFN1YlN1YkluZGV4ICsgc3RlcCA8IHN1YlN1Ykl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBuZXh0U3ViU3ViSW5kZXggKz0gc3RlcDtcbiAgICAgICAgY2hlY2tOZXh0U3ViSXRlbSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGVja05leHRTdWJJdGVtKSB7XG4gICAgICBuZXh0U3ViSW5kZXggPSAobmV4dFN1YkluZGV4ICsgc3RlcCArIHN1Ykl0ZW1zLmxlbmd0aCkgJSBzdWJJdGVtcy5sZW5ndGg7XG4gICAgICBjb25zdCBuZXh0U3ViSXRlbUl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbXNbbmV4dFN1YkluZGV4XSk7XG4gICAgICBpZiAobmV4dFN1Ykl0ZW1JdGVtcyAmJiBuZXh0U3ViSXRlbUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV4dFN1YlN1YkluZGV4ID0gKChzdGVwID4gMCA/IC0xIDogMCkgKyBzdGVwICsgbmV4dFN1Ykl0ZW1JdGVtcy5sZW5ndGgpICUgbmV4dFN1Ykl0ZW1JdGVtcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0U3ViU3ViSW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7c3ViSW5kZXg6IG5leHRTdWJJbmRleCwgc3ViU3ViSW5kZXg6IG5leHRTdWJTdWJJbmRleH07XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnbWVudWJhci1pdGVtJztcbiAgfVxuXG4gIGdldExhYmVsUmVmKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmxhYmVsQ29tcG9uZW50ID8gdGhpcy5sYWJlbENvbXBvbmVudC5nZXRDb250ZW50KCkgOiB0aGlzLmxhYmVsUmVmO1xuICB9XG5cbiAgZ2V0TGFiZWxDb250ZW50KCk6IHN0cmluZyB7XG4gICAgbGV0IGNvbnRlbnQ6IHN0cmluZztcbiAgICBpZiAodGhpcy5sYWJlbERhdGEpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmxhYmVsRGF0YS5odG1sID8gdGhpcy5sYWJlbERhdGEuaHRtbCA6IGA8cD4keyBTdHJpbmdVdGlscy5lc2NhcGVIdG1sKHRoaXMubGFiZWxEYXRhLnRleHQpIH08L3A+YDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGFiZWxUZXh0KSB7XG4gICAgICBjb250ZW50ID0gYDxwPiR7IFN0cmluZ1V0aWxzLmVzY2FwZUh0bWwodGhpcy5sYWJlbFRleHQpIH08L3A+YDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYCR7dGhpcy5nZXRJZFByZWZpeCgpfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0UG9wdXBTdHlsZShpdGVtSW5kZXg6IG51bWJlcik6IG9iamVjdCB7XG4gICAgbGV0IHN0eWxlID0ge307XG4gICAgaWYgKHRoaXMubWVudURhdGEgJiYgaXRlbUluZGV4IDwgdGhpcy5tZW51RGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm1lbnVJdGVtO1xuICAgICAgY29uc3QgcmVjdCA9IG1lbnVJdGVtLmxpbmsubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3Blbikge1xuICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICB0b3A6IChyZWN0LmhlaWdodCAtIDEpICsgJ3B4JyxcbiAgICAgICAgICBsZWZ0OiAnMHB4JyxcbiAgICAgICAgICB6SW5kZXg6IDEwMCxcbiAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgZ2V0U3ViSXRlbUlkKGl0ZW0sIGluZGV4OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICBpZCA9IGl0ZW0uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IGBzdWItJHtwYXJlbnRJZH0tJHsrK2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIGdldFN1YlN1Ykl0ZW1BcmlhQ2hlY2tlZChzdWJzdWJpdGVtKTogc3RyaW5nIHtcbiAgICBsZXQgYXJpYUNoZWNrZWQgPSBudWxsO1xuICAgIGlmIChzdWJzdWJpdGVtLnJvbGUgPT09ICdtZW51aXRlbWNoZWNrYm94JyB8fCBzdWJzdWJpdGVtLnJvbGUgPT09ICdtZW51aXRlbXJhZGlvJykge1xuICAgICAgYXJpYUNoZWNrZWQgPSAhIXN1YnN1Yml0ZW0uY2hlY2tlZDtcbiAgICB9XG4gICAgcmV0dXJuIGFyaWFDaGVja2VkO1xuICB9XG59XG4iLCIgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRMYWJlbFJlZigpXCI+XG4gICAgPGRpdiBbaWRdPVwiaWQgKyAnLWxhYmVsJ1wiIFtjbGFzc109XCJbJ21iLXNtJywgbGFiZWxDb21wb25lbnQgPyBsYWJlbENvbXBvbmVudC5jbGFzc2VzIDogKGxhYmVsRGF0YSA/IGxhYmVsRGF0YS5jbGFzc2VzIDogbnVsbCldIHwgbWFrZUh0bWxMaXN0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0TGFiZWxSZWYoKVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFnZXRMYWJlbFJlZigpICYmIChsYWJlbERhdGEgfHwgbGFiZWxUZXh0KVwiPlxuICAgIDxkaXYgW2lkXT1cImlkICsgJy1sYWJlbCdcIiBbY2xhc3NdPVwiWydtYi1zbScsIGxhYmVsRGF0YSA/IGxhYmVsRGF0YS5jbGFzc2VzIDogbnVsbF0gfCBtYWtlSHRtbExpc3RcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGh0bWw6IGdldExhYmVsQ29udGVudCgpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDx1bCAjbWVudWJhciBbaWRdPVwiaWQgKyAnLW1lbnViYXInXCIgY2xhc3M9XCJsZzpmbGV4IGxnOmZsZXgtd3JhcFwiIHJvbGU9XCJtZW51YmFyXCJcbiAgICAgIChmb2N1c2luKT1cImhhbmRsZU1lbnVGb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cImhhbmRsZU1lbnVGb2N1c091dCgkZXZlbnQpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZvY3VzJzogaXNGb2N1c2VkIH1cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ2V0TGFiZWxSZWYoKSB8fCBsYWJlbERhdGEgfHwgbGFiZWxUZXh0ID8gaWQgKyAnLWxhYmVsJyA6IG51bGxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7IGluZGV4IGFzIGl0ZW1JbmRleFwiPlxuICAgICAgPGxpIGNsYXNzPVwicmVsYXRpdmVcIiByb2xlPVwibm9uZVwiIGRlc3lNZW51YmFyaXRlbSAoY29udGVudENoYW5nZWQpPVwiY2hlY2tDaGFuZ2VzKClcIj5cbiAgICAgICAgPGEgKm5nSWY9XCJpdGVtLnN1YlwiICNsaW5rXG4gICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0taGFzLXNlbGVjdGlvbic6IGl0ZW0uYWN0aXZlfVwiICAgICAgICAgICBcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IChpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbClcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIml0ZW0uYXJpYURlc2NyaWJlZEJ5ID8gaXRlbS5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW0uYXJpYUxhYmVsbGVkQnkgPyBpdGVtLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlbiA/IGl0ZW0uYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlID8gaXRlbS5hcmlhTGl2ZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2UgPyBpdGVtLmFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1tb2RhbF09XCJpdGVtLmFyaWFNb2RhbCA/IGl0ZW0uYXJpYU1vZGFsIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IChpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMSlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZVwiICNpdGVtQ29udGVudFdyYXBwZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiaW5saW5lLWJsb2NrIC1tci0yICBhbGlnbi1taWRkbGUgLW15LXB4XCIgdmlld0JveD1cIjAgMCA5NiA5NlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBmb2N1c2FibGU9XCJmYWxzZVwiIHdpZHRoPVwiMS41ZW1cIiBoZWlnaHQ9XCIxLjVlbVwiPjxnPjxwYXRoIGQ9XCJNNDYuNzEgNTguMDM3YTEuODIzIDEuODIzIDAgMDAyLjU4MSAwTDYyLjA0OCA0NS4yOGExLjgyMyAxLjgyMyAwIDAwLTEuMjktMy4xMTNIMzUuMjQzYTEuODIzIDEuODIzIDAgMDAtMS4yOTEgMy4xMTN6XCIvPjwvZz48L3N2Zz5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIml0ZW0ucm91dGVyTGluayAmJiAhaXRlbS5zdWJcIiAjbGluayAjaXRlbUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgICAgW2lkXT1cImdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA/IGl0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgOiBbXVwiXG4gICAgICAgICAgIFtmcmFnbWVudF09XCJpdGVtLmZyYWdtZW50XCJcbiAgICAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51YmFyX19idXR0b24nLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieydjLW1lbnViYXJfX2J1dHRvbi0tZGlzYWJsZWQnOiBpdGVtLmRpc2FibGVkLCAnYy1tZW51YmFyX19idXR0b24tLWhhcy1zZWxlY3Rpb24nOiBpdGVtLmFjdGl2ZX1cIlxuICAgICAgICAgICBbYXR0ci50aXRsZV09XCJpdGVtLnRpdGxlID8gaXRlbS50aXRsZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogKGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsKVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IChpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMSlcIlxuICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwiaXRlbS50YXJnZXQgPyBpdGVtLnRhcmdldCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIml0ZW0uYXJpYURlc2NyaWJlZEJ5ID8gaXRlbS5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZEJ5XT1cIml0ZW0uYXJpYUxhYmVsbGVkQnkgPyBpdGVtLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlbiA/IGl0ZW0uYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlID8gaXRlbS5hcmlhTGl2ZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uYXJpYUV4cGFuZGVkID8gaXRlbS5hcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiaXRlbS5hcmlhRXJyb3JNZXNzYWdlID8gaXRlbS5hcmlhRXJyb3JNZXNzYWdlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5hcmlhSGFzUG9wdXAgPyBpdGVtLmFyaWFIYXNQb3B1cCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLW1vZGFsXT1cIml0ZW0uYXJpYU1vZGFsID8gaXRlbS5hcmlhTW9kYWwgOiBudWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgaXRlbS5ocmVmICYmICFpdGVtLnN1YlwiICNsaW5rICNpdGVtQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbaHJlZl09XCJpdGVtLmhyZWYgfCBleHRlcm5hbEhyZWZcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0taGFzLXNlbGVjdGlvbic6IGl0ZW0uYWN0aXZlfVwiXG4gICAgICAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGUgPyBpdGVtLnRpdGxlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiAoaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGwpXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiXG4gICAgICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldCA/IGl0ZW0udGFyZ2V0IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaXRlbS5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLmFyaWFEZXNjcmliZWRCeSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkQnldPVwiaXRlbS5hcmlhTGFiZWxsZWRCeSA/IGl0ZW0uYXJpYUxhYmVsbGVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiaXRlbS5hcmlhSGlkZGVuID8gaXRlbS5hcmlhSGlkZGVuIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHMgPyBpdGVtLmFyaWFDb250cm9scyA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5hcmlhQ3VycmVudCA/IGl0ZW0uYXJpYUN1cnJlbnQgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cIml0ZW0uYXJpYUxpdmUgPyBpdGVtLmFyaWFMaXZlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbS5hcmlhRXhwYW5kZWQgPyBpdGVtLmFyaWFFeHBhbmRlZCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2UgPyBpdGVtLmFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLmFyaWFIYXNQb3B1cCA/IGl0ZW0uYXJpYUhhc1BvcHVwIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbW9kYWxdPVwiaXRlbS5hcmlhTW9kYWwgPyBpdGVtLmFyaWFNb2RhbCA6IG51bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG5cbiAgICAgICAgPHVsICpuZ0lmPVwiaXRlbS5zdWIgJiYgZ2V0SXRlbVN1Yml0ZW1zKGl0ZW0pXCIgI3BvcHVwTWVudSByb2xlPVwibWVudVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0UG9wdXBTdHlsZShpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJbJ2MtbWVudWJhcl9fdG9vbHRpcCB3LW1heCBtYXgtdy02NCBoaWRkZW4gYm9yZGVyIGJvcmRlci1uZXV0cmFsLWJhc2Ugc2hhZG93LW1kIGJnLXdoaXRlIHRleHQtc20nLCBpdGVtLnN1Yi5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsID8gaXRlbS5hcmlhTGFiZWwgOiAoaXRlbS5zdWIuYXJpYUxhYmVsID8gaXRlbS5zdWIuYXJpYUxhYmVsIDogbnVsbClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpdGVtLnN1Yi5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLnN1Yi5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpdGVtLnN1Yi5hcmlhTGFiZWxsZWRCeSA/IGl0ZW0uc3ViLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJpdGVtLnN1Yi5hcmlhSGlkZGVuID8gaXRlbS5zdWIuYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLnN1Yi5hcmlhRGlzYWJsZWQgPyBpdGVtLnN1Yi5hcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5zdWIuYXJpYUNvbnRyb2xzID8gaXRlbS5zdWIuYXJpYUNvbnRyb2xzIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5zdWIuYXJpYUN1cnJlbnQgPyBpdGVtLnN1Yi5hcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cIml0ZW0uc3ViLmFyaWFMaXZlID8gaXRlbS5zdWIuYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiISEobWVudURhdGEgJiYgbWVudURhdGFbaXRlbUluZGV4XS5vcGVuKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLnN1Yi5hcmlhRXJyb3JNZXNzYWdlID8gaXRlbS5zdWIuYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLnN1Yi5hcmlhSGFzUG9wdXAgPyBpdGVtLnN1Yi5hcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbW9kYWxdPVwiaXRlbS5zdWIuYXJpYU1vZGFsID8gaXRlbS5zdWIuYXJpYU1vZGFsIDogbnVsbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Ykl0ZW0gb2YgZ2V0SXRlbVN1Yml0ZW1zKGl0ZW0pOyBpbmRleCBhcyBzdWJJdGVtSW5kZXhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN1Ykl0ZW0ucm9sZVwiPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidub25lJ1wiIHJvbGU9XCJub25lXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIiByb2xlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgIDx1bCByb2xlPVwiZ3JvdXBcIiBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdWJJdGVtLmFyaWFMYWJlbCA/IHN1Ykl0ZW0uYXJpYUxhYmVsIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3Vic3ViaXRlbSBvZiBnZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbSk7IGluZGV4IGFzIHN1YnN1YkluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJzdWJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpICNwb3B1cE1lbnVJdGVtIFthdHRyLnJvbGVdPVwic3Vic3ViaXRlbS5yb2xlID8gc3Vic3ViaXRlbS5yb2xlIDogbnVsbFwiICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJzdWJpdGVtLCBzdWJzdWJJbmRleCwgZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YnN1YkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3Vic3ViSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3Vic3ViSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImdldFN1YlN1Ykl0ZW1BcmlhQ2hlY2tlZChzdWJzdWJpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBzdWJzdWJpdGVtLCBodG1sOiBzdWJzdWJpdGVtLmh0bWwsIHRleHQ6IHN1YnN1Yml0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSAjcG9wdXBNZW51SXRlbSAqbmdTd2l0Y2hDYXNlPVwiJ21lbnVpdGVtJ1wiIHJvbGU9XCJtZW51aXRlbVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZSBmb2N1czpiZy1wcmltYXJ5LWJhc2UgZm9jdXM6dGV4dC13aGl0ZSBmb2N1czpvdXRsaW5lLW5vbmVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidtZW51aXRlbWNoZWNrYm94J1wiIHJvbGU9XCJtZW51aXRlbWNoZWNrYm94XCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdWJJdGVtSWQoc3ViSXRlbSwgc3ViSXRlbUluZGV4LCBnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KSlcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIiEhc3ViSXRlbS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3ViSXRlbSwgaHRtbDogc3ViSXRlbS5odG1sLCB0ZXh0OiBzdWJJdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSAjcG9wdXBNZW51SXRlbSAqbmdTd2l0Y2hDYXNlPVwiJ3NlcGFyYXRvcidcIiByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdWJJdGVtSWQoc3ViSXRlbSwgc3ViSXRlbUluZGV4LCBnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS1zbSBib3JkZXItYiBib3JkZXItbmV1dHJhbC1iYXNlXCI+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG4iXX0=
|
|
962
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNVLGlCQUFpQixFQUNoQyxTQUFTLEVBQUUsZUFBZSxFQUMxQixVQUFVLEVBQUUsWUFBWSxFQUN4QixXQUFXLEVBQ1gsS0FBSyxFQUNNLE1BQU0sRUFDakIsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUlqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7OztBQU0xRSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsc0JBQXNCO0lBNkcxRCxZQUFvQixpQkFBb0M7UUFDdEQsS0FBSyxFQUFFLENBQUM7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LGtCQUFrQjtnQkFDRCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0UsUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlO2dCQUVnQixPQUFPO3NCQUFsRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ04sU0FBUztzQkFBNUMsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBQzBCLGNBQWM7c0JBQXJELGVBQWU7dUJBQUMscUJBQXFCO2dCQUNuQixpQkFBaUI7c0JBQXZELGVBQWU7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLCBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvbGFiZWwvbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IExhYmVsRGF0YSB9IGZyb20gJy4uLy4uLy4uL2Rlc3ktZm9ybXMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRGVzeUNvbnRlbnRDaGlsZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgU3RyaW5nVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvc3RyaW5nLXV0aWxzJztcbmltcG9ydCB7IE1lbnViYXJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51YmFyLWl0ZW0nO1xuaW1wb3J0IHsgTWVudWJhckl0ZW1TdWJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51YmFyLWl0ZW0tc3ViLWl0ZW0nO1xuaW1wb3J0IHsgTWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudWJhci1pdGVtLXN1Yi1pdGVtLXN1Yi1pdGVtJztcbmltcG9ydCB7IE1lbnViYXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItaXRlbS9tZW51YmFyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnViYXJMYWJlbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tZW51YmFyLWxhYmVsL21lbnViYXItbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnViYXJTdWJpdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItc3ViaXRlbS9tZW51YmFyLXN1Yml0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnViYXJTdWJzdWJpdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItc3Vic3ViaXRlbS9tZW51YmFyLXN1YnN1Yml0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnViYXJpdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL21lbnViYXJpdGVtLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktbWVudWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51YmFyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNZW51YmFyQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgQElucHV0KCkgaXRlbXM6IE1lbnViYXJJdGVtW107XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudWJhckl0ZW1bXT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnViYXJJdGVtPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlU3ViSXRlbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0+KCk7XG5cbiAgLyoqXG4gICAqIGxhYmVsLCBkaWZlcmVudGVzIGZvcm1hcyBkZSBpbXBsZW1lbnRhciwgZW51bWVyYWRhcyBwb3IgcHJpb3JpZGFkXG4gICAqIDEpIGluY2x1aXIgY29tcG9uZW50ZSBtZW51YmFyLWxhYmVsIGFuaWRhZG9cbiAgICogMikgaW5jbHVpciB0ZW1wbGF0ZVxuICAgKiAzKSBpbmNsdWlyIG9iamV0byBsYWJlbCAoaW50ZXJmYXogZXhwdWVzdGEpXG4gICAqIDQpIGluY2x1aXIgbGVnZW5kVGV4dCAtIGluY2x1aXIgdW4gbGFiZWwgY29uIHNvbG8gdW4gdGV4dG9cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsUmVmOiBUZW1wbGF0ZVJlZjxMYWJlbENvbXBvbmVudD47XG4gIEBJbnB1dCgpIGxhYmVsRGF0YTogTGFiZWxEYXRhO1xuICBASW5wdXQoKSBsYWJlbFRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NlczogYW55O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmMtbWVudWJhcicpIGNmZyA9IHRydWVcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgaWQ6IGFueTtcbiAgXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW46IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNQb3B1cDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNoZWNrZWQnKSBhcmlhQ2hlY2tlZDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcHJlc3NlZCcpIGFyaWFQcmVzc2VkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yZWFkb25seScpIGFyaWFSZWFkb25seTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVxdWlyZWQnKSBhcmlhUmVxdWlyZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJykgYXJpYVNlbGVjdGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpIGFyaWFWYWx1ZW1pbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKSBhcmlhVmFsdWVtYXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JykgYXJpYVZhbHVlbm93OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZXRleHQnKSBhcmlhVmFsdWV0ZXh0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vcmllbnRhdGlvbicpIGFyaWFPcmllbnRhdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKSBhcmlhTGV2ZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZScpIGFyaWFNdWx0aXNlbGVjdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXBsYWNlaG9sZGVyJykgYXJpYVBsYWNlaG9sZGVyOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1wb3NpbnNldCcpIGFyaWFQb3NpbnNldDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2V0c2l6ZScpIGFyaWFTZXRzaXplOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zb3J0JykgYXJpYVNvcnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWJ1c3knKSBhcmlhQnVzeTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZHJvcGVmZmVjdCcpIGFyaWFEcm9wZWZmZWN0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1ncmFiYmVkJykgYXJpYUdyYWJiZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSBhcmlhQWN0aXZlZGVzY2VuZGFudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXRvbWljJykgYXJpYUF0b21pYzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJykgYXJpYUF1dG9jb21wbGV0ZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZWxhYmVsJykgYXJpYUJyYWlsbGVsYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbicpIGFyaWFCcmFpbGxlcm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb2xjb3VudCcpIGFyaWFDb2xjb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29saW5kZXgnKSBhcmlhQ29saW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbGluZGV4dGV4dCcpIGFyaWFDb2xpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbHNwYW4nKSBhcmlhQ29sc3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpcHRpb24nKSBhcmlhRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRldGFpbHMnKSBhcmlhRGV0YWlsczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZmxvd3RvJykgYXJpYUZsb3d0bzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpIGFyaWFJbnZhbGlkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1rZXlzaG9ydGN1dHMnKSBhcmlhS2V5c2hvcnRjdXRzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJykgYXJpYU93bnM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlbGV2YW50JykgYXJpYVJlbGV2YW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBhcmlhUm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb3djb3VudCcpIGFyaWFSb3djb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm93aW5kZXgnKSBhcmlhUm93aW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd2luZGV4dGV4dCcpIGFyaWFSb3dpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd3NwYW4nKSBhcmlhUm93c3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgdGFiaW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYWx0JykgYWx0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubGFuZycpIGxhbmc6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hY2Nlc3NrZXknKSBhY2Nlc3NrZXk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKSBhdXRvY29tcGxldGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvZm9jdXMnKSBhdXRvZm9jdXM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5jb250ZW50ZWRpdGFibGUnKSBjb250ZW50ZWRpdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXInKSBkaXI6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5lbnRlcmtleWhpbnQnKSBlbnRlcmtleWhpbnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5oaWRkZW4nKSBoaWRkZW46IGJvb2xlYW4gPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaW5wdXRtb2RlJykgaW5wdXRtb2RlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3BlbGxjaGVjaycpIHNwZWxsY2hlY2s6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50cmFuc2xhdGUnKSB0cmFuc2xhdGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpbGluZScpIGFyaWFNdWx0aWxpbmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3InKSBmb3I6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3JtJykgZm9ybTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhlYWRlcnMnKSBoZWFkZXJzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlYWRvbmx5JykgcmVhZG9ubHk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5yZXF1aXJlZCcpIHJlcXVpcmVkOiBzdHJpbmcgPSBudWxsO1xuXG4gIEBWaWV3Q2hpbGQoJ21lbnViYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbWVudWJhcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbihNZW51YmFyaXRlbURpcmVjdGl2ZSkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8TWVudWJhcml0ZW1EaXJlY3RpdmU+O1xuICBARGVzeUNvbnRlbnRDaGlsZCgpIEBDb250ZW50Q2hpbGRyZW4oTWVudWJhckxhYmVsQ29tcG9uZW50KSBsYWJlbENvbXBvbmVudDogTWVudWJhckxhYmVsQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkcmVuKE1lbnViYXJJdGVtQ29tcG9uZW50KSBpdGVtQ29tcG9uZW50TGlzdDogUXVlcnlMaXN0PE1lbnViYXJJdGVtQ29tcG9uZW50PjtcblxuICBtZW51RGF0YTogYW55W107XG4gIHZpZXdJbml0ID0gZmFsc2U7XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgY3VycmVudEZvY3VzSXRlbUluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzPzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXdJbml0KSB7XG4gICAgICB0aGlzLmNoZWNrQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdJbml0ID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQ2hhbmdlcygpO1xuICB9XG5cbiAgY2hlY2tDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51SXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5tZW51RGF0YSA9IFtdO1xuICAgIHRoaXMuZ2V0SXRlbXMoKS5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXRlbURhdGEgPSB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBjdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg6IDAsXG4gICAgICAgIGN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDogMCxcbiAgICAgICAgbWVudUl0ZW06IHRoaXMubWVudUl0ZW1zLnRvQXJyYXkoKVtpbmRleF1cbiAgICAgIH07XG4gICAgICB0aGlzLm1lbnVEYXRhLnB1c2goaXRlbURhdGEpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZCgpO1xuICAgIH1cblxuXG4gICAgY29uc3QgbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGlmIChpdGVtcykge1xuICAgICAgd2hpbGUgKCF0aGlzLmlzSXRlbUZvY3VzYWJsZSh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCAlIGl0ZW1zLmxlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggPSAodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggKyBpdGVtcy5sZW5ndGggKyAxKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID09PSBsYXN0Q3VycmVudEZvY3VzSXRlbUluZGV4KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qXG4gICAqIEV2ZW50b3NcbiAgICovXG5cbiAgaGFuZGxlTWVudUZvY3VzSW4oKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFuZGxlTWVudUZvY3VzT3V0KGV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1lbnViYXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICB9XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVJdGVtQ2xpY2soZXZlbnQsIGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBpc09wZW4gPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbjtcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICBpZiAoIWlzT3Blbikge1xuICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShpdGVtSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1lbnVJdGVtS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4KSk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKGl0ZW1JbmRleCwgLTEpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbUluZGV4LCArMSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0xhc3RTdWJJdGVtKGl0ZW1JbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0ZpcnN0SXRlbSgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzTGFzdEl0ZW0oKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5pc1ByaW50YWJsZUNoYXIoZXZlbnQua2V5KSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNJdGVtQnlGaXJzdENoYXIoZXZlbnQua2V5KTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4LCB0cnVlKTtcbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdWJJbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg7XG4gICAgY29uc3QgY3VycmVudFN1YlN1YkluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnICc6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5tdXN0Q2xvc2VBZnRlclNlbGVjdFBvcHVwSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsIC0xKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCAtIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsICsxKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCArIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCAtIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCArIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNQcmludGFibGVDaGFyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleCwgZXZlbnQua2V5KTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbXVuZXNcbiAgICovXG5cbiAgY2hlY2tSZXF1aXJlZCgpOiB2b2lkIHtcblxuXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG5cbiAgICAvLyBObyBzZSBoYSBwdWVzdG8gbGFiZWwgcmVxdWlyZWQgcG9ycXVlIGVuIGFsZ3Vub3MgZWplbXBsb3MgZGUgZGVzeS1odG1sIG5vIGFwYXJlY2VcbiAgfVxuXG5cbiAgYWN0aXZhdGVNZW51SXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIHRoaXMuYWN0aXZlSXRlbUNoYW5nZS5lbWl0KGl0ZW1zW2l0ZW1JbmRleF0gYXMgTWVudWJhckl0ZW0pO1xuICAgIGlmIChpdGVtc1tpdGVtSW5kZXhdIGluc3RhbmNlb2YgTWVudWJhckl0ZW1Db21wb25lbnQpIHtcbiAgICAgIChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnViYXJJdGVtQ29tcG9uZW50KS5zZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuICAgIGxldCBzdWJTdWJJdGVtcyA9IFtdO1xuICAgIGlmIChzdWJTdWJJdGVtSW5kZXggIT09IG51bGwgJiYgc3ViU3ViSXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpdGVtID0gc3ViU3ViSXRlbXNbc3ViU3ViSXRlbUluZGV4XTtcbiAgICB9XG5cbiAgICBsZXQgY2hlY2tlZENoYW5nZSA9IGZhbHNlO1xuICAgIGlmIChpdGVtLnJvbGUgPT09ICdtZW51aXRlbWNoZWNrYm94Jykge1xuICAgICAgaXRlbS5jaGVja2VkID0gIWl0ZW0uY2hlY2tlZDtcbiAgICAgIGNoZWNrZWRDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXRlbS5yb2xlID09PSAnbWVudWl0ZW1yYWRpbycpIHtcbiAgICAgIGNoZWNrZWRDaGFuZ2UgPSAhaXRlbS5jaGVja2VkO1xuICAgICAgc3ViU3ViSXRlbXMuZm9yRWFjaChpID0+IGkuY2hlY2tlZCA9IGZhbHNlKTtcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICB0aGlzLmFjdGl2ZVN1Ykl0ZW1DaGFuZ2UuZW1pdChpdGVtIGFzIE1lbnViYXJJdGVtKTtcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnViYXJTdWJpdGVtQ29tcG9uZW50IHx8IGl0ZW0gaW5zdGFuY2VvZiBNZW51YmFyU3Vic3ViaXRlbUNvbXBvbmVudCkge1xuICAgICAgaXRlbS5zZWxlY3RlZC5lbWl0KCk7XG5cbiAgICAgIGlmIChjaGVja2VkQ2hhbmdlKSB7XG4gICAgICAgIGl0ZW0uY2hlY2tlZENoYW5nZS5lbWl0KGl0ZW0uY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbXVzdENsb3NlQWZ0ZXJTZWxlY3RQb3B1cEl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51YmFySXRlbVN1Ykl0ZW18TWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbSA9IHN1Ykl0ZW1zW3N1Ykl0ZW1JbmRleF07XG4gICAgaWYgKHN1YlN1Ykl0ZW1JbmRleCAhPT0gbnVsbCAmJiBzdWJTdWJJdGVtSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhpdGVtKTtcbiAgICAgIGl0ZW0gPSBzdWJTdWJJdGVtc1tzdWJTdWJJdGVtSW5kZXhdO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtLnJvbGUgIT09ICdtZW51aXRlbWNoZWNrYm94JyAmJiBpdGVtLnJvbGUgIT09ICdtZW51aXRlbXJhZGlvJztcbiAgfVxuXG4gIG9wZW5NZW51KGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzT3BlbmVkID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW47XG4gICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPSB0cnVlO1xuICAgIGlmICh3YXNPcGVuZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShpdGVtSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTWVudShpdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaXRlbUluZGV4ICE9PSBudWxsICYmIGl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVEYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLm9wZW4gPSBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgaGFzUG9wdXBNZW51KGl0ZW1JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICByZXR1cm4gaXRlbXNbaXRlbUluZGV4XS5zdWIgJiYgc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNQcmludGFibGVDaGFyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDEgJiYgISFzdHIubWF0Y2goL1xcUy8pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW51RGF0YUluZGV4KGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgbWVudURhdGFJbmRleCA9IDA7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1Ykl0ZW1JbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gc3ViSXRlbXNbaV07XG4gICAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKHN1Ykl0ZW0pO1xuICAgICAgbWVudURhdGFJbmRleCArPSBzdWJTdWJJdGVtcyAmJiBzdWJTdWJJdGVtcy5sZW5ndGggPiAwID8gc3ViU3ViSXRlbXMubGVuZ3RoIDogMTtcbiAgICB9XG5cbiAgICBpZiAoc3ViU3ViSXRlbUluZGV4ICE9PSBudWxsICYmIHN1YlN1Ykl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZW51RGF0YUluZGV4ICs9IHN1YlN1Ykl0ZW1JbmRleDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVudURhdGFJbmRleDtcbiAgfVxuXG4gIC8qXG4gICAqIENvbXVuZXMgLSBmb2N1c1xuICAgKi9cblxuICBmb2N1c0l0ZW0oaXRlbUluZGV4OiBudW1iZXIsIGhvdmVyPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGhhc0ZvY3VzID0gdGhpcy5tZW51YmFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgaXNPcGVuID0gdGhpcy5tZW51RGF0YVt0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleF0ub3BlbjtcblxuICAgIGlmICghaG92ZXIgfHwgaGFzRm9jdXMpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5saW5rLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIGlmIChpc09wZW4gJiYgdGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gaXRlbUluZGV4O1xuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShmcm9tSXRlbUluZGV4OiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBuZXh0SXRlbSA9IGZyb21JdGVtSW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgbmV4dEl0ZW0gPSAobmV4dEl0ZW0gKyBpdGVtcy5sZW5ndGggKyBzdGVwKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICB9IHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUobmV4dEl0ZW0pICYmIG5leHRJdGVtICE9PSBmcm9tSXRlbUluZGV4KTtcblxuICAgIGlmIChuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dEl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RJdGVtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSXRlbUZvY3VzYWJsZSgwKSkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbSgwLCArMSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNMYXN0SXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoaXRlbXMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbXMubGVuZ3RoIC0gMSwgLTEpO1xuICAgIH1cbiAgfVxuXG4gIGlzSXRlbUZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5nZXRJdGVtcygpW2l0ZW1JbmRleF0uZGlzYWJsZWQ7XG4gIH1cblxuICBmb2N1c0l0ZW1CeUZpcnN0Q2hhcihjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXMubWFwKG1lbnVJdGVtID0+IG1lbnVJdGVtLml0ZW1Db250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBsZXQgZm91bmRJbmRleCA9IC0xO1xuICAgIGRvIHtcbiAgICAgIGluZGV4ID0gKGluZGV4ICsgaXRlbUNvbnRlbnRzLmxlbmd0aCArIDEpICUgaXRlbUNvbnRlbnRzLmxlbmd0aDtcbiAgICAgIGlmIChpdGVtQ29udGVudHNbaW5kZXhdICYmIGl0ZW1Db250ZW50c1tpbmRleF0udHJpbSgpLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpID09PSBjaGFyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAmJiB0aGlzLmlzSXRlbUZvY3VzYWJsZShpbmRleCkpIHtcbiAgICAgICAgZm91bmRJbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGZvdW5kSW5kZXggPT09IC0xICYmIGluZGV4ICE9PSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCk7XG5cbiAgICBpZiAoZm91bmRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShmb3VuZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBmb2N1c1N1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm1lbnVJdGVtLnBvcHVwTWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1lbnVEYXRhSW5kZXggPSB0aGlzLmdldE1lbnVEYXRhSW5kZXgoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG5cbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4ID0gc3ViU3ViSXRlbUluZGV4O1xuICAgICAgY29uc3QgZWxlbSA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy50b0FycmF5KClbbWVudURhdGFJbmRleF0ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgIGVsZW0uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1Yml0ZW0gdG8gZm9jdXMnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignTm8gc3ViaXRlbXMnKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBmcm9tSXRlbVN1YkluZGV4OiBudW1iZXIsIGZyb21JdGVtU3ViU3ViSW5kZXg6IG51bWJlciwgc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IG5leHRTdWJJbmRleCA9IGZyb21JdGVtU3ViSW5kZXg7XG4gICAgbGV0IG5leHRTdWJTdWJJbmRleCA9IGZyb21JdGVtU3ViU3ViSW5kZXg7XG4gICAgbGV0IGFsbFN1Ykl0ZW1zQ2hlY2tlZDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBkbyB7XG4gICAgICBjb25zdCBuZXh0SW5kZXhlcyA9IHRoaXMuZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIG5leHRTdWJJbmRleCwgbmV4dFN1YlN1YkluZGV4LCBzdGVwKTtcbiAgICAgIG5leHRTdWJJbmRleCA9IG5leHRJbmRleGVzLnN1YkluZGV4O1xuICAgICAgbmV4dFN1YlN1YkluZGV4ID0gbmV4dEluZGV4ZXMuc3ViU3ViSW5kZXg7XG4gICAgICBhbGxTdWJJdGVtc0NoZWNrZWQgPSAoZnJvbUl0ZW1TdWJJbmRleCA9PT0gbmV4dFN1YkluZGV4ICYmIGZyb21JdGVtU3ViU3ViSW5kZXggPT09IG5leHRTdWJTdWJJbmRleCk7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKCFhbGxTdWJJdGVtc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGZpcnN0U3ViU3ViSXRlbSA9IG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKHN1Ykl0ZW1zWzBdKTtcbiAgICBpZiAoc3ViU3ViSXRlbXMgJiYgc3ViU3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgZmlyc3RTdWJTdWJJdGVtID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0pKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGNvbnN0IGxhc3RJdGVtSW5kZXggPSBzdWJJdGVtcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RJdGVtID0gc3ViSXRlbXNbbGFzdEl0ZW1JbmRleF07XG4gICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhsYXN0SXRlbSk7XG4gICAgbGV0IGxhc3RTdWJTdWJJdGVtID0gbnVsbDtcbiAgICBpZiAoc3ViU3ViSXRlbXMgJiYgc3ViU3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgbGFzdFN1YlN1Ykl0ZW0gPSBzdWJTdWJJdGVtcy5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtKSkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuICAgIGlmIChzdWJTdWJJdGVtSW5kZXggIT09IG51bGwgJiYgc3ViU3ViSXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpdGVtID0gc3ViU3ViSXRlbXNbc3ViU3ViSXRlbUluZGV4XTtcbiAgICB9XG5cbiAgICBsZXQgaXNGb2N1c2FibGUgPSBmYWxzZTtcbiAgICBpZiAoaXRlbS5yb2xlICE9PSAnc2VwYXJhdG9yJyAmJiBpdGVtLnJvbGUgIT09ICdub25lJykge1xuICAgICAgaXNGb2N1c2FibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBpc0ZvY3VzYWJsZTtcbiAgfVxuXG4gIGZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleDogbnVtYmVyLCBjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXMudG9BcnJheSgpW2l0ZW1JbmRleF0ucG9wdXBNZW51SXRlbXMubWFwKG1lbnVJdGVtID0+IG1lbnVJdGVtLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpO1xuICAgIGxldCBzdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4O1xuICAgIGxldCBzdWJTdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4O1xuICAgIGxldCBmb3VuZFN1YkluZGV4ID0gLTE7XG4gICAgbGV0IGZvdW5kU3ViU3ViSW5kZXggPSBudWxsO1xuICAgIGxldCBhbGxTdWJJdGVtc0NoZWNrZWQgPSBmYWxzZTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBkbyB7XG4gICAgICBjb25zdCBuZXh0SW5kZXhlcyA9IHRoaXMuZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4LCArMSk7XG4gICAgICBzdWJJdGVtSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJJbmRleDtcbiAgICAgIHN1YlN1Ykl0ZW1JbmRleCA9IG5leHRJbmRleGVzLnN1YlN1YkluZGV4O1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE1lbnVEYXRhSW5kZXgoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICBpZiAoaXRlbUNvbnRlbnRzW2luZGV4XSAmJiBpdGVtQ29udGVudHNbaW5kZXhdLnRyaW0oKS5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSA9PT0gY2hhci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgJiYgdGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCkpIHtcbiAgICAgICAgZm91bmRTdWJJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgICAgZm91bmRTdWJTdWJJbmRleCA9IHN1YlN1Ykl0ZW1JbmRleDtcbiAgICAgIH1cbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9ICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID09PSBzdWJJdGVtSW5kZXhcbiAgICAgICAgJiYgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9PT0gc3ViU3ViSXRlbUluZGV4KTtcbiAgICB9IHdoaWxlIChmb3VuZFN1YkluZGV4ID09PSAtMSAmJiAhYWxsU3ViSXRlbXNDaGVja2VkKTtcblxuICAgIGlmIChmb3VuZFN1YkluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgZm91bmRTdWJJbmRleCwgZm91bmRTdWJTdWJJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogTWV0b2RvcyBwYXJhIGZhY2lsaXRhciBjb250ZW5pZG9cbiAgICovXG5cbiAgZ2V0SXRlbXMoKTogTWVudWJhckl0ZW1bXXxNZW51YmFySXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgaXRlbXM7XG4gICAgaWYgKHRoaXMuaXRlbUNvbXBvbmVudExpc3QgJiYgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbUNvbXBvbmVudExpc3QudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGdldEl0ZW1TdWJpdGVtcyhpdGVtOiBNZW51YmFySXRlbXxNZW51YmFySXRlbUNvbXBvbmVudCk6IE1lbnViYXJJdGVtU3ViSXRlbVtdfE1lbnViYXJTdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudWJhckl0ZW1Db21wb25lbnQpe1xuICAgICAgc3ViSXRlbXMgPSBpdGVtLmdldFN1Ykl0ZW1zKCk7XG4gICAgfVxuXG4gICAgaWYgKCFzdWJJdGVtcyB8fCBzdWJJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHN1Ykl0ZW1zID0gaXRlbS5zdWIgPyBpdGVtLnN1Yi5pdGVtcyA6IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldFN1Ykl0ZW1TdWJpdGVtcyhpdGVtOiBNZW51YmFySXRlbVN1Ykl0ZW18TWVudWJhclN1Yml0ZW1Db21wb25lbnQpOiBNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtW118TWVudWJhclN1YnN1Yml0ZW1Db21wb25lbnRbXSB7XG4gICAgbGV0IHN1Ykl0ZW1zID0gW107XG5cbiAgICBpZiAoaXRlbS5yb2xlID09PSAnZ3JvdXAnKSB7XG4gICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnViYXJTdWJpdGVtQ29tcG9uZW50KSB7XG4gICAgICAgIHN1Ykl0ZW1zID0gaXRlbS5nZXRTdWJJdGVtcygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Ykl0ZW1zIHx8IHN1Ykl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzdWJJdGVtcyA9IGl0ZW0uaXRlbXMgPyBpdGVtLml0ZW1zIDogW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Ykl0ZW1zO1xuICB9XG5cbiAgZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIG5leHRTdWJJbmRleCwgbmV4dFN1YlN1YkluZGV4LCBzdGVwKTogeyBzdWJJbmRleDogbnVtYmVyLCBzdWJTdWJJbmRleD86IG51bWJlcn0ge1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhzdWJJdGVtc1tuZXh0U3ViSW5kZXhdKTtcblxuICAgIGxldCBjaGVja05leHRTdWJJdGVtID0gdHJ1ZTtcbiAgICBpZiAoc3ViU3ViSXRlbXMgJiYgc3ViU3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKG5leHRTdWJTdWJJbmRleCArIHN0ZXAgPj0gMCAmJiBuZXh0U3ViU3ViSW5kZXggKyBzdGVwIDwgc3ViU3ViSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRTdWJTdWJJbmRleCArPSBzdGVwO1xuICAgICAgICBjaGVja05leHRTdWJJdGVtID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrTmV4dFN1Ykl0ZW0pIHtcbiAgICAgIG5leHRTdWJJbmRleCA9IChuZXh0U3ViSW5kZXggKyBzdGVwICsgc3ViSXRlbXMubGVuZ3RoKSAlIHN1Ykl0ZW1zLmxlbmd0aDtcbiAgICAgIGNvbnN0IG5leHRTdWJJdGVtSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhzdWJJdGVtc1tuZXh0U3ViSW5kZXhdKTtcbiAgICAgIGlmIChuZXh0U3ViSXRlbUl0ZW1zICYmIG5leHRTdWJJdGVtSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXh0U3ViU3ViSW5kZXggPSAoKHN0ZXAgPiAwID8gLTEgOiAwKSArIHN0ZXAgKyBuZXh0U3ViSXRlbUl0ZW1zLmxlbmd0aCkgJSBuZXh0U3ViSXRlbUl0ZW1zLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRTdWJTdWJJbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtzdWJJbmRleDogbmV4dFN1YkluZGV4LCBzdWJTdWJJbmRleDogbmV4dFN1YlN1YkluZGV4fTtcbiAgfVxuXG4gIGdldElkUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRQcmVmaXggPyB0aGlzLmlkUHJlZml4IDogdGhpcy5pZCArICdtZW51YmFyLWl0ZW0nO1xuICB9XG5cbiAgZ2V0TGFiZWxSZWYoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxDb21wb25lbnQgPyB0aGlzLmxhYmVsQ29tcG9uZW50LmdldENvbnRlbnQoKSA6IHRoaXMubGFiZWxSZWY7XG4gIH1cblxuICBnZXRMYWJlbENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICBsZXQgY29udGVudDogc3RyaW5nO1xuICAgIGlmICh0aGlzLmxhYmVsRGF0YSkge1xuICAgICAgY29udGVudCA9IHRoaXMubGFiZWxEYXRhLmh0bWwgPyB0aGlzLmxhYmVsRGF0YS5odG1sIDogYDxwPiR7IFN0cmluZ1V0aWxzLmVzY2FwZUh0bWwodGhpcy5sYWJlbERhdGEudGV4dCkgfTwvcD5gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYWJlbFRleHQpIHtcbiAgICAgIGNvbnRlbnQgPSBgPHA+JHsgU3RyaW5nVXRpbHMuZXNjYXBlSHRtbCh0aGlzLmxhYmVsVGV4dCkgfTwvcD5gO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGdldEl0ZW1JZChpdGVtLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgaWQ6IHN0cmluZztcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgICAgaWQgPSBpdGVtLmlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWQgPSBgJHt0aGlzLmdldElkUHJlZml4KCl9LSR7KytpbmRleH1gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBnZXRQb3B1cFN0eWxlKGl0ZW1JbmRleDogbnVtYmVyKTogb2JqZWN0IHtcbiAgICBsZXQgc3R5bGUgPSB7fTtcbiAgICBpZiAodGhpcy5tZW51RGF0YSAmJiBpdGVtSW5kZXggPCB0aGlzLm1lbnVEYXRhLmxlbmd0aCkge1xuICAgICAgY29uc3QgbWVudUl0ZW0gPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW07XG4gICAgICBjb25zdCByZWN0ID0gbWVudUl0ZW0ubGluay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuKSB7XG4gICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIHRvcDogKHJlY3QuaGVpZ2h0IC0gMSkgKyAncHgnLFxuICAgICAgICAgIGxlZnQ6ICcwcHgnLFxuICAgICAgICAgIHpJbmRleDogMTAwLFxuICAgICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICBkaXNwbGF5OiAnbm9uZSdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICBnZXRTdWJJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlciwgcGFyZW50SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYHN1Yi0ke3BhcmVudElkfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0U3ViU3ViSXRlbUFyaWFDaGVja2VkKHN1YnN1Yml0ZW0pOiBzdHJpbmcge1xuICAgIGxldCBhcmlhQ2hlY2tlZCA9IG51bGw7XG4gICAgaWYgKHN1YnN1Yml0ZW0ucm9sZSA9PT0gJ21lbnVpdGVtY2hlY2tib3gnIHx8IHN1YnN1Yml0ZW0ucm9sZSA9PT0gJ21lbnVpdGVtcmFkaW8nKSB7XG4gICAgICBhcmlhQ2hlY2tlZCA9ICEhc3Vic3ViaXRlbS5jaGVja2VkO1xuICAgIH1cbiAgICByZXR1cm4gYXJpYUNoZWNrZWQ7XG4gIH1cbn1cbiIsIiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldExhYmVsUmVmKClcIj5cbiAgICA8ZGl2IFtpZF09XCJpZCArICctbGFiZWwnXCIgW2NsYXNzXT1cIlsnbWItc20nLCBsYWJlbENvbXBvbmVudCA/IGxhYmVsQ29tcG9uZW50LmNsYXNzZXMgOiAobGFiZWxEYXRhID8gbGFiZWxEYXRhLmNsYXNzZXMgOiBudWxsKV0gfCBtYWtlSHRtbExpc3RcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRMYWJlbFJlZigpXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdldExhYmVsUmVmKCkgJiYgKGxhYmVsRGF0YSB8fCBsYWJlbFRleHQpXCI+XG4gICAgPGRpdiBbaWRdPVwiaWQgKyAnLWxhYmVsJ1wiIFtjbGFzc109XCJbJ21iLXNtJywgbGFiZWxEYXRhID8gbGFiZWxEYXRhLmNsYXNzZXMgOiBudWxsXSB8IG1ha2VIdG1sTGlzdFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgaHRtbDogZ2V0TGFiZWxDb250ZW50KCkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPHVsICNtZW51YmFyIFtpZF09XCJpZCArICctbWVudWJhcidcIiBjbGFzcz1cImxnOmZsZXggbGc6ZmxleC13cmFwXCIgcm9sZT1cIm1lbnViYXJcIlxuICAgICAgKGZvY3VzaW4pPVwiaGFuZGxlTWVudUZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwiaGFuZGxlTWVudUZvY3VzT3V0KCRldmVudClcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnZm9jdXMnOiBpc0ZvY3VzZWQgfVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCA/IGFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJnZXRMYWJlbFJlZigpIHx8IGxhYmVsRGF0YSB8fCBsYWJlbFRleHQgPyBpZCArICctbGFiZWwnIDogbnVsbFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTsgaW5kZXggYXMgaXRlbUluZGV4XCI+XG4gICAgICA8bGkgY2xhc3M9XCJyZWxhdGl2ZVwiIHJvbGU9XCJub25lXCIgZGVzeU1lbnViYXJpdGVtIChjb250ZW50Q2hhbmdlZCk9XCJjaGVja0NoYW5nZXMoKVwiPlxuICAgICAgICA8YSAqbmdJZj1cIml0ZW0uc3ViXCIgI2xpbmtcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBcbiAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJtZW51RGF0YSAmJiBtZW51RGF0YVtpdGVtSW5kZXhdID8gbWVudURhdGFbaXRlbUluZGV4XS5vcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlTWVudUl0ZW1DbGljaygkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIiBbYXR0cmlidXRlc1RvQ2hlY2tdPVwiJ2Rpc2FibGVkJ1wiXG4gICAgICAgICAgIFtpZF09XCJnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIFtjbGFzc109XCJbJ2MtbWVudWJhcl9fYnV0dG9uJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYy1tZW51YmFyX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCwgJ2MtbWVudWJhcl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmV9XCIgICAgICAgICAgIFxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogKGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsKVwiXG4gICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggc2VsZi1jZW50ZXIgbWF4LXcteHMgYWxpZ24tbWlkZGxlIHRydW5jYXRlXCIgI2l0ZW1Db250ZW50V3JhcHBlcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogaXRlbS5odG1sLCB0ZXh0OiBpdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJpbmxpbmUtYmxvY2sgLW1yLTIgIGFsaWduLW1pZGRsZSAtbXktcHhcIiB2aWV3Qm94PVwiMCAwIDk2IDk2XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGZvY3VzYWJsZT1cImZhbHNlXCIgd2lkdGg9XCIxLjVlbVwiIGhlaWdodD1cIjEuNWVtXCI+PGc+PHBhdGggZD1cIk00Ni43MSA1OC4wMzdhMS44MjMgMS44MjMgMCAwMDIuNTgxIDBMNjIuMDQ4IDQ1LjI4YTEuODIzIDEuODIzIDAgMDAtMS4yOS0zLjExM0gzNS4yNDNhMS44MjMgMS44MjMgMCAwMC0xLjI5MSAzLjExM3pcIi8+PC9nPjwvc3ZnPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxhICpuZ0lmPVwiaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLnN1YlwiICNsaW5rICNpdGVtQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzID8gaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA6IFtdXCJcbiAgICAgICAgICAgW2ZyYWdtZW50XT1cIml0ZW0uZnJhZ21lbnRcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0taGFzLXNlbGVjdGlvbic6IGl0ZW0uYWN0aXZlfVwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiAoaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGwpXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiXG4gICAgICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldCA/IGl0ZW0udGFyZ2V0IDogbnVsbFwiXG4gICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgaXRlbS5ocmVmICYmICFpdGVtLnN1YlwiICNsaW5rICNpdGVtQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbaHJlZl09XCJpdGVtLmhyZWYgfCBleHRlcm5hbEhyZWZcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0taGFzLXNlbGVjdGlvbic6IGl0ZW0uYWN0aXZlfVwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiAoaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGwpXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiXG4gICAgICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldCA/IGl0ZW0udGFyZ2V0IDogbnVsbFwiXG4gICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuXG4gICAgICAgIDx1bCAqbmdJZj1cIml0ZW0uc3ViICYmIGdldEl0ZW1TdWJpdGVtcyhpdGVtKVwiICNwb3B1cE1lbnUgcm9sZT1cIm1lbnVcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldFBvcHVwU3R5bGUoaXRlbUluZGV4KVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX3Rvb2x0aXAgdy1tYXggbWF4LXctNjQgaGlkZGVuIGJvcmRlciBib3JkZXItbmV1dHJhbC1iYXNlIHNoYWRvdy1tZCBiZy13aGl0ZSB0ZXh0LXNtJywgaXRlbS5zdWIuY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmFyaWFMYWJlbCA/IGl0ZW0uYXJpYUxhYmVsIDogKGl0ZW0uc3ViLmFyaWFMYWJlbCA/IGl0ZW0uc3ViLmFyaWFMYWJlbCA6IG51bGwpXCJcbiAgICAgICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtLnN1YlwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiEhKG1lbnVEYXRhICYmIG1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbilcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJJdGVtIG9mIGdldEl0ZW1TdWJpdGVtcyhpdGVtKTsgaW5kZXggYXMgc3ViSXRlbUluZGV4XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJJdGVtLnJvbGVcIj5cbiAgICAgICAgICAgICAgPGxpICNwb3B1cE1lbnVJdGVtICpuZ1N3aXRjaENhc2U9XCInbm9uZSdcIiByb2xlPVwibm9uZVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBzdWJJdGVtLCBodG1sOiBzdWJJdGVtLmh0bWwsIHRleHQ6IHN1Ykl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPGxpICpuZ1N3aXRjaENhc2U9XCInZ3JvdXAnXCIgcm9sZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICA8dWwgcm9sZT1cImdyb3VwXCIgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3ViSXRlbS5hcmlhTGFiZWwgPyBzdWJJdGVtLmFyaWFMYWJlbCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YnN1Yml0ZW0gb2YgZ2V0U3ViSXRlbVN1Yml0ZW1zKHN1Ykl0ZW0pOyBpbmRleCBhcyBzdWJzdWJJbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3Vic3ViaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaSAjcG9wdXBNZW51SXRlbSBbYXR0ci5yb2xlXT1cInN1YnN1Yml0ZW0ucm9sZSA/IHN1YnN1Yml0ZW0ucm9sZSA6IG51bGxcIiAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdWJJdGVtSWQoc3Vic3ViaXRlbSwgc3Vic3ViSW5kZXgsIGdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJzdWJJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YnN1YkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YnN1YkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJnZXRTdWJTdWJJdGVtQXJpYUNoZWNrZWQoc3Vic3ViaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHByLWJhc2UgcGwtbGcgcHktc20gY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3Vic3ViaXRlbSwgaHRtbDogc3Vic3ViaXRlbS5odG1sLCB0ZXh0OiBzdWJzdWJpdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidtZW51aXRlbSdcIiByb2xlPVwibWVudWl0ZW1cIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHByLWJhc2UgcGwtbGcgcHktc20gY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGUgZm9jdXM6YmctcHJpbWFyeS1iYXNlIGZvY3VzOnRleHQtd2hpdGUgZm9jdXM6b3V0bGluZS1ub25lXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBzdWJJdGVtLCBodG1sOiBzdWJJdGVtLmh0bWwsIHRleHQ6IHN1Ykl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPGxpICNwb3B1cE1lbnVJdGVtICpuZ1N3aXRjaENhc2U9XCInbWVudWl0ZW1jaGVja2JveCdcIiByb2xlPVwibWVudWl0ZW1jaGVja2JveFwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCIhIXN1Ykl0ZW0uY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHByLWJhc2UgcGwtbGcgcHktc20gY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidzZXBhcmF0b3InXCIgcm9sZT1cInNlcGFyYXRvclwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktc20gYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZVwiPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuIl19
|