@fundamental-ngx/platform 0.46.0-rc.3 → 0.46.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/esm2022/approval-flow/approval-flow.component.mjs +3 -3
  2. package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +3 -3
  3. package/esm2022/form/form-group/form-field/form-field.component.mjs +3 -3
  4. package/esm2022/list/list.component.mjs +3 -3
  5. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +3 -3
  6. package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +3 -3
  7. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +3 -3
  8. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +3 -3
  9. package/esm2022/split-menu-button/split-menu-button.component.mjs +3 -3
  10. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +3 -3
  11. package/esm2022/table/components/table-row/table-row.component.mjs +3 -3
  12. package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +3 -3
  13. package/esm2022/table/table.component.mjs +3 -3
  14. package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +3 -3
  15. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +3 -3
  16. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +3 -3
  17. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +2 -2
  18. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  19. package/fesm2022/fundamental-ngx-platform-form.mjs +4 -4
  20. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  21. package/fesm2022/fundamental-ngx-platform-list.mjs +2 -2
  22. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  23. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +4 -4
  24. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  25. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +4 -4
  26. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +2 -2
  28. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-platform-table.mjs +8 -8
  30. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +2 -2
  32. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  34. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +2 -2
  36. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  37. package/fundamental-ngx-platform-v0.46.0-rc.4.tgz +0 -0
  38. package/package.json +4 -4
  39. package/schematics/ng-add/index.js +1 -1
  40. package/fundamental-ngx-platform-v0.46.0-rc.3.tgz +0 -0
@@ -755,11 +755,11 @@ export class ApprovalFlowComponent {
755
755
  this._subscriptions.add(sub);
756
756
  }
757
757
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ApprovalFlowComponent, deps: [{ token: i1.DialogService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: DATA_PROVIDERS, optional: true }, { token: i2.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
758
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: ApprovalFlowComponent, selector: "fdp-approval-flow", inputs: { title: "title", value: "value", userDataSource: "userDataSource", watcherDataSource: "watcherDataSource", teamDataSource: "teamDataSource", userDetailsTemplate: "userDetailsTemplate", approvalStatusTemplate: "approvalStatusTemplate", statusColorMapping: "statusColorMapping", checkDueDate: "checkDueDate", dueDateThreshold: "dueDateThreshold", allowSendRemindersForStatuses: "allowSendRemindersForStatuses", isEditAvailable: "isEditAvailable", watchersLabel: "watchersLabel", allowAddParallelNodes: "allowAddParallelNodes", disableSaveButton: "disableSaveButton", disableExitButton: "disableExitButton", usersDataProviderEntityKey: "usersDataProviderEntityKey", teamsDataProviderEntityKey: "teamsDataProviderEntityKey", watchersDataProviderEntityKey: "watchersDataProviderEntityKey" }, outputs: { nodeClick: "nodeClick", afterNodeAdd: "afterNodeAdd", afterNodeEdit: "afterNodeEdit", valueChange: "valueChange", sendReminders: "sendReminders", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived" }, viewQueries: [{ propertyName: "_graphContainerEl", first: true, predicate: ["graphContainerEl"], descendants: true }, { propertyName: "_graphEl", first: true, predicate: ["graphEl"], descendants: true }, { propertyName: "_gridList", first: true, predicate: ["gridList"], descendants: true }, { propertyName: "_nodeComponents", predicate: ApprovalFlowNodeComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <fdp-approval-flow-toolbar-actions\n *ngIf=\"isEditAvailable\"\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n </fd-grid-list-title-bar>\n\n <div\n class=\"fdp-approval-flow__watchers\"\n *ngIf=\"_approvalProcess?.watchers?.length || _isEditMode\"\n [attr.aria-label]=\"watchersLabel\"\n >\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n\n <ng-container *ngIf=\"!_isEditMode\">\n <fd-avatar\n *ngFor=\"let watcher of _approvalProcess?.watchers; trackBy: _trackByFn\"\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n </ng-container>\n\n <div class=\"fdp-approval-flow__watchers-input-container\" *ngIf=\"_isEditMode\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n </div>\n\n <ng-container *ngIf=\"!_graph.errors\">\n <ng-container *ngIf=\"_graph.columns.length; else emptyApprovalFlowGraph\">\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n *ngIf=\"_scrollDiff > 0\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n <button\n *ngIf=\"_carouselStepsLeft > 0\"\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n\n <button\n *ngIf=\"_carouselStepsRight > 0\"\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n </div>\n\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n <div\n class=\"fdp-approval-flow__graph-column\"\n *ngFor=\"let column of _graph.columns; let columnIndex = index\"\n >\n <fdp-approval-flow-node\n *ngFor=\"let node of column.nodes; let nodeIndex = index; trackBy: _trackByFn\"\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n <ng-container *ngIf=\"_isEditMode\">\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-container>\n </ng-container>\n </fd-grid-list-item-toolbar>\n\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"node.approvers.length === 1 ? node.approvers[0].imgUrl : null\"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n\n <ng-template fd-grid-list-item-body>\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-container>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </fd-grid-list>\n\n <div fd-bar *ngIf=\"_isEditMode\">\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n\n <ng-template #emptyApprovalFlowGraph>\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div style=\"display: none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n </ng-template>\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.30.2-rc.6\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-scrollbar{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i6.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i6.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i6.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "directive", type: i7.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i9.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i10.GridListComponent, selector: "fd-grid-list", inputs: ["id", "width", "ariaLabel", "selectionMode", "layoutPattern"], outputs: ["selectionChange"] }, { kind: "component", type: i10.GridListItemComponent, selector: "fd-grid-list-item", inputs: ["id", "width", "layoutItemPattern", "status", "counter", "value", "disableToolbarClick", "selected", "noPadding", "ariaLabel", "ariaLabelledBy", "type", "state", "isNavigated", "title", "description"], outputs: ["press", "detail", "delete", "navigate", "draft", "locked"] }, { kind: "component", type: i10.GridListTitleBarComponent, selector: "fd-grid-list-title-bar", inputs: ["title"] }, { kind: "component", type: i10.GridListItemToolbarComponent, selector: "fd-grid-list-item-toolbar" }, { kind: "component", type: i10.GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "directive", type: i10.GridListItemImageDirective, selector: "[fd-grid-list-item-image]" }, { kind: "directive", type: i10.GridListItemBodyDirective, selector: "[fd-grid-list-item-body]" }, { kind: "component", type: i11.MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "dropdownValues", "openDropdownOnAddOnClicked", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "directive", type: i12.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i13.IllustratedMessageComponent, selector: "[fd-illustrated-message]", inputs: ["type", "svgConfig", "noSvg", "id", "class"] }, { kind: "component", type: i13.IllustratedMessageFigcaptionComponent, selector: "[fd-illustrated-message-figcaption]" }, { kind: "directive", type: i13.IllustratedMessageTextDirective, selector: "[fd-illustrated-message-text]" }, { kind: "directive", type: i13.IllustratedMessageTitleDirective, selector: "[fd-illustrated-message-title]" }, { kind: "component", type: i14.ApprovalFlowNodeComponent, selector: "fdp-approval-flow-node", inputs: ["node", "meta", "renderArrow", "checkDueDate", "dueDateThreshold", "allNodesInColumnApproved", "approvalStatusTemplate", "statusColorMapping", "isEdit", "isNextNodeBlank"], outputs: ["onAdd", "onEdit", "onDelete"] }, { kind: "component", type: i15.ApprovalFlowMessagesComponent, selector: "fdp-approval-flow-messages", inputs: ["messages", "undoLastActionAvailable"], outputs: ["messagesChange", "undoLastAction"] }, { kind: "component", type: i16.ApprovalFlowToolbarActionsComponent, selector: "fdp-approval-flow-toolbar-actions", inputs: ["graph", "graphMetadata", "selectedNodes", "isEditMode"], outputs: ["enterEditMode", "addNode", "editSelectedNode", "deleteSelectedNodes"] }, { kind: "pipe", type: i17.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
758
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: ApprovalFlowComponent, selector: "fdp-approval-flow", inputs: { title: "title", value: "value", userDataSource: "userDataSource", watcherDataSource: "watcherDataSource", teamDataSource: "teamDataSource", userDetailsTemplate: "userDetailsTemplate", approvalStatusTemplate: "approvalStatusTemplate", statusColorMapping: "statusColorMapping", checkDueDate: "checkDueDate", dueDateThreshold: "dueDateThreshold", allowSendRemindersForStatuses: "allowSendRemindersForStatuses", isEditAvailable: "isEditAvailable", watchersLabel: "watchersLabel", allowAddParallelNodes: "allowAddParallelNodes", disableSaveButton: "disableSaveButton", disableExitButton: "disableExitButton", usersDataProviderEntityKey: "usersDataProviderEntityKey", teamsDataProviderEntityKey: "teamsDataProviderEntityKey", watchersDataProviderEntityKey: "watchersDataProviderEntityKey" }, outputs: { nodeClick: "nodeClick", afterNodeAdd: "afterNodeAdd", afterNodeEdit: "afterNodeEdit", valueChange: "valueChange", sendReminders: "sendReminders", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived" }, viewQueries: [{ propertyName: "_graphContainerEl", first: true, predicate: ["graphContainerEl"], descendants: true }, { propertyName: "_graphEl", first: true, predicate: ["graphEl"], descendants: true }, { propertyName: "_gridList", first: true, predicate: ["gridList"], descendants: true }, { propertyName: "_nodeComponents", predicate: ApprovalFlowNodeComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <fdp-approval-flow-toolbar-actions\n *ngIf=\"isEditAvailable\"\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n </fd-grid-list-title-bar>\n\n <div\n class=\"fdp-approval-flow__watchers\"\n *ngIf=\"_approvalProcess?.watchers?.length || _isEditMode\"\n [attr.aria-label]=\"watchersLabel\"\n >\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n\n <ng-container *ngIf=\"!_isEditMode\">\n <fd-avatar\n *ngFor=\"let watcher of _approvalProcess?.watchers; trackBy: _trackByFn\"\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n </ng-container>\n\n <div class=\"fdp-approval-flow__watchers-input-container\" *ngIf=\"_isEditMode\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n </div>\n\n <ng-container *ngIf=\"!_graph.errors\">\n <ng-container *ngIf=\"_graph.columns.length; else emptyApprovalFlowGraph\">\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n *ngIf=\"_scrollDiff > 0\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n <button\n *ngIf=\"_carouselStepsLeft > 0\"\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n\n <button\n *ngIf=\"_carouselStepsRight > 0\"\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n </div>\n\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n <div\n class=\"fdp-approval-flow__graph-column\"\n *ngFor=\"let column of _graph.columns; let columnIndex = index\"\n >\n <fdp-approval-flow-node\n *ngFor=\"let node of column.nodes; let nodeIndex = index; trackBy: _trackByFn\"\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n <ng-container *ngIf=\"_isEditMode\">\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-container>\n </ng-container>\n </fd-grid-list-item-toolbar>\n\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"node.approvers.length === 1 ? node.approvers[0].imgUrl : null\"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n\n <ng-template fd-grid-list-item-body>\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-container>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </fd-grid-list>\n\n <div fd-bar *ngIf=\"_isEditMode\">\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n\n <ng-template #emptyApprovalFlowGraph>\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n </ng-template>\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.30.2-rc.6\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-scrollbar{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i6.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i6.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i6.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "directive", type: i7.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i9.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i10.GridListComponent, selector: "fd-grid-list", inputs: ["id", "width", "ariaLabel", "selectionMode", "layoutPattern"], outputs: ["selectionChange"] }, { kind: "component", type: i10.GridListItemComponent, selector: "fd-grid-list-item", inputs: ["id", "width", "layoutItemPattern", "status", "counter", "value", "disableToolbarClick", "selected", "noPadding", "ariaLabel", "ariaLabelledBy", "type", "state", "isNavigated", "title", "description"], outputs: ["press", "detail", "delete", "navigate", "draft", "locked"] }, { kind: "component", type: i10.GridListTitleBarComponent, selector: "fd-grid-list-title-bar", inputs: ["title"] }, { kind: "component", type: i10.GridListItemToolbarComponent, selector: "fd-grid-list-item-toolbar" }, { kind: "component", type: i10.GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "directive", type: i10.GridListItemImageDirective, selector: "[fd-grid-list-item-image]" }, { kind: "directive", type: i10.GridListItemBodyDirective, selector: "[fd-grid-list-item-body]" }, { kind: "component", type: i11.MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "dropdownValues", "openDropdownOnAddOnClicked", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "directive", type: i12.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i13.IllustratedMessageComponent, selector: "[fd-illustrated-message]", inputs: ["type", "svgConfig", "noSvg", "id", "class"] }, { kind: "component", type: i13.IllustratedMessageFigcaptionComponent, selector: "[fd-illustrated-message-figcaption]" }, { kind: "directive", type: i13.IllustratedMessageTextDirective, selector: "[fd-illustrated-message-text]" }, { kind: "directive", type: i13.IllustratedMessageTitleDirective, selector: "[fd-illustrated-message-title]" }, { kind: "component", type: i14.ApprovalFlowNodeComponent, selector: "fdp-approval-flow-node", inputs: ["node", "meta", "renderArrow", "checkDueDate", "dueDateThreshold", "allNodesInColumnApproved", "approvalStatusTemplate", "statusColorMapping", "isEdit", "isNextNodeBlank"], outputs: ["onAdd", "onEdit", "onDelete"] }, { kind: "component", type: i15.ApprovalFlowMessagesComponent, selector: "fdp-approval-flow-messages", inputs: ["messages", "undoLastActionAvailable"], outputs: ["messagesChange", "undoLastAction"] }, { kind: "component", type: i16.ApprovalFlowToolbarActionsComponent, selector: "fdp-approval-flow-toolbar-actions", inputs: ["graph", "graphMetadata", "selectedNodes", "isEditMode"], outputs: ["enterEditMode", "addNode", "editSelectedNode", "deleteSelectedNodes"] }, { kind: "pipe", type: i17.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
759
759
  }
760
760
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ApprovalFlowComponent, decorators: [{
761
761
  type: Component,
762
- args: [{ selector: 'fdp-approval-flow', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <fdp-approval-flow-toolbar-actions\n *ngIf=\"isEditAvailable\"\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n </fd-grid-list-title-bar>\n\n <div\n class=\"fdp-approval-flow__watchers\"\n *ngIf=\"_approvalProcess?.watchers?.length || _isEditMode\"\n [attr.aria-label]=\"watchersLabel\"\n >\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n\n <ng-container *ngIf=\"!_isEditMode\">\n <fd-avatar\n *ngFor=\"let watcher of _approvalProcess?.watchers; trackBy: _trackByFn\"\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n </ng-container>\n\n <div class=\"fdp-approval-flow__watchers-input-container\" *ngIf=\"_isEditMode\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n </div>\n\n <ng-container *ngIf=\"!_graph.errors\">\n <ng-container *ngIf=\"_graph.columns.length; else emptyApprovalFlowGraph\">\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n *ngIf=\"_scrollDiff > 0\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n <button\n *ngIf=\"_carouselStepsLeft > 0\"\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n\n <button\n *ngIf=\"_carouselStepsRight > 0\"\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n </div>\n\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n <div\n class=\"fdp-approval-flow__graph-column\"\n *ngFor=\"let column of _graph.columns; let columnIndex = index\"\n >\n <fdp-approval-flow-node\n *ngFor=\"let node of column.nodes; let nodeIndex = index; trackBy: _trackByFn\"\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n <ng-container *ngIf=\"_isEditMode\">\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-container>\n </ng-container>\n </fd-grid-list-item-toolbar>\n\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"node.approvers.length === 1 ? node.approvers[0].imgUrl : null\"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n\n <ng-template fd-grid-list-item-body>\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-container>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </fd-grid-list>\n\n <div fd-bar *ngIf=\"_isEditMode\">\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n\n <ng-template #emptyApprovalFlowGraph>\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div style=\"display: none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n </ng-template>\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.30.2-rc.6\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-scrollbar{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"] }]
762
+ args: [{ selector: 'fdp-approval-flow', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <fdp-approval-flow-toolbar-actions\n *ngIf=\"isEditAvailable\"\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n </fd-grid-list-title-bar>\n\n <div\n class=\"fdp-approval-flow__watchers\"\n *ngIf=\"_approvalProcess?.watchers?.length || _isEditMode\"\n [attr.aria-label]=\"watchersLabel\"\n >\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n\n <ng-container *ngIf=\"!_isEditMode\">\n <fd-avatar\n *ngFor=\"let watcher of _approvalProcess?.watchers; trackBy: _trackByFn\"\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n </ng-container>\n\n <div class=\"fdp-approval-flow__watchers-input-container\" *ngIf=\"_isEditMode\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n </div>\n\n <ng-container *ngIf=\"!_graph.errors\">\n <ng-container *ngIf=\"_graph.columns.length; else emptyApprovalFlowGraph\">\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n *ngIf=\"_scrollDiff > 0\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n <button\n *ngIf=\"_carouselStepsLeft > 0\"\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n\n <button\n *ngIf=\"_carouselStepsRight > 0\"\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n </div>\n\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n <div\n class=\"fdp-approval-flow__graph-column\"\n *ngFor=\"let column of _graph.columns; let columnIndex = index\"\n >\n <fdp-approval-flow-node\n *ngFor=\"let node of column.nodes; let nodeIndex = index; trackBy: _trackByFn\"\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n <ng-container *ngIf=\"_isEditMode\">\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-container>\n </ng-container>\n </fd-grid-list-item-toolbar>\n\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"node.approvers.length === 1 ? node.approvers[0].imgUrl : null\"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n\n <ng-template fd-grid-list-item-body>\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-container>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </fd-grid-list>\n\n <div fd-bar *ngIf=\"_isEditMode\">\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n\n <ng-template #emptyApprovalFlowGraph>\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n </ng-template>\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.30.2-rc.6\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-scrollbar{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"] }]
763
763
  }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: Map, decorators: [{
764
764
  type: Optional
765
765
  }, {
@@ -832,4 +832,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
832
832
  type: ViewChildren,
833
833
  args: [ApprovalFlowNodeComponent]
834
834
  }] } });
835
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9hcHByb3ZhbC1mbG93L2FwcHJvdmFsLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRHLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLGlDQUFpQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQ0gsb0NBQW9DLEVBRXZDLE1BQU0sMkVBQTJFLENBQUM7QUFDbkYsT0FBTyxF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ImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPV05fQVJST1csIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRocm90dGxlVGltZSwgc3dpdGNoTWFwLCBtYXBUbywgbWFwLCBzdGFydFdpdGgsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBLZXlVdGlsLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgR3JpZExpc3RDb21wb25lbnQsIEdyaWRMaXN0U2VsZWN0aW9uRXZlbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZ3JpZC1saXN0JztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcblxuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNDb21wb25lbnQsXG4gICAgQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzRGlhbG9nUmVmRGF0YVxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctYXBwcm92ZXItZGV0YWlscy9hcHByb3ZhbC1mbG93LWFwcHJvdmVyLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQgfSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctbm9kZS9hcHByb3ZhbC1mbG93LW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQWRkTm9kZURpYWxvZ0Zvcm1EYXRhLFxuICAgIEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUyxcbiAgICBBcHByb3ZhbEZsb3dBZGROb2RlQ29tcG9uZW50LFxuICAgIEFkZE5vZGVEaWFsb2dSZWZEYXRhLFxuICAgIEFwcHJvdmFsRmxvd05vZGVUYXJnZXRcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LWFkZC1ub2RlL2FwcHJvdmFsLWZsb3ctYWRkLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgZGlzcGxheVVzZXJGbixcbiAgICBnZXRCbGFua0FwcHJvdmFsR3JhcGhOb2RlLFxuICAgIGdldEdyYXBoTm9kZXMsXG4gICAgaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZCxcbiAgICB0cmFja0J5Rm4sXG4gICAgdXNlclZhbHVlRm5cbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgQXBwcm92YWxHcmFwaE5vZGVNZXRhZGF0YSxcbiAgICBBcHByb3ZhbE5vZGUsXG4gICAgQXBwcm92YWxQcm9jZXNzLFxuICAgIEFwcHJvdmFsU3RhdHVzLFxuICAgIEFwcHJvdmFsVGVhbSxcbiAgICBBcHByb3ZhbFVzZXIsXG4gICAgU2VuZFJlbWluZGVyc0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93U2VsZWN0VHlwZUNvbXBvbmVudCxcbiAgICBTZWxlY3RUeXBlRGlhbG9nRm9ybURhdGFcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LXNlbGVjdC10eXBlL2FwcHJvdmFsLWZsb3ctc2VsZWN0LXR5cGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93R3JhcGgsXG4gICAgQXBwcm92YWxHcmFwaE1ldGFkYXRhLFxuICAgIGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGgsXG4gICAgZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaE1ldGFkYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1ncmFwaCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2UsXG4gICAgQXBwcm92YWxGbG93TWVzc2FnZVR5cGVcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LW1lc3NhZ2VzL2FwcHJvdmFsLWZsb3ctbWVzc2FnZXMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRGF0YVByb3ZpZGVyLFxuICAgIERBVEFfUFJPVklERVJTLFxuICAgIEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlLFxuICAgIEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9iamVjdFN0YXR1cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9vYmplY3Qtc3RhdHVzJztcblxubGV0IGRlZmF1bHRJZCA9IDA7XG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC40MC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWFwcHJvdmFsLWZsb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbEZsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogVGl0bGUgd2hpY2ggaXMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGFwcHJvdmFsIGZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHZhbHVlOiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB1c2VycyBvZiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB1c2VyRGF0YVNvdXJjZTogQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2U8QXBwcm92YWxVc2VyPjtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHdhdGNoZXJzIG9mIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJEYXRhU291cmNlOiBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZTxBcHByb3ZhbFVzZXI+O1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdGVhbXMgb2YgQXBwcm92YWwgRmxvdyBjb21wb25lbnQuICovXG4gICAgQElucHV0KCkgdGVhbURhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlPEFwcHJvdmFsVGVhbT47XG5cbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIHVzZXIgZGV0YWlscyB0ZW1wbGF0ZSAqL1xuICAgIEBJbnB1dCgpIHVzZXJEZXRhaWxzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIGFwcCBjdXN0b20gc3RhdHVzZXMgKi9cbiAgICBASW5wdXQoKSBhcHByb3ZhbFN0YXR1c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEN1c3RvbSBzdGF0dXMgdG8gY29sb3IgbWFwcGluZyAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXR1c0NvbG9yTWFwcGluZzogUmVjb3JkPEFwcHJvdmFsU3RhdHVzLCBPYmplY3RTdGF0dXM+O1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBkdWUgZGF0ZSB3YXJuaW5nIGluIHN0YXR1cyAqL1xuICAgIEBJbnB1dCgpIGNoZWNrRHVlRGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIE51bWJlciBvZiBkYXlzIGJlZm9yZSBkdWUgZGF0ZSB3aGVuIHN0YXR1cyBjaGFuZ2VzIHRvIGB3YXJuaW5nYCB3aXRoIHRleHQgJ0R1ZSBpbiBYIGRheXMnLlxuICAgICAqICBOb3QgdXNlZCBpZiAnY2hlY2tEdWVEYXRlJyBlcXVhbHMgZmFsc2UgKi9cbiAgICBASW5wdXQoKSBkdWVEYXRlVGhyZXNob2xkID0gNztcblxuICAgIC8qKiBBIGxpc3Qgb2YgYXBwcm92YWwgc3RhdHVzZXMgdGhhdCBhbGxvdyBzZW5kaW5nIHJlbWluZGVycyB0byB0aGVpciBhcHByb3ZlcnMgKi9cbiAgICBASW5wdXQoKSBhbGxvd1NlbmRSZW1pbmRlcnNGb3JTdGF0dXNlczogQXBwcm92YWxTdGF0dXNbXSA9IFsnaW4gcHJvZ3Jlc3MnLCAnbm90IHN0YXJ0ZWQnXTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhcHByb3ZhbCBmbG93IGlzIGVkaXRhYmxlICovXG4gICAgQElucHV0KCkgaXNFZGl0QXZhaWxhYmxlID0gZmFsc2U7XG5cbiAgICAvKiogVGV4dCBsYWJlbCBmb3Igd2F0Y2hlcnMgbGlzdCAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJzTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBFbmFibGVzIG9yIGRpc2FibGVzIGFiaWxpdHkgdG8gYWRkIHBhcmFsbGVsIG5vZGVzICovXG4gICAgQElucHV0KCkgYWxsb3dBZGRQYXJhbGxlbE5vZGVzID0gdHJ1ZTtcblxuICAgIC8qKiBEaXNhYmxlcyBzYXZlIGJ1dHRvbiwgc2F2ZSBidXR0b24gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KCkgZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKiBEaXNhYmxlcyBleGl0IGJ1dHRvbiwgZXhpdCBidXR0b24gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KCkgZGlzYWJsZUV4aXRCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGVudGl0eSBmb3Igd2hpY2ggdXNlcnMgRGF0YVByb3ZpZGVyIHdpbGwgYmUgbG9hZGVkLlxuICAgICAqIEludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KCkgdXNlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHRlYW1zIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRlYW1zRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZW50aXR5IGZvciB3aGljaCBhcHByb3ZhbCBmbG93IERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gYXBwcm92YWwgZmxvdyBub2RlIGNsaWNrLiAqL1xuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsTm9kZT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGFwcHJvdmFsIGZsb3cgbm9kZSBhZGQgKi9cbiAgICBAT3V0cHV0KCkgYWZ0ZXJOb2RlQWRkID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbE5vZGU+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCBvbiBhcHByb3ZhbCBmbG93IG5vZGUgZWRpdCAqL1xuICAgIEBPdXRwdXQoKSBhZnRlck5vZGVFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbE5vZGU+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVudmVyIHNhdmUgaXMgY2xpY2tlZCBpbiBlZGl0IG1vZGUgICovXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbFByb2Nlc3M+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuZXZlciByZW1pbmRlcnMgc2hvdWxkIGJlIHNlbnQgKi9cbiAgICBAT3V0cHV0KCkgc2VuZFJlbWluZGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8U2VuZFJlbWluZGVyc0RhdGE+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyYXBoQ29udGFpbmVyRWwnKSBfZ3JhcGhDb250YWluZXJFbDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyYXBoRWwnKSBfZ3JhcGhFbDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRMaXN0JykgX2dyaWRMaXN0OiBHcmlkTGlzdENvbXBvbmVudDxBcHByb3ZhbEdyYXBoTm9kZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQXBwcm92YWxGbG93Tm9kZUNvbXBvbmVudCkgX25vZGVDb21wb25lbnRzOiBRdWVyeUxpc3Q8QXBwcm92YWxGbG93Tm9kZUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hcHByb3ZhbFByb2Nlc3M6IEFwcHJvdmFsUHJvY2VzcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2luaXRpYWxBcHByb3ZhbFByb2Nlc3M/OiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcmV2aW91c0FwcHJvdmFsUHJvY2Vzcz86IEFwcHJvdmFsUHJvY2VzcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyYXBoOiBBcHByb3ZhbEZsb3dHcmFwaDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQ2Fyb3VzZWwgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyYXBoTWV0YWRhdGE6IEFwcHJvdmFsR3JhcGhNZXRhZGF0YSA9IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNFZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdXNlcnNGb3JXYXRjaGVyc0xpc3Q6IEFwcHJvdmFsVXNlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkV2F0Y2hlcnM6IEFwcHJvdmFsVXNlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RlZFdhdGNoZXJJZHM6IEFwcHJvdmFsVXNlclsnaWQnXVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlczogQXBwcm92YWxGbG93TWVzc2FnZVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5VXNlckZuID0gZGlzcGxheVVzZXJGbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3VzZXJWYWx1ZUZuID0gdXNlclZhbHVlRm47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5Rm4gPSB0cmFja0J5Rm47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lbXB0eUFwcHJvdmFsRmxvd1Nwb3RDb25maWcgPSB7XG4gICAgICAgIHNwb3Q6IHsgdXJsOiAnJywgaWQ6ICdzYXBJbGx1cy1TcG90LU5vRGF0YScgfVxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tdWx0aXBsZVJvb3ROb2RlcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbXVsdGlwbGVGaW5hbE5vZGVzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kcmFnRHJvcEluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgYXBwcm92YWxGbG93VW5pcXVlSWQgPSBgZmRwLWFwcHJvdmFsLWZsb3ctJHsrK2RlZmF1bHRJZH1gO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lZGl0TW9kZUluaXRTdWI6IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGF0YVNvdXJjZUNoYW5nZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRBX1BST1ZJREVSUykgcHJpdmF0ZSBwcm92aWRlcnM6IE1hcDxzdHJpbmcsIERhdGFQcm92aWRlcjxhbnk+PixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZygnQXBwcm92YWxGbG93Q29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IHJlbGVhc2UuJyk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgYW5kIGluaXRpYWwgc3RhdGVzIG9mIGFwcHJvdmFsIHByb2Nlc3MgKi9cbiAgICBnZXQgYXBwcm92YWxQcm9jZXNzKCk6IEFwcHJvdmFsUHJvY2VzcyB7XG4gICAgICAgIHJldHVybiBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZT8ucnRsLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3NlbGVjdGVkTm9kZXMoKTogQXBwcm92YWxHcmFwaE5vZGVbXSB7XG4gICAgICAgIHJldHVybiBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKS5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy51c2VyRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3QgdXNlcnNEUCA9IHRoaXMudXNlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkgJiYgdGhpcy5wcm92aWRlcnM/LmdldCh0aGlzLnVzZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh1c2Vyc0RQKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YVNvdXJjZSA9IG5ldyBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZSh1c2Vyc0RQKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgdXNlcnMgZGF0YSBzb3VyY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlckRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoZXJzRFAgPVxuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkgJiYgdGhpcy5wcm92aWRlcnM/LmdldCh0aGlzLndhdGNoZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyc0RQKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZSA9IG5ldyBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZSh3YXRjaGVyc0RQKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgd2F0Y2hlcnMgZGF0YSBzb3VyY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudGVhbURhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlYW1zRFAgPSB0aGlzLnRlYW1zRGF0YVByb3ZpZGVyRW50aXR5S2V5ICYmIHRoaXMucHJvdmlkZXJzPy5nZXQodGhpcy50ZWFtc0RhdGFQcm92aWRlckVudGl0eUtleSk7XG4gICAgICAgICAgICBpZiAodGVhbXNEUCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGVhbURhdGFTb3VyY2UgPSBuZXcgQXBwcm92YWxGbG93VGVhbURhdGFTb3VyY2UodGVhbXNEUCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHRlYW1zIGRhdGEgc291cmNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9zZXR1cERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSB0aGlzLnZhbHVlID8/IHsgd2F0Y2hlcnM6IFtdLCBub2RlczogW10gfTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAocHJvY2Vzcyk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcocHJvY2Vzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy51c2VyRGF0YVNvdXJjZSB8fCBjaGFuZ2VzLndhdGNoZXJEYXRhU291cmNlIHx8IGNoYW5nZXMudGVhbURhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkJC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNOZXh0Tm9kZUJsYW5rKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlLCBjb2x1bW5JbmRleDogbnVtYmVyLCBub2RlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbY29sdW1uSW5kZXggKyAxXT8ubm9kZXNbbm9kZUluZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dE5vZGVCbGFuayA9IG5leHROb2RlPy5ibGFuaztcbiAgICAgICAgY29uc3QgbmV4dE5vZGVQYXJhbGxlbEVuZCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbbmV4dE5vZGU/LmlkXT8ucGFyYWxsZWxFbmQ7XG5cbiAgICAgICAgcmV0dXJuICFub2RlLmJsYW5rICYmICEhbmV4dE5vZGVCbGFuayAmJiAhbmV4dE5vZGVQYXJhbGxlbEVuZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0Nka0RyYWdEaXNhYmxlZChub2RlOiBBcHByb3ZhbEdyYXBoTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2lzRWRpdE1vZGUgfHwgbm9kZS5ibGFuayB8fCBub2RlLnNwYWNlIHx8IG5vZGUuc3RhdHVzICE9PSAnbm90IHN0YXJ0ZWQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE5vZGUgY2xpY2sgaGFuZGxlciAqL1xuICAgIF9vbk5vZGVDbGljayhub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RyYWdEcm9wSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0RpYWxvZ1JlZkRhdGE+KFxuICAgICAgICAgICAgQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dTZW5kUmVtaW5kZXI6IHRoaXMuYWxsb3dTZW5kUmVtaW5kZXJzRm9yU3RhdHVzZXMuaW5jbHVkZXMobm9kZS5zdGF0dXMpLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKHJlbWluZGVyVGFyZ2V0cykgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVtaW5kZXJUYXJnZXRzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFJlbWluZGVycy5lbWl0KHsgdXNlcnM6IHJlbWluZGVyVGFyZ2V0cywgbm9kZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk5vZGVBZGQobm9kZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWZ0ZXJOb2RlQWRkLmVtaXQobm9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ob2RlRWRpdChub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZnRlck5vZGVFZGl0LmVtaXQobm9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ob2RlU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBHcmlkTGlzdFNlbGVjdGlvbkV2ZW50PEFwcHJvdmFsR3JhcGhOb2RlPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncmFwaC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLnNlbGVjdGVkID0gISFldmVudC5zZWxlY3Rpb24uZmluZCgoX25vZGUpID0+IF9ub2RlLmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBXYXRjaGVyJ3MgYXZhdGFyIGNsaWNrIGhhbmRsZXIgKi9cbiAgICBfb25XYXRjaGVyQ2xpY2sod2F0Y2hlcjogQXBwcm92YWxVc2VyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0RpYWxvZ1JlZkRhdGE+KEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHdhdGNoZXIsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdERpYWxvZ09wdGlvbnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHJpdmUgbWV0YWRhdGEgYnkgbm9kZSBpZCAqL1xuICAgIGdldE5vZGVNZXRhZGF0YUJ5Tm9kZUlkKG5vZGVJZDogc3RyaW5nKTogQXBwcm92YWxHcmFwaE5vZGVNZXRhZGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGVJZF07XG4gICAgfVxuXG4gICAgLyoqIFNjcm9sbCB0byB0aGUgbmV4dCBob3Jpem9udGFsIHNsaWRlICovXG4gICAgbmV4dFNsaWRlKGRpciA9IDEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMTtcblxuICAgICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgICBpZiAoZGlyID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0U3RlcCA9IHRoaXMuX2Nhcm91c2VsU3RlcHNSaWdodCA9PT0gMTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc0NvdW50IC0gdGhpcy5fY2Fyb3VzZWxTdGVwc1JpZ2h0ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVSaWdodFBvaW50ID0gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZSAqIG5leHRTdGVwICsgKGxhc3RTdGVwID8gMCA6IHRocmVzaG9sZCk7XG4gICAgICAgICAgICBwb3MgPSB2aXNpYmxlUmlnaHRQb2ludCAtIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc0xlZnQgPT09IDE7XG4gICAgICAgICAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuX2Nhcm91c2VsU3RlcHNMZWZ0IC0gMTtcbiAgICAgICAgICAgIHBvcyA9IHRoaXMuX2Nhcm91c2VsU3RlcFNpemUgKiBuZXh0U3RlcCAtIChsYXN0U3RlcCA/IDAgOiB0aHJlc2hvbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24ocG9zKTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNjcm9sbFBvc2l0aW9uKHBvczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7XG4gICAgICAgICAgICBsZWZ0OiBwb3MsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb3ZlQ29sSW5WaWV3KGNvbEluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuW2NvbEluZGV4XS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHg6IG5vZGVYLCB3aWR0aCB9ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54O1xuXG4gICAgICAgIGNvbnN0IGxlZnQgPSBub2RlWCAtIGRlbHRhO1xuICAgICAgICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcblxuICAgICAgICBpZiAobGVmdCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICsgbGVmdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmlnaHQgPiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICsgcmlnaHQgLSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBIYW5kbGUgbm9kZSBrZXlkb3duIGFuZCBmb2N1cyBvdGhlciBub2RlIGJhc2VkIG9uIHdoaWNoIGtleSBpcyBwcmVzc2VkICovXG4gICAgX29uTm9kZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtVUF9BUlJPVywgRE9XTl9BUlJPVywgUklHSFRfQVJST1csIExFRlRfQVJST1ddKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBub2RlSW5kZXgsIGNvbHVtbkluZGV4IH0gPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGUuaWRdO1xuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IG5leHRGb2N1c1RhcmdldDogQXBwcm92YWxHcmFwaE5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBub2RlSW5kZXggPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dFZlcnRpY2FsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4LCAndXAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5leHRGb2N1c1RhcmdldCA9IHRoaXMuX2dldE5leHRWZXJ0aWNhbE5vZGUobm9kZUluZGV4LCBjb2x1bW5JbmRleCwgJ2Rvd24nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsIHRoaXMuX3J0bCA/ICdyaWdodCcgOiAnbGVmdCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsIHRoaXMuX3J0bCA/ICdsZWZ0JyA6ICdyaWdodCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRGb2N1c1RhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNOb2RlKG5leHRGb2N1c1RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBGZXRjaCBhbGwgbmVjZXNzYXJ5IGRhdGEgYW5kIGVudGVyIGVkaXQgbW9kZSAqL1xuICAgIF9lbnRlckVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICAvLyB0aGVyZSdzIG5vIHN1cHBvcnQgZm9yIHNlYXJjaGluZyBpbiBtdWx0aS1pbnB1dCwgc28gZ3JhYmJpbmcgYWxsIHdhdGNoZXJzXG4gICAgICAgIC8vIHRyaWdnZXJpbmcgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaW4gZGF0YSBzb3VyY2VzXG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UubWF0Y2goKTtcbiAgICAgICAgdGhpcy5fZWRpdE1vZGVJbml0U3ViID0gdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5vcGVuKCkuc3Vic2NyaWJlKCh3YXRjaGVycykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXNlcnNGb3JXYXRjaGVyc0xpc3QgPSB3YXRjaGVycztcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnM7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFdhdGNoZXJJZHMgPSB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzLm1hcCgodykgPT4gdy5pZCk7XG4gICAgICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9lZGl0TW9kZUluaXRTdWIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNlbmQgdXBkYXRlIGFwcHJvdmFsIHByb2Nlc3MgY2FsbHMgdG8gRGF0YVNvdXJjZSBhbmQgZXhpdCBlZGl0IG1vZGUqL1xuICAgIF9zYXZlRWRpdE1vZGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lZGl0TW9kZUluaXRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UuY2xvc2UoKTtcblxuICAgICAgICB0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW107XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2FwcHJvdmFsUHJvY2VzcyxcbiAgICAgICAgICAgIHdhdGNoZXJzOiB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHVwZGF0ZWQpO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh1cGRhdGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXN0b3JlIGluaXRpYWwgYXBwcm92YWwgZmxvdyBzdGF0ZSBhbmQgZXhpdCBlZGl0IG1vZGUgKi9cbiAgICBfZXhpdEVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lZGl0TW9kZUluaXRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UuY2xvc2UoKTtcblxuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyEpO1xuICAgICAgICB0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW107XG5cbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfd2F0Y2hlcnNTZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGVkSWRzOiBBcHByb3ZhbFVzZXJbJ2lkJ11bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHNTZXQgPSBuZXcgU2V0KHNlbGVjdGVkSWRzKTtcbiAgICAgICAgLy8gdXBkYXRpbmcgd2F0Y2hlcnMgc2VsZWN0aW9uXG4gICAgICAgIC8vIHNpbmNlIGl0J3MgcG9zc2libGUgXCJfdXNlcnNGb3JXYXRjaGVyc0xpc3RcIiBtaWdodCBub3QgY29udGFpbiBhbGwgc2VsZWN0ZWQgdmFsdWVzLFxuICAgICAgICAvLyBkZXRlcm1pbmUgY3VycmVudCBzZWxlY3Rpb24gYmFzZWQgb24gd2hhdCdzIGFscmVhZHkgc2VsZWN0ZWQgYW5kIFwiX3VzZXJzRm9yV2F0Y2hlcnNMaXN0XCJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRXYXRjaGVycyA9IHVuaXFCeShcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMuY29uY2F0KHRoaXMuX3VzZXJzRm9yV2F0Y2hlcnNMaXN0KS5maWx0ZXIoKHVzZXIpID0+IGlkc1NldC5oYXModXNlci5pZCkpLFxuICAgICAgICAgICAgKHUpID0+IHUuaWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXN0b3JlIHByZXZpb3VzbHkgc2F2ZWQgYXBwcm92YWwgcHJvY2VzcyBzdGF0ZSAqL1xuICAgIF91bmRvTGFzdEFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzISk7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE9wZW4gYWRkIG5vZGUgZGlhbG9nICovXG4gICAgX2FkZE5vZGUoc291cmNlOiBBcHByb3ZhbEdyYXBoTm9kZSwgdHlwZTogQXBwcm92YWxGbG93Tm9kZVRhcmdldCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaG93Tm9kZVR5cGVTZWxlY3QgPSB0eXBlID09PSAnYmVmb3JlJyAmJiAhc291cmNlLmFjdGlvbnNDb25maWc/LmRpc2FibGVBZGRQYXJhbGxlbDtcblxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW48QWRkTm9kZURpYWxvZ1JlZkRhdGE+KFxuICAgICAgICAgICAgQXBwcm92YWxGbG93QWRkTm9kZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUYXJnZXQ6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNob3dOb2RlVHlwZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogT2JqZWN0LmFzc2lnbihnZXRCbGFua0FwcHJvdmFsR3JhcGhOb2RlKCksIHsgYmxhbms6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICBjaGVja0R1ZURhdGU6IHRoaXMuY2hlY2tEdWVEYXRlLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKGRhdGE6IEFkZE5vZGVEaWFsb2dGb3JtRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IG5vZGUsIG5vZGVUeXBlLCB0b05leHRTZXJpYWwgfSA9IGRhdGE7XG5cbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgICAgIG5vZGUuaWQgPSBgdGVtcElkJHsoTWF0aC5yYW5kb20oKSAqIDEwMDApLnRvRml4ZWQoKX1gO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdlbXB0eSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VudGVyRWRpdE1vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdiZWZvcmUnOlxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5TRVJJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IFtzb3VyY2UuaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoc291cmNlLmlkLCBbbm9kZS5pZF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMuUEFSQUxMRUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZGRpbmdQYXJhbGxlbE5vZGUobm9kZSwgc291cmNlLCB0b05leHRTZXJpYWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdiZWZvcmUtYWxsJzpcbiAgICAgICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzID0gdGhpcy5fZ3JhcGguY29sdW1uc1swXS5ub2Rlcy5tYXAoKF9ub2RlKSA9PiBfbm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYWZ0ZXInOlxuICAgICAgICAgICAgICAgICAgICBub2RlLnRhcmdldHMgPSBzb3VyY2UudGFyZ2V0cztcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnRhcmdldHMgPSBbbm9kZS5pZF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYWZ0ZXItYWxsJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRQYXJlbnRzID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtzb3VyY2UudGFyZ2V0c1swXV0/LnBhcmVudHM7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IHNvdXJjZS50YXJnZXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoc291cmNlLmlkLCBbbm9kZS5pZF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfbm9kZSkgPT4gX25vZGUuaWQgIT09IHNvdXJjZS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyYXBoLmNvbHVtbnNbdGhpcy5fZ3JhcGguY29sdW1ucy5sZW5ndGggLSAxXS5ub2Rlcy5mb3JFYWNoKChfbm9kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbm9kZS50YXJnZXRzLnB1c2gobm9kZS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAncGFyYWxsZWwnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKG5vZGUsIHNvdXJjZSwgdG9OZXh0U2VyaWFsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKG5vZGUuYXBwcm92YWxUZWFtSWQgPyAndGVhbUFkZFN1Y2Nlc3MnIDogJ2FwcHJvdmVyQWRkU3VjY2VzcycpO1xuICAgICAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fb25Ob2RlQWRkKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBPcGVuIGVkaXQgbm9kZSBkaWFsb2cgKi9cbiAgICBfZWRpdE5vZGUobm9kZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbjxBZGROb2RlRGlhbG9nUmVmRGF0YT4oXG4gICAgICAgICAgICBBcHByb3ZhbEZsb3dBZGROb2RlQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgaXNFZGl0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBPYmplY3QuYXNzaWduKHt9LCBub2RlKSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tEdWVEYXRlOiB0aGlzLmNoZWNrRHVlRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdERpYWxvZ09wdGlvbnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChkYXRhOiB7IG5vZGU6IEFwcHJvdmFsTm9kZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkTm9kZSA9IGRhdGE/Lm5vZGU7XG5cbiAgICAgICAgICAgIGlmICghdXBkYXRlZE5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTm9kZSh1cGRhdGVkTm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZSgnbm9kZUVkaXQnKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fb25Ob2RlRWRpdChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gXCJEZWxldGVcIiBidXR0b24gY2xpY2sgaGFuZGxlciAqL1xuICAgIF9vbk5vZGVEZWxldGUobm9kZVRvRGVsZXRlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG4gICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRGVsZXRlKTtcbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2Uobm9kZVRvRGVsZXRlLmFwcHJvdmFsVGVhbUlkID8gJ3RlYW1SZW1vdmUnIDogJ25vZGVSZW1vdmUnKTtcbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVsZXRlU2VsZWN0ZWROb2RlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgY29uc3Qgbm9kZXNUb0RlbGV0ZSA9IHRoaXMuX25vZGVDb21wb25lbnRzXG4gICAgICAgICAgICAuZmlsdGVyKChub2RlQ29tcG9uZW50KSA9PiBub2RlQ29tcG9uZW50Ll9pc1NlbGVjdGVkKVxuICAgICAgICAgICAgLm1hcCgobm9kZUNvbXBvbmVudCkgPT4gbm9kZUNvbXBvbmVudC5ub2RlKTtcblxuICAgICAgICBub2Rlc1RvRGVsZXRlLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoJ25vZGVzUmVtb3ZlJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTm9kZSBkcmFnIG1vdmUgaGFuZGxlciwgdXNlZCB0byBjaGVjayBpZiBuZWVkIHRvIGhpZ2hsaWdodCBhIGRyb3Agem9uZSByZWN0YW5nbGUgKi9cbiAgICBfb25Ob2RlRHJhZ01vdmVkKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRyYWdnZWROb2RlRGltZW5zaW9ucyA9IHRoaXMuX25vZGVDb21wb25lbnRzXG4gICAgICAgICAgICAuZmluZCgoY29tcCkgPT4gY29tcC5ub2RlID09PSBub2RlKVxuICAgICAgICAgICAgPy5fbmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoIWRyYWdnZWROb2RlRGltZW5zaW9ucykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbm9kZUNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50Lm5vZGUgIT09IG5vZGUgJiYgQm9vbGVhbihjb21wb25lbnQuX2Ryb3Bab25lcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50Ll9jaGVja0lmTm9kZURyYWdnZWRJbkRyb3Bab25lKGRyYWdnZWROb2RlRGltZW5zaW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE5vZGUgZHJvcCBoYW5kbGVyICovXG4gICAgX29uTm9kZURyb3Aobm9kZVRvRHJvcDogQXBwcm92YWxHcmFwaE5vZGUsIGRyYWc6IENka0RyYWcpOiB2b2lkIHtcbiAgICAgICAgZHJhZy5yZXNldCgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuX2RyYWdEcm9wSW5Qcm9ncmVzcyA9IGZhbHNlKSk7XG5cbiAgICAgICAgY29uc3QgZHJvcFRhcmdldCA9IHRoaXMuX25vZGVDb21wb25lbnRzLmZpbmQoKG4pID0+IG4uX2lzQW55RHJvcFpvbmVBY3RpdmUpO1xuXG4gICAgICAgIGlmICghZHJvcFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gZHJvcFRhcmdldC5fYWN0aXZlRHJvcFpvbmVzWzBdLnBsYWNlbWVudDtcblxuICAgICAgICB0aGlzLl9ub2RlQ29tcG9uZW50cy5mb3JFYWNoKChuKSA9PiBuLl9kZWFjdGl2YXRlRHJvcFpvbmVzKCkpO1xuXG4gICAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdhZnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcblxuICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKS5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBkcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0c1swXSk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZT8uYmxhbmspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5leHROb2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID1cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gZHJvcFRhcmdldC5ub2RlLmlkKT8udGFyZ2V0cyA/PyBbXTtcbiAgICAgICAgICAgIGRyb3BUYXJnZXQubm9kZS50YXJnZXRzID0gW25vZGVUb0Ryb3AuaWRdO1xuXG4gICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2VtZW50ID09PSAnYmVmb3JlJykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKEFwcHJvdmFsRmxvd1NlbGVjdFR5cGVDb21wb25lbnQsIHVuZGVmaW5lZCwgdGhpcy5faW5qZWN0b3IpO1xuXG4gICAgICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChkYXRhOiBTZWxlY3RUeXBlRGlhbG9nRm9ybURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgdG9OZXh0U2VyaWFsIH0gPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMuU0VSSUFMKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKGRyb3BUYXJnZXQubm9kZS5pZCwgW25vZGVUb0Ryb3AuaWRdKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID0gW2Ryb3BUYXJnZXQubm9kZS5pZF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5QQVJBTExFTCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKG5vZGVUb0Ryb3AsIGRyb3BUYXJnZXQubm9kZSwgdG9OZXh0U2VyaWFsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQgPT09ICdiZWZvcmUtYWxsJykge1xuICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcblxuICAgICAgICAgICAgY29uc3QgZmlyc3RDb2x1bW5Ob2RlcyA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbMF0ubm9kZXM7XG4gICAgICAgICAgICBub2RlVG9Ecm9wLnRhcmdldHMgPSBmaXJzdENvbHVtbk5vZGVzLm1hcCgobm9kZSkgPT4gbm9kZS5pZCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQgPT09ICdhZnRlci1hbGwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0Ryb3ApO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG5cbiAgICAgICAgICAgIG5vZGVUb0Ryb3AudGFyZ2V0cyA9IFsuLi5kcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0c107XG5cbiAgICAgICAgICAgIGlmIChkcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q29sdW1uTm9kZXMgPSB0aGlzLl9ncmFwaC5jb2x1bW5zW3RoaXMuX2dyYXBoLmNvbHVtbnMubGVuZ3RoIC0gMV0ubm9kZXM7XG4gICAgICAgICAgICAgICAgbGFzdENvbHVtbk5vZGVzLmZvckVhY2goKG5vZGUpID0+IG5vZGUudGFyZ2V0cy5wdXNoKG5vZGVUb0Ryb3AuaWQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaWQgIT09IGRyb3BUYXJnZXQubm9kZS5pZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoZHJvcFRhcmdldC5ub2RlLmlkLCBbbm9kZVRvRHJvcC5pZF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wOiBBcHByb3ZhbEdyYXBoTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMucHVzaChub2RlVG9Ecm9wKTtcbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG93TWVzc2FnZSh0eXBlOiBBcHByb3ZhbEZsb3dNZXNzYWdlVHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFt7IHR5cGUgfV07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQnVpbGQgQXBwcm92YWwgRmxvdyBncmFwaCBhbmQgcmVuZGVyIGl0ICovXG4gICAgcHJpdmF0ZSBfYnVpbGRWaWV3KGFwcHJvdmFsUHJvY2VzczogQXBwcm92YWxQcm9jZXNzKTogdm9pZCB7XG4gICAgICAgIGlmICghYXBwcm92YWxQcm9jZXNzLm5vZGVzKSB7XG4gICAgICAgICAgICBhcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFwcHJvdmFsUHJvY2Vzcy53YXRjaGVycykge1xuICAgICAgICAgICAgYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzID0gYXBwcm92YWxQcm9jZXNzO1xuICAgICAgICB0aGlzLl9ncmFwaCA9IGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGgodGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzKTtcblxuICAgICAgICBpZiAodGhpcy5fZ3JhcGguZXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZSgnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dyYXBoTWV0YWRhdGEgPSBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoTWV0YWRhdGEodGhpcy5fZ3JhcGgpO1xuXG4gICAgICAgIGNvbnN0IG5vZGVzID0gZ2V0R3JhcGhOb2Rlcyh0aGlzLl9ncmFwaCk7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gIW5vZGUuc3BhY2UpO1xuICAgICAgICB0aGlzLl9tdWx0aXBsZVJvb3ROb2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gdGhpcy5fZ3JhcGhNZXRhZGF0YVtub2RlLmlkXS5pc1Jvb3QpLmxlbmd0aCA+IDE7XG4gICAgICAgIHRoaXMuX211bHRpcGxlRmluYWxOb2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gdGhpcy5fZ3JhcGhNZXRhZGF0YVtub2RlLmlkXS5pc0ZpbmFsKS5sZW5ndGggPiAxO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2dyaWRMaXN0Py5jbGVhclNlbGVjdGlvbigpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24oMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gd2luZG93IHJlc2l6ZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgbWVyZ2UoZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLCBmcm9tRXZlbnQodGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJykpXG4gICAgICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDUwLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWUgfSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mb2N1c05vZGUobm9kZTogQXBwcm92YWxHcmFwaE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZVRvRm9jdXMgPSB0aGlzLl9ub2RlQ29tcG9uZW50cy5maW5kKChjb21wKSA9PiBjb21wLm5vZGUgPT09IG5vZGUpO1xuXG4gICAgICAgIGlmICghbm9kZVRvRm9jdXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3ZlQ29sSW5WaWV3KG5vZGUuY29sSW5kZXggPz8gMCk7XG4gICAgICAgIG5vZGVUb0ZvY3VzLl9mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVXBkYXRlIG5vZGUgb2JqZWN0IGluIGxvY2FsIGFwcHJvdmFsIHByb2Nlc3MgZGF0YSBzdHJ1Y3R1cmUgKi9cbiAgICBwcml2YXRlIF91cGRhdGVOb2RlKG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlSW5kZXggPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZEluZGV4KChuKSA9PiBuLmlkID09PSBub2RlLmlkKTtcblxuICAgICAgICBpZiAobm9kZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlc1tub2RlSW5kZXhdID0gbm9kZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIERlbGV0ZSBub2RlIG9iamVjdCBpbiBsb2NhbCBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgc3RydWN0dXJlICovXG4gICAgcHJpdmF0ZSBfZGVsZXRlTm9kZShub2RlVG9EZWxldGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2Rlc1RvRGVsZXRlID0gW25vZGVUb0RlbGV0ZV07XG4gICAgICAgIGNvbnN0IGdyYXBoTm9kZXMgPSBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKTtcbiAgICAgICAgbGV0IGN1cnJOb2RlID0gZ3JhcGhOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBub2RlVG9EZWxldGUuaWQpO1xuICAgICAgICBsZXQgbmV4dE5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChjdXJyTm9kZT8udGFyZ2V0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gY3Vyck5vZGU/LnRhcmdldHNbMF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5leHROb2RlPy5ibGFuayAmJiB0aGlzLl9ncmFwaE1ldGFkYXRhW25leHROb2RlLmlkXS5wYXJlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlc1RvRGVsZXRlLnB1c2gobmV4dE5vZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1cnJOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gZ3JhcGhOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBjdXJyTm9kZT8udGFyZ2V0c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChuZXh0Tm9kZT8uYmxhbmsgJiYgdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0Tm9kZS5pZF0ucGFyZW50cy5sZW5ndGggPT09IDEpO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZVRvRGVsZXRlLmlkXS5wYXJlbnRzWzBdO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBub2RlVG9EZWxldGUudGFyZ2V0c1swXTtcbiAgICAgICAgY29uc3QgaXNQYXJlbnRQYXJhbGxlbFN0YXJ0ID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtwYXJlbnQ/LmlkXT8ucGFyYWxsZWxTdGFydDtcbiAgICAgICAgY29uc3QgaXNUYXJnZXRQYXJhbGxlbEVuZCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbdGFyZ2V0XT8ucGFyYWxsZWxFbmQ7XG4gICAgICAgIGNvbnN0IHRhcmdldHMgPVxuICAgICAgICAgICAgKGlzUGFyZW50UGFyYWxsZWxTdGFydCAmJiBpc1RhcmdldFBhcmFsbGVsRW5kKSB8fCBub2Rlc1RvRGVsZXRlLmxlbmd0aCA+IDEgPyBbXSA6IGN1cnJOb2RlPy50YXJnZXRzID8/IFtdO1xuXG4gICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKG5vZGVUb0RlbGV0ZS5pZCwgdGFyZ2V0cyk7XG5cbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbHRlcigobm9kZSkgPT4gIW5vZGVzVG9EZWxldGUuaW5jbHVkZXMobm9kZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkUGFyYWxsZWxUYXJnZXRzKHRhcmdldE5vZGVJZDogc3RyaW5nLCBub2RlSWRUb0FkZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZChub2RlLCB0YXJnZXROb2RlSWQpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzLnB1c2gobm9kZUlkVG9BZGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBcImlkVG9SZXBsYWNlXCIgaW4gYWxsIG5vZGVzJyBcInRhcmdldHNcIiB3aXRoIG9uZXMgaW4gXCJyZXBsYWNlV2l0aFwiIGFycmF5ICovXG4gICAgcHJpdmF0ZSBfcmVwbGFjZVRhcmdldHMoSWRUb1JlcGxhY2U6IHN0cmluZywgcmVwbGFjZVdpdGhJZDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgIGlmIChpc05vZGVUYXJnZXRzSW5jbHVkZUlkKG4sIElkVG9SZXBsYWNlKSkge1xuICAgICAgICAgICAgICAgIG4udGFyZ2V0cyA9IG4udGFyZ2V0cy5maWx0ZXIoKF9pZCkgPT4gX2lkICE9PSBJZFRvUmVwbGFjZSk7XG4gICAgICAgICAgICAgICAgbi50YXJnZXRzLnB1c2goLi4ucmVwbGFjZVdpdGhJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNhdmUgY3VycmVudCBzdGF0ZSBvZiBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgdG8gYmUgYWJsZSB0byB1bmRvIGFuIGFjdGlvbiBtYWRlIGluIGVkaXQgbW9kZSAqL1xuICAgIHByaXZhdGUgX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5leHRIb3Jpem9udGFsTm9kZSA9IChcbiAgICAgICAgbm9kZUluZGV4OiBudW1iZXIsXG4gICAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0J1xuICAgICk6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhEaWZmID0gZGlyZWN0aW9uID09PSAncmlnaHQnID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBuZXh0Q29sdW1uID0gdGhpcy5fZ3JhcGguY29sdW1uc1tjb2x1bW5JbmRleCArIGluZGV4RGlmZl07XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gbmV4dENvbHVtbj8ubm9kZXNbbm9kZUluZGV4XTtcblxuICAgICAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHROb2RlLmJsYW5rIHx8IG5leHROb2RlLnNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXggKyBpbmRleERpZmYsIGRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dE5vZGU7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0TmV4dFZlcnRpY2FsTm9kZSA9IChcbiAgICAgICAgbm9kZUluZGV4OiBudW1iZXIsXG4gICAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICAgIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJ1xuICAgICk6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhEaWZmID0gZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTE7XG4gICAgICAgIGNvbnN0IGN1cnJDb2x1bW4gPSB0aGlzLl9ncmFwaC5jb2x1bW5zW2NvbHVtbkluZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBjdXJyQ29sdW1uLm5vZGVzW25vZGVJbmRleCArIGluZGV4RGlmZl07XG5cbiAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0Tm9kZS5ibGFuayB8fCBuZXh0Tm9kZS5zcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldE5leHRWZXJ0aWNhbE5vZGUobm9kZUluZGV4ICsgaW5kZXhEaWZmLCBjb2x1bW5JbmRleCwgZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0Tm9kZTtcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfY2Fyb3VzZWxTdGVwU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoIC8gdGhpcy5fY2Fyb3VzZWxTdGVwc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zY3JvbGxEaWZmKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5fZ3JhcGhFbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCAtIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY2Fyb3VzZWxTdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9jYXJvdXNlbFN0ZXBzTGVmdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0IC8gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2Nhcm91c2VsU3RlcHNSaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKFxuICAgICAgICAgICAgKHRoaXMuX3Njcm9sbERpZmYgLSBNYXRoLnJvdW5kKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KSkgLyB0aGlzLl9jYXJvdXNlbFN0ZXBTaXplXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfZGVmYXVsdERpYWxvZ09wdGlvbnMoKTogRGVmYXVsdERpYWxvZ09wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGVhbURhdGFTb3VyY2U6IHRoaXMudGVhbURhdGFTb3VyY2UsXG4gICAgICAgICAgICB1c2VyRGF0YVNvdXJjZTogdGhpcy51c2VyRGF0YVNvdXJjZSxcbiAgICAgICAgICAgIHVzZXJEZXRhaWxzVGVtcGxhdGU6IHRoaXMudXNlckRldGFpbHNUZW1wbGF0ZSxcbiAgICAgICAgICAgIHJ0bDogdGhpcy5fcnRsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maW5kU2VyaWFsTm9kZSh5SW5kZXg/OiBudW1iZXIsIHRhcmdldHM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0SXNQYXJlbnQgPVxuICAgICAgICAgICAgTnVtYmVyLmlzSW50ZWdlcih5SW5kZXgpICYmXG4gICAgICAgICAgICB0YXJnZXRzPy5zb21lKCh0YXJnZXRJZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVJbmRleCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbdGFyZ2V0SWRdPy5ub2RlSW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobm9kZUluZGV4KSAmJiBub2RlSW5kZXghIDw9IHlJbmRleCEgLSAxO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRhcmdldElzUGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0cyA/PyBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gdGFyZ2V0cz8uWzBdKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRTZXJpYWxOb2RlKHlJbmRleCwgdGFyZ2V0Tm9kZT8udGFyZ2V0cyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKFxuICAgICAgICBhZGRlZE5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlLFxuICAgICAgICBzb3VyY2VOb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICAgICAgdG9OZXh0U2VyaWFsID0gZmFsc2VcbiAgICApOiB2b2lkIHtcbiAgICAgICAgYWRkZWROb2RlLnRhcmdldHMgPSBzb3VyY2VOb2RlLnRhcmdldHM7XG5cbiAgICAgICAgdGhpcy5fYWRkUGFyYWxsZWxUYXJnZXRzKHNvdXJjZU5vZGUuaWQsIGFkZGVkTm9kZS5pZCk7XG5cbiAgICAgICAgaWYgKHRvTmV4dFNlcmlhbCkge1xuICAgICAgICAgICAgbGV0IHlJbmRleCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbc291cmNlTm9kZS5pZF0ubm9kZUluZGV4O1xuICAgICAgICAgICAgbGV0IHRhcmdldHMgPSBzb3VyY2VOb2RlLnRhcmdldHM7XG5cbiAgICAgICAgICAgIGlmICh5SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VOb2RlTWV0YWRhdGEgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3NvdXJjZU5vZGUuaWRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5vZGVzID0gdGhpcy5fZ3JhcGguY29sdW1ucz8uW3NvdXJjZU5vZGVNZXRhZGF0YS5jb2x1bW5JbmRleCFdPy5ub2RlcztcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0UGFyYWxsZWxOb2RlID0gY29sdW1uTm9kZXMuZmluZCgobm9kZSwgaW5kZXgpID0+IGluZGV4ID4gMCAmJiAhbm9kZS5zcGFjZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV4dFBhcmFsbGVsTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB5SW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25leHRQYXJhbGxlbE5vZGUuaWRdLmNvbHVtbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzID0gbmV4dFBhcmFsbGVsTm9kZS50YXJnZXRzO1xuXG4gICAgICAgICAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gdGhpcy5fZmluZFNlcmlhbE5vZGUoeUluZGV4LCB0YXJnZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYWRkZWROb2RlLnRhcmdldHMgPSB0aGlzLl9maW5kU2VyaWFsTm9kZSh5SW5kZXgsIHRhcmdldHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRpbmdTdGF0ZXMgPSBbdGhpcy50ZWFtRGF0YVNvdXJjZSwgdGhpcy51c2VyRGF0YVNvdXJjZSwgdGhpcy53YXRjaGVyRGF0YVNvdXJjZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGRzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKGRzLm9uRGF0YVJlcXVlc3RlZCgpLnBpcGUobWFwVG8odHJ1ZSkpLCBkcy5vbkRhdGFSZWNlaXZlZCgpLnBpcGUobWFwVG8oZmFsc2UpKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGRzLmlzRGF0YUxvYWRpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QobG9hZGluZ1N0YXRlcyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChsb2FkaW5nU3RhdGVzKSA9PiBsb2FkaW5nU3RhdGVzLnNvbWUoQm9vbGVhbikpLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNvbWVMb2FkaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNvbWVMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVxdWVzdGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlY2VpdmVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoc3ViKTtcbiAgICB9XG59XG5cbmludGVyZmFjZSBEZWZhdWx0RGlhbG9nT3B0aW9ucyB7XG4gICAgdGVhbURhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlPEFwcHJvdmFsVGVhbT47XG4gICAgdXNlckRhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlPEFwcHJvdmFsVXNlcj47XG4gICAgdXNlckRldGFpbHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBydGw6IGJvb2xlYW47XG59XG4iLCI8bmctY29udGFpbmVyIGZkQ29tcGFjdD5cbiAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctbWVzc2FnZXNcbiAgICAgICAgWyhtZXNzYWdlcyldPVwiX21lc3NhZ2VzXCJcbiAgICAgICAgW3VuZG9MYXN0QWN0aW9uQXZhaWxhYmxlXT1cIiEhX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzXCJcbiAgICAgICAgKHVuZG9MYXN0QWN0aW9uKT1cIl91bmRvTGFzdEFjdGlvbigpXCJcbiAgICA+PC9mZHAtYXBwcm92YWwtZmxvdy1tZXNzYWdlcz5cblxuICAgIDxmZC1ncmlkLWxpc3RcbiAgICAgICAgI2dyaWRMaXN0XG4gICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3Rvb2xiYXJcIlxuICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfaXNFZGl0TW9kZSA/ICdtdWx0aVNlbGVjdCcgOiAnbm9uZSdcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIl9vbk5vZGVTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8ZmQtZ3JpZC1saXN0LXRpdGxlLWJhciBbdGl0bGVdPVwidGl0bGUgfHwgKCdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5kZWZhdWx0VGl0bGUnIHwgZmRUcmFuc2xhdGUpXCI+XG4gICAgICAgICAgICA8ZmQtZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXI+PC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyLXNwYWNlcj5cblxuICAgICAgICAgICAgPGZkcC1hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9uc1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNFZGl0QXZhaWxhYmxlXCJcbiAgICAgICAgICAgICAgICBbZ3JhcGhdPVwiX2dyYXBoXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWROb2Rlc109XCJfc2VsZWN0ZWROb2Rlc1wiXG4gICAgICAgICAgICAgICAgW2dyYXBoTWV0YWRhdGFdPVwiX2dyYXBoTWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgIFtpc0VkaXRNb2RlXT1cIl9pc0VkaXRNb2RlXCJcbiAgICAgICAgICAgICAgICAoZW50ZXJFZGl0TW9kZSk9XCJfZW50ZXJFZGl0TW9kZSgpXCJcbiAgICAgICAgICAgICAgICAoYWRkTm9kZSk9XCJfYWRkTm9kZSgkZXZlbnQubm9kZSwgJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgICAgIChlZGl0U2VsZWN0ZWROb2RlKT1cIl9lZGl0Tm9kZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZGVsZXRlU2VsZWN0ZWROb2Rlcyk9XCJfZGVsZXRlU2VsZWN0ZWROb2RlcygpXCJcbiAgICAgICAgICAgID48L2ZkcC1hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9ucz5cbiAgICAgICAgPC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzXCJcbiAgICAgICAgICAgICpuZ0lmPVwiX2FwcHJvdmFsUHJvY2Vzcz8ud2F0Y2hlcnM/Lmxlbmd0aCB8fCBfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIndhdGNoZXJzTGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X193YXRjaGVycy10aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IHdhdGNoZXJzTGFiZWwgfHwgKCdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5kZWZhdWx0V2F0Y2hlcnNMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFfaXNFZGl0TW9kZVwiPlxuICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHdhdGNoZXIgb2YgX2FwcHJvdmFsUHJvY2Vzcz8ud2F0Y2hlcnM7IHRyYWNrQnk6IF90cmFja0J5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICBbaW1hZ2VdPVwid2F0Y2hlci5pbWdVcmwgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwid2F0Y2hlci5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NpcmNsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGF2YXRhckNsaWNrZWQpPVwiX29uV2F0Y2hlckNsaWNrKHdhdGNoZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2ZkLWF2YXRhcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiX2lzRWRpdE1vZGVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtbXVsdGktaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cIl91c2Vyc0ZvcldhdGNoZXJzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cud2F0Y2hlcnNJbnB1dFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJfZGlzcGxheVVzZXJGblwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZuXT1cIl91c2VyVmFsdWVGblwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93QWxsQnV0dG9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIl9zZWxlY3RlZFdhdGNoZXJJZHNcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfd2F0Y2hlcnNTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2ZkLW11bHRpLWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhX2dyYXBoLmVycm9yc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9ncmFwaC5jb2x1bW5zLmxlbmd0aDsgZWxzZSBlbXB0eUFwcHJvdmFsRmxvd0dyYXBoXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2NvbnRhaW5lci0tZXh0cmEtcGFkZGluZy1zdGFydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXItLWV4dHJhLXBhZGRpbmctZW5kXT1cInRydWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1jYXJvdXNlbC1jb250cm9sc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9zY3JvbGxEaWZmID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHMtLWVkaXQtbW9kZV09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9jYXJvdXNlbFN0ZXBzTGVmdCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHNfX2J1dHRvbi0tcHJldi1zbGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cucHJldkJ1dHRvbkFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRTbGlkZSgtMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIFtnbHlwaF09XCInbmF2aWdhdGlvbi0nICsgKF9ydGwgPyAncmlnaHQnIDogJ2xlZnQnKSArICctYXJyb3cnXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IF9jYXJvdXNlbFN0ZXBzTGVmdCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9jYXJvdXNlbFN0ZXBzUmlnaHQgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LWNhcm91c2VsLWNvbnRyb2xzX19idXR0b24tLW5leHQtc2xpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5leHRCdXR0b25BcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0U2xpZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgX2Nhcm91c2VsU3RlcHNSaWdodCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIFtnbHlwaF09XCInbmF2aWdhdGlvbi0nICsgKF9ydGwgPyAnbGVmdCcgOiAncmlnaHQnKSArICctYXJyb3cnXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lci0tbXVsdGlwbGUtcm9vdC1ub2Rlc109XCJfbXVsdGlwbGVSb290Tm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb250YWluZXItLW11bHRpcGxlLWZpbmFsLW5vZGVzXT1cIl9tdWx0aXBsZUZpbmFsTm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXNjcm9sbGJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNncmFwaENvbnRhaW5lckVsXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2dyYXBoRWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLS1lZGl0LW1vZGVdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvd19fZ3JhcGgtY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBfZ3JhcGguY29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1hcHByb3ZhbC1mbG93LW5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIGNvbHVtbi5ub2RlczsgbGV0IG5vZGVJbmRleCA9IGluZGV4OyB0cmFja0J5OiBfdHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcHByb3ZhbEZsb3dOb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIl9pc0Nka0RyYWdEaXNhYmxlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttZXRhXT1cIl9ncmFwaE1ldGFkYXRhW25vZGUuaWRdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0VkaXRdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmV4dE5vZGVCbGFua109XCJfaXNOZXh0Tm9kZUJsYW5rKG5vZGUsIGNvbHVtbkluZGV4LCBub2RlSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0R1ZURhdGVdPVwiY2hlY2tEdWVEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkdWVEYXRlVGhyZXNob2xkXT1cImR1ZURhdGVUaHJlc2hvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbmRlckFycm93XT1cImNvbHVtbkluZGV4ID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsTm9kZXNJbkNvbHVtbkFwcHJvdmVkXT1cIiEhY29sdW1uLmFsbE5vZGVzQXBwcm92ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcHJvdmFsU3RhdHVzVGVtcGxhdGVdPVwiYXBwcm92YWxTdGF0dXNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzQ29sb3JNYXBwaW5nXT1cInN0YXR1c0NvbG9yTWFwcGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25BZGQpPVwiX2FkZE5vZGUobm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25FZGl0KT1cIl9lZGl0Tm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25EZWxldGUpPVwiX29uTm9kZURlbGV0ZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25Ob2RlS2V5RG93bigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJfZHJhZ0Ryb3BJblByb2dyZXNzID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cIl9vbk5vZGVEcm9wKG5vZGUsICRldmVudC5zb3VyY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnTW92ZWQpPVwiX29uTm9kZURyYWdNb3ZlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHJpY2sgd2l0aCB1c2luZyBwcm9qZWN0aW9uIHRvIG1ha2UgZ3JpZCBsaXN0IGl0ZW1zIHZpc2libGUgZm9yIHRoZSBncmlkIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtZ3JpZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhbm9kZS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cImFwcHJvdmFsRmxvd05vZGUuYXBwcm92YWxGbG93Tm9kZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2xiYXJDbGlja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1ub2RlLWlubmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLW5vZGUtaW5uZXItLWVkaXRdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmVzcyk9XCJfb25Ob2RlQ2xpY2sobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1ncmlkLWxpc3QtaXRlbS10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2lzRWRpdE1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhcHByb3ZhbEZsb3dOb2RlLl9vdmVyZmxvd01lbnVCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWdyaWQtbGlzdC1pdGVtLXRvb2xiYXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWdyaWQtbGlzdC1pdGVtLWltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCJub2RlLmFwcHJvdmVycy5sZW5ndGggPT09IDEgPyBub2RlLmFwcHJvdmVyc1swXS5pbWdVcmwgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm5vZGUuYXBwcm92ZXJzLmxlbmd0aCA+IDEgPyBub2RlLmRlc2NyaXB0aW9uIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaXJjbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtYXZhdGFyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZkLWdyaWQtbGlzdC1pdGVtLWJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcHJvdmFsRmxvd05vZGUuX25vZGVDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWdyaWQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkcC1hcHByb3ZhbC1mbG93LW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9mZC1ncmlkLWxpc3Q+XG5cbiAgICA8ZGl2IGZkLWJhciAqbmdJZj1cIl9pc0VkaXRNb2RlXCI+XG4gICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cuZWRpdE1vZGVTYXZlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTYXZlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9zYXZlRWRpdE1vZGVDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG5cbiAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVkaXRNb2RlRXhpdEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUV4aXRCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2V4aXRFZGl0TW9kZSgpXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlBcHByb3ZhbEZsb3dHcmFwaD5cbiAgICAgICAgPGZpZ3VyZSBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlIHR5cGU9XCJzcG90XCIgW3N2Z0NvbmZpZ109XCJfZW1wdHlBcHByb3ZhbEZsb3dTcG90Q29uZmlnXCI+XG4gICAgICAgICAgICA8ZmlnY2FwdGlvbiBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlLWZpZ2NhcHRpb24+XG4gICAgICAgICAgICAgICAgPGgzIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lbXB0eVRpdGxlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICA8cCBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lbXB0eUhpbnQnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2ZpZ2NhcHRpb24+XG4gICAgICAgIDwvZmlndXJlPlxuXG4gICAgICAgIDwhLS0gVE9ETyAjNTE3ODogUmVwbGFjZSB3aXRoIGlsbHVzdHJhdGVkIGltYWdlIGNvbXBvbmVudCBhZnRlciBpdCBnZXRzIGZpeGVkIC0tPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTI4XCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMjhcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTI4IDEyOFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJzYXBJbGx1cy1TcG90LU5vRGF0YVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk00MS42MTc5LDMyLjcxNzRIODQuNjI3M2ExLDEsMCwwLDEsLjcyMy4zMDkybDcuMjQ0NSw3LjU4MjQsNy40ODE3LDcuODQ5MWExLDEsMCwwLDEsLjI3NjEuNjlsLS4wMDQ2LDU1LjYwNjlhNC4xMDM4LDQuMTAzOCwwLDAsMS0uODc4NywyLjEyMTJBNC4wNTY0LDQuMDU2NCwwLDAsMSw5OC4xLDEwNy45NjMxbC01Ni4zODU4LjAzMTNhMi42MTY3LDIuNjE2NywwLDAsMS0zLjA4MTItMy4yMzA5bC0uMDE1Mi02OS4wNTk0WlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfUGF0dGVyblNoYWRvd1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfUGF0dGVyblNoYWRvdylcIlxuICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zNS43OTI4LDI3LjQ5ODdINzguODAyMmExLDEsMCwwLDEsLjcyMy4zMDkyTDg2Ljc3LDM1LjM5bDcuNDgxNiw3Ljg0OTJhMSwxLDAsMCwxLC4yNzYyLjY5bC0uMDA0Niw1NS42MDY5YTMsMywwLDAsMS0zLDNIMzUuODA4YTIuOTk0NiwyLjk5NDYsMCwwLDEtMy0yLjk5MTNjLS4wMS0xMi4wNTY0LS4wNDIzLTU3LjAxMTYtLjAxNTItNjkuMDU5NUEyLjk5NDMsMi45OTQzLDAsMCwxLDM1Ljc5MjgsMjcuNDk4N1pcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX09iamVjdEZpbGxDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfT2JqZWN0RmlsbENvbG9yKVwiXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTkzLjI5NzgsNDQuNTMzNUg3OC44MjA4YS45OTI1Ljk5MjUsMCwwLDEtLjk3NC0xLjAxVjI4LjUxMDhhLjk3Ljk3LDAsMCwxLDEuNjYyOC0uNzE0M0w5My45ODY1LDQyLjgwOTJBMS4wMTUxLDEuMDE1MSwwLDAsMSw5My4yOTc4LDQ0LjUzMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19CcmFuZENvbG9yU2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19CcmFuZENvbG9yU2Vjb25kYXJ5KVwiXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTEwNC42MDgsMzguOTQ4NWw1LjkxNTctMS43NzIxYzEuMzItLjM5NTQuNzU4NC0yLjUyNTgtLjU2ODktMi4xMjgyTDEwNC4wMzkyLDM2LjgyYy0xLjMyLjM5NTMtLjc1ODQsMi41MjU4LjU2ODgsMi4xMjgyWlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNODUuMjk3MywyMS4yNDY1bC45NzE4LTUuOTMzMWMuMjE1NC0xLjMxNTEtMS43NzctMS44ODA3LTEuOTk0MS0uNTU1NGwtLjk3MTgsNS45MzMyYy0uMjE1NSwxLjMxNTEsMS43NzcsMS44ODA3LDEuOTk0MS41NTUzWlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNOTUuMzAzNCwyOS4wMDE1YTEuMDEsMS4wMSwwLDAsMS0uNjgzNy0uMjY3LDEuMDc4MywxLjA3ODMsMCwwLDEtLjA4NjQtMS40OTMybDUuOTUxMS02Ljg4NTdhMS4wMSwxLjAxLDAsMCwxLDEuNDUzOC0uMDg4NCwxLjA3ODUsMS4wNzg1LDAsMCwxLC4wODY1LDEuNDkzMmwtNS45NTExLDYuODg1OEExLjAxNjQsMS4wMTY0LDAsMCwxLDk1LjMwMzQsMjkuMDAxNVpcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0xheWVyaW5nMVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfTGF5ZXJpbmcxKVwiXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTk0Ljg3NDcsNDIuODg2MSw4MC4wODU1LDI3LjQ2MjNhMS41MTUyLDEuNTE1MiwwLDAsMC0xLjA4ODUtLjQ2MzZIMzUuODA3YTMuNTA5LDMuNTA5LDAsMCwwLTMuNTE0NiwzLjQ4MzZjLS4wMjk0LDEzLjI4NTcuMDEzNyw2Ni43NTU5LjAxNTcsNjkuMDI1N2EzLjUwNzYsMy41MDc2LDAsMCwwLDMuNTE0NiwzLjQ4OTRIOTEuNzcwOWEzLjUxMDYsMy41MTA2LDAsMCwwLDMuNTE0Ni0zLjQ5ODJsLjAwNS01NS41Nzg1QTEuNDksMS40OSwwLDAsMCw5NC44NzQ3LDQyLjg4NjFabS0xNi4yMS0xNC44MzU1YTEuMTUsMS4xNSwwLDAsMSwuMjU2MS0uMDMwOSwxLjA0LDEuMDQsMCwwLDEsLjUxLjIxMzRsMTQuMjc2LDE0Ljg4MzcuMDE5NC4wMmEuNTg5MS41ODkxLDAsMCwxLC4wOTY4LjYyNTFjLS4xMDE2LjE3NjQtLjQwODYuMjQtLjY5LjI0TDc4LjgzNTUsNDRhLjYwMzEuNjAzMSwwLDAsMS0uNTQ3Mi0uNjEzMWMtLjAwODctNC45NTg4LS4wMTctOS45MDE1LS4wMDM1LTE0Ljg2ODlBLjUxODkuNTE4OSwwLDAsMSw3OC42NjQ2LDI4LjA1MDZabTEzLjEwNjIsNzMuOTVIMzUuODE4OGEyLjUwNDUsMi41MDQ1LDAsMCwxLTIuNTEwNy0yLjQ5MWMtLjAwMi0yLjI2OTQtLjA0NTEtNTUuNzQtLjAxNTctNjkuMDI0OGEyLjUwNTQsMi41MDU0LDAsMCwxLDIuNTEwNy0yLjQ4NjFINzcuMzY4NGExLjQ5LDEuNDksMCwwLDAtLjA5NzYuNTEwNlY0My40OTM0QTEuNTE0NSwxLjUxNDUsMCwwLDAsNzguNzg5NCw0NUg3OC45Mkw5NC4yODYsNDcuOTc0OWwtLjAwNDYsNTEuNTI2OUEyLjUwNzQsMi41MDc0LDAsMCwxLDkxLjc3MDgsMTAyLjAwMDZaXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19TdHJva2VEZXRhaWxDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfU3Ryb2tlRGV0YWlsQ29sb3IpXCJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
835
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9hcHByb3ZhbC1mbG93L2FwcHJvdmFsLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRHLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLGlDQUFpQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQ0gsb0NBQW9DLEVBRXZDLE1BQU0sMkVBQTJFLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDOUYsT0FBTyxFQUVILHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFHL0IsTUFBTSwyREFBMkQsQ0FBQztBQUNuRSxPQUFPLEVBQ0gsYUFBYSxFQUNiLHlCQUF5QixFQUN6QixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxXQUFXLEVBQ2QsTUFBTSxXQUFXLENBQUM7QUFXbkIsT0FBTyxFQUNILCtCQUErQixFQUVsQyxNQUFNLGlFQUFpRSxDQUFDO0FBQ3pFLE9BQU8sRUFHSCx5QkFBeUIsRUFDekIsaUNBQWlDLEVBQ3BDLE1BQU0sdUJBQXVCLENBQUM7QUFLL0IsT0FBTyxFQUVILGNBQWMsRUFDZCwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzdCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHOUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCOzs7R0FHRztBQVFILE1BQU0sT0FBTyxxQkFBcUI7SUErSzlCLGNBQWM7SUFDZCxZQUNxQixjQUE2QixFQUM3QixJQUF1QixFQUN2QixTQUFtQixFQUNRLFNBQXlDLEVBQ3hELFdBQXVCO1FBSm5DLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDUSxjQUFTLEdBQVQsU0FBUyxDQUFnQztRQUN4RCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTNKeEQsb0RBQW9EO1FBQzNDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRTlCO3NEQUM4QztRQUNyQyxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFFOUIsa0ZBQWtGO1FBQ3pFLGtDQUE2QixHQUFxQixDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUxRiw0Q0FBNEM7UUFDbkMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFLakMsd0RBQXdEO1FBQy9DLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUV0Qyw4REFBOEQ7UUFDckQsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLDhEQUE4RDtRQUNyRCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUF1Qm5DLGlEQUFpRDtRQUN2QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFdkQsOENBQThDO1FBQ3BDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFMUQsK0NBQStDO1FBQ3JDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFM0QsMERBQTBEO1FBQ2hELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFNUQsc0RBQXNEO1FBQzVDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFFaEUsa0RBQWtEO1FBQ2xELCtEQUErRDtRQUNyRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFckQsbURBQW1EO1FBQ25ELCtEQUErRDtRQUNyRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUEwQnBELGNBQWM7UUFDZCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixjQUFjO1FBQ2QsbUJBQWMsR0FBMEIsRUFBRSxDQUFDO1FBRTNDLGNBQWM7UUFDZCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixjQUFjO1FBQ2QsMEJBQXFCLEdBQW1CLEVBQUUsQ0FBQztRQUUzQyxjQUFjO1FBQ04sc0JBQWlCLEdBQW1CLEVBQUUsQ0FBQztRQUUvQyxjQUFjO1FBQ2Qsd0JBQW1CLEdBQXlCLEVBQUUsQ0FBQztRQUUvQyxjQUFjO1FBQ2QsY0FBUyxHQUEwQixFQUFFLENBQUM7UUFFdEMsY0FBYztRQUNkLG1CQUFjLEdBQUcsYUFBYSxDQUFDO1FBRS9CLGNBQWM7UUFDZCxpQkFBWSxHQUFHLFdBQVcsQ0FBQztRQUUzQixjQUFjO1FBQ2QsZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUV2QixjQUFjO1FBQ2QsaUNBQTRCLEdBQUc7WUFDM0IsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUU7U0FDaEQsQ0FBQztRQUVGLGNBQWM7UUFDZCx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFM0IsY0FBYztRQUNkLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUU1QixjQUFjO1FBQ2Qsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGNBQWM7UUFDTCx5QkFBb0IsR0FBRyxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUtuRSxjQUFjO1FBQ04sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTVDLGNBQWM7UUFDTix3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBeXFCbEQsY0FBYztRQUNOLDJCQUFzQixHQUFHLENBQzdCLFNBQWlCLEVBQ2pCLFdBQW1CLEVBQ25CLFNBQTJCLEVBQ0UsRUFBRTtZQUMvQixNQUFNLFNBQVMsR0FBRyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUNoRSxNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTlDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ1gsT0FBTyxTQUFTLENBQUM7YUFDcEI7WUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDbEMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLFdBQVcsR0FBRyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDckY7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDLENBQUM7UUFFRixjQUFjO1FBQ04seUJBQW9CLEdBQUcsQ0FDM0IsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsU0FBd0IsRUFDSyxFQUFFO1lBQy9CLE1BQU0sU0FBUyxHQUFHLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFFekQsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDWCxPQUFPLFNBQVMsQ0FBQzthQUNwQjtZQUVELElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNuRjtZQUVELE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQztRQXZzQkUsT0FBTyxDQUFDLEdBQUcsQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsSUFBSSxlQUFlO1FBQ2YsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxjQUFjO1FBQ2QsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN4RyxJQUFJLE9BQU8sRUFBRTtnQkFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDakU7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2FBQ3hEO1NBQ0o7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3pCLE1BQU0sVUFBVSxHQUNaLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNsRyxJQUFJLFVBQVUsRUFBRTtnQkFDWixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN2RTtpQkFBTTtnQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7YUFDM0Q7U0FDSjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN4RyxJQUFJLE9BQU8sRUFBRTtnQkFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDakU7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2FBQ3hEO1NBQ0o7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUMvRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO0lBQ2QsZ0JBQWdCLENBQUMsSUFBdUIsRUFBRSxXQUFtQixFQUFFLFNBQWlCO1FBQzVFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEUsTUFBTSxhQUFhLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQztRQUN0QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQztRQUUzRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEUsQ0FBQztJQUVELGNBQWM7SUFDZCxrQkFBa0IsQ0FBQyxJQUF1QjtRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxhQUFhLENBQUM7SUFDMUYsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxZQUFZLENBQUMsSUFBa0I7UUFDM0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ25DLG9DQUFvQyxFQUNwQztZQUNJLElBQUksRUFBRTtnQkFDRixJQUFJO2dCQUNKLGlCQUFpQixFQUFFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDM0UsR0FBRyxJQUFJLENBQUMscUJBQXFCO2FBQ2hDO1NBQ0osRUFDRCxJQUFJLENBQUMsU0FBUyxDQUNqQixDQUFDO1FBRUYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzdEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVUsQ0FBQyxJQUFrQjtRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxJQUFrQjtRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNkLHNCQUFzQixDQUFDLEtBQWdEO1FBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RSxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxlQUFlLENBQUMsT0FBcUIsRUFBRSxLQUFZO1FBQy9DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBMkMsb0NBQW9DLEVBQUU7WUFDckcsSUFBSSxFQUFFO2dCQUNGLE9BQU87Z0JBQ1AsR0FBRyxJQUFJLENBQUMscUJBQXFCO2FBQ2hDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtDQUFrQztJQUNsQyx1QkFBdUIsQ0FBQyxNQUFjO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFWixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDWCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEtBQUssQ0FBQyxDQUFDO1lBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RixHQUFHLEdBQUcsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1NBQ3JFO2FBQU07WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7WUFDN0MsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEU7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYztJQUNkLGtCQUFrQixDQUFDLEdBQVc7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDMUMsSUFBSSxFQUFFLEdBQUc7WUFDVCxRQUFRLEVBQUUsUUFBUTtTQUNyQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNOLGNBQWMsQ0FBQyxRQUFnQjtRQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDOUUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU87U0FDVjtRQUVELE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXpELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFN0UsTUFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNuRjthQUFNLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtZQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQ3BHLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRCxxRkFBcUY7SUFDckYsY0FBYyxDQUFDLEtBQW9CLEVBQUUsSUFBdUI7UUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRTtZQUM1RSxPQUFPO1NBQ1Y7UUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLGVBQThDLENBQUM7UUFFbkQsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQ2xFLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtvQkFDZixlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzdFO2FBQ0o7aUJBQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtnQkFDN0MsZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQy9FO2lCQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQzdDLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZHO2lCQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUU7Z0JBQzlDLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZHO1NBQ0o7UUFFRCxJQUFJLGVBQWUsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxjQUFjO1FBQ1YsNEVBQTRFO1FBQzVFLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsUUFBUSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1lBQ3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixvQkFBb0I7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXBCLE1BQU0sT0FBTyxHQUFHO1lBQ1osR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1NBQ25DLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsYUFBYTtRQUNULElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsdUJBQXdCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGNBQWM7SUFDZCx5QkFBeUIsQ0FBQyxXQUFpQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyw4QkFBOEI7UUFDOUIscUZBQXFGO1FBQ3JGLDJGQUEyRjtRQUMzRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDL0YsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2QsQ0FBQztJQUNOLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsZUFBZTtRQUNYLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF5QixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztRQUUxQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsUUFBUSxDQUFDLE1BQXlCLEVBQUUsSUFBNEI7UUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQztRQUUxRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDbkMsNEJBQTRCLEVBQzVCO1lBQ0ksSUFBSSxFQUFFO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixrQkFBa0I7Z0JBQ2xCLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBQ2xFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsR0FBRyxJQUFJLENBQUMscUJBQXFCO2FBQ2hDO1NBQ0osRUFDRCxJQUFJLENBQUMsU0FBUyxDQUNqQixDQUFDO1FBRUYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUEyQixFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDUCxPQUFPO2FBQ1Y7WUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFFOUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDUCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUVwQyxJQUFJLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUV0RCxRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLE9BQU87b0JBQ1IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN0QixNQUFNO2dCQUVWLEtBQUssUUFBUTtvQkFDVCxJQUFJLFFBQVEsS0FBSyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUU7d0JBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUM5QztvQkFFRCxJQUFJLFFBQVEsS0FBSyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUU7d0JBQ2hELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO3FCQUMvRDtvQkFFRCxNQUFNO2dCQUVWLEtBQUssWUFBWTtvQkFDYixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDckUsTUFBTTtnQkFFVixLQUFLLE9BQU87b0JBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUM5QixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMzQixNQUFNO2dCQUVWLEtBQUssV0FBVyxDQUFDLENBQUM7b0JBQ2QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO29CQUV0RSxJQUFJLGFBQWEsRUFBRTt3QkFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7d0JBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUUzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUM1RCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUNwQyxDQUFDO3FCQUNMO3lCQUFNO3dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDeEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUM5QixDQUFDO3FCQUNMO29CQUVELE1BQU07aUJBQ1Q7Z0JBQ0QsS0FBSyxVQUFVO29CQUNYLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUM1RCxNQUFNO2FBQ2I7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXZDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsU0FBUyxDQUFDLElBQWtCO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNuQyw0QkFBNEIsRUFDNUI7WUFDSSxJQUFJLEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLElBQUk7Z0JBQ1osSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztnQkFDN0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMvQixHQUFHLElBQUksQ0FBQyxxQkFBcUI7YUFDaEM7U0FDSixFQUNELElBQUksQ0FBQyxTQUFTLENBQ2pCLENBQUM7UUFFRixNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQTRCLEVBQUUsRUFBRTtZQUMxRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBRS9CLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsYUFBYSxDQUFDLFlBQTBCO1FBQ3BDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGNBQWM7SUFDZCxvQkFBb0I7UUFDaEIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFFcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDckMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO2FBQ3BELEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsZ0JBQWdCLENBQUMsSUFBdUI7UUFDcEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZTthQUM3QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQ25DLEVBQUUsY0FBYyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDakUsU0FBUyxDQUFDLDZCQUE2QixDQUFDLHFCQUFxQixDQUFDLENBQUM7YUFDbEU7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsV0FBVyxDQUFDLFVBQTZCLEVBQUUsSUFBYTtRQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVyRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBRXBDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUV2QyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRW5HLElBQUksUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUMxQztZQUVELFVBQVUsQ0FBQyxPQUFPO2dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUM5RixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUxQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVwRyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQThCLEVBQUUsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDUCxPQUFPO2lCQUNWO2dCQUVELE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUVwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLElBQUksS0FBSyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDMUQsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzdDO2dCQUVELElBQUksSUFBSSxLQUFLLHdCQUF3QixDQUFDLFFBQVEsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUM5RTtnQkFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNLElBQUksU0FBUyxLQUFLLFlBQVksRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTdCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFN0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUV2QyxVQUFVLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWxELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDbEYsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkU7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDNUQsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzNDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1lBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzNDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixzQkFBc0IsQ0FBQyxVQUE2QjtRQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxjQUFjO0lBQ04sWUFBWSxDQUFDLElBQTZCO1FBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELHNEQUFzRDtJQUM5QyxVQUFVLENBQUMsZUFBZ0M7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDeEIsZUFBZSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDOUI7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUMzQixlQUFlLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsaUNBQWlDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJFLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVuRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUVELHlFQUF5RTtJQUNqRSxlQUFlO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN4RixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ3BFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUNULENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVUsQ0FBQyxJQUF1QjtRQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsMEVBQTBFO0lBQ2xFLFdBQVcsQ0FBQyxJQUFrQjtRQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakYsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDakQ7SUFDTCxDQUFDO0lBRUQsMEVBQTBFO0lBQ2xFLFdBQVcsQ0FBQyxZQUEwQjtRQUMxQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxRQUF1QyxDQUFDO1FBRTVDLEdBQUc7WUFDQyxJQUFJLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDaEMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV2RSxJQUFJLFFBQVEsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBRTdCLFFBQVEsR0FBRyxRQUFRLENBQUM7b0JBQ3BCLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUU7YUFDSjtTQUNKLFFBQVEsUUFBUSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUVuRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQztRQUM3RSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDO1FBQ3JFLE1BQU0sT0FBTyxHQUNULENBQUMscUJBQXFCLElBQUksbUJBQW1CLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUU5RyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELGNBQWM7SUFDTixtQkFBbUIsQ0FBQyxZQUFvQixFQUFFLFdBQW1CO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDekMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZ0hBQWdIO0lBQ3hHLGVBQWUsQ0FBQyxXQUFtQixFQUFFLGFBQXVCO1FBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUU7Z0JBQ3hDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQzthQUNwQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHlHQUF5RztJQUNqRyw0QkFBNEI7UUFDaEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBNENELGNBQWM7SUFDZCxJQUFZLGlCQUFpQjtRQUN6QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDOUUsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLFdBQVc7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO0lBQzdGLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNaLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQzVHLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNkLElBQVkscUJBQXFCO1FBQzdCLE9BQU87WUFDSCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDN0MsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2pCLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNOLGVBQWUsQ0FBQyxNQUFlLEVBQUUsT0FBa0I7UUFDdkQsTUFBTSxjQUFjLEdBQ2hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7Z0JBQzNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFVLElBQUksTUFBTyxHQUFHLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksY0FBYyxFQUFFO1lBQ2hCLE9BQU8sT0FBTyxJQUFJLEVBQUUsQ0FBQztTQUN4QjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGNBQWM7SUFDTiwwQkFBMEIsQ0FDOUIsU0FBNEIsRUFDNUIsVUFBNkIsRUFDN0IsWUFBWSxHQUFHLEtBQUs7UUFFcEIsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBRXZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0RCxJQUFJLFlBQVksRUFBRTtZQUNkLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMxRCxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBRWpDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDZCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDLFdBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDbEYsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFckYsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDbEIsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDO29CQUM5RCxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO29CQUVuQyxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUMxRCxPQUFPO2lCQUNWO2dCQUVELFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDdkMsT0FBTzthQUNWO1lBRUQsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sNEJBQTRCO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUI7YUFDL0IsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2lCQUNuRixNQUFNLENBQUMsT0FBTyxDQUFDO2lCQUNmLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ1IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FDOUIsQ0FDSixDQUFDO1lBQ04sT0FBTyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ25ELG9CQUFvQixFQUFFLENBQ3pCO2FBQ0EsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUMvQjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzlCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDOzhHQXQvQlEscUJBQXFCLHdHQW9MTixjQUFjO2tHQXBMN0IscUJBQXFCLG8zQ0F5R2hCLHlCQUF5QixxRUN4TTNDLDRwZEFxUUE7OzJGRHRLYSxxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0ksbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OzBCQXNMaEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzswQkFDakMsUUFBUTs0Q0FuTEosS0FBSztzQkFBYixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQU9HLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFPRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBR0ksU0FBUztzQkFBbEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxhQUFhO3NCQUF0QixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTTtnQkFHd0IsaUJBQWlCO3NCQUEvQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFHUCxRQUFRO3NCQUE3QixTQUFTO3VCQUFDLFNBQVM7Z0JBR0csU0FBUztzQkFBL0IsU0FBUzt1QkFBQyxVQUFVO2dCQUdvQixlQUFlO3NCQUF2RCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPV05fQVJST1csIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRocm90dGxlVGltZSwgc3dpdGNoTWFwLCBtYXBUbywgbWFwLCBzdGFydFdpdGgsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBLZXlVdGlsLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgR3JpZExpc3RDb21wb25lbnQsIEdyaWRMaXN0U2VsZWN0aW9uRXZlbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZ3JpZC1saXN0JztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcblxuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNDb21wb25lbnQsXG4gICAgQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzRGlhbG9nUmVmRGF0YVxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctYXBwcm92ZXItZGV0YWlscy9hcHByb3ZhbC1mbG93LWFwcHJvdmVyLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQgfSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctbm9kZS9hcHByb3ZhbC1mbG93LW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQWRkTm9kZURpYWxvZ0Zvcm1EYXRhLFxuICAgIEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUyxcbiAgICBBcHByb3ZhbEZsb3dBZGROb2RlQ29tcG9uZW50LFxuICAgIEFkZE5vZGVEaWFsb2dSZWZEYXRhLFxuICAgIEFwcHJvdmFsRmxvd05vZGVUYXJnZXRcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LWFkZC1ub2RlL2FwcHJvdmFsLWZsb3ctYWRkLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgZGlzcGxheVVzZXJGbixcbiAgICBnZXRCbGFua0FwcHJvdmFsR3JhcGhOb2RlLFxuICAgIGdldEdyYXBoTm9kZXMsXG4gICAgaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZCxcbiAgICB0cmFja0J5Rm4sXG4gICAgdXNlclZhbHVlRm5cbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgQXBwcm92YWxHcmFwaE5vZGVNZXRhZGF0YSxcbiAgICBBcHByb3ZhbE5vZGUsXG4gICAgQXBwcm92YWxQcm9jZXNzLFxuICAgIEFwcHJvdmFsU3RhdHVzLFxuICAgIEFwcHJvdmFsVGVhbSxcbiAgICBBcHByb3ZhbFVzZXIsXG4gICAgU2VuZFJlbWluZGVyc0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93U2VsZWN0VHlwZUNvbXBvbmVudCxcbiAgICBTZWxlY3RUeXBlRGlhbG9nRm9ybURhdGFcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LXNlbGVjdC10eXBlL2FwcHJvdmFsLWZsb3ctc2VsZWN0LXR5cGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93R3JhcGgsXG4gICAgQXBwcm92YWxHcmFwaE1ldGFkYXRhLFxuICAgIGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGgsXG4gICAgZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaE1ldGFkYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1ncmFwaCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2UsXG4gICAgQXBwcm92YWxGbG93TWVzc2FnZVR5cGVcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LW1lc3NhZ2VzL2FwcHJvdmFsLWZsb3ctbWVzc2FnZXMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRGF0YVByb3ZpZGVyLFxuICAgIERBVEFfUFJPVklERVJTLFxuICAgIEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlLFxuICAgIEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9iamVjdFN0YXR1cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9vYmplY3Qtc3RhdHVzJztcblxubGV0IGRlZmF1bHRJZCA9IDA7XG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC40MC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWFwcHJvdmFsLWZsb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbEZsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogVGl0bGUgd2hpY2ggaXMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGFwcHJvdmFsIGZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHZhbHVlOiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB1c2VycyBvZiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB1c2VyRGF0YVNvdXJjZTogQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2U8QXBwcm92YWxVc2VyPjtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHdhdGNoZXJzIG9mIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJEYXRhU291cmNlOiBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZTxBcHByb3ZhbFVzZXI+O1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdGVhbXMgb2YgQXBwcm92YWwgRmxvdyBjb21wb25lbnQuICovXG4gICAgQElucHV0KCkgdGVhbURhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlPEFwcHJvdmFsVGVhbT47XG5cbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIHVzZXIgZGV0YWlscyB0ZW1wbGF0ZSAqL1xuICAgIEBJbnB1dCgpIHVzZXJEZXRhaWxzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIGFwcCBjdXN0b20gc3RhdHVzZXMgKi9cbiAgICBASW5wdXQoKSBhcHByb3ZhbFN0YXR1c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEN1c3RvbSBzdGF0dXMgdG8gY29sb3IgbWFwcGluZyAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXR1c0NvbG9yTWFwcGluZzogUmVjb3JkPEFwcHJvdmFsU3RhdHVzLCBPYmplY3RTdGF0dXM+O1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBkdWUgZGF0ZSB3YXJuaW5nIGluIHN0YXR1cyAqL1xuICAgIEBJbnB1dCgpIGNoZWNrRHVlRGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIE51bWJlciBvZiBkYXlzIGJlZm9yZSBkdWUgZGF0ZSB3aGVuIHN0YXR1cyBjaGFuZ2VzIHRvIGB3YXJuaW5nYCB3aXRoIHRleHQgJ0R1ZSBpbiBYIGRheXMnLlxuICAgICAqICBOb3QgdXNlZCBpZiAnY2hlY2tEdWVEYXRlJyBlcXVhbHMgZmFsc2UgKi9cbiAgICBASW5wdXQoKSBkdWVEYXRlVGhyZXNob2xkID0gNztcblxuICAgIC8qKiBBIGxpc3Qgb2YgYXBwcm92YWwgc3RhdHVzZXMgdGhhdCBhbGxvdyBzZW5kaW5nIHJlbWluZGVycyB0byB0aGVpciBhcHByb3ZlcnMgKi9cbiAgICBASW5wdXQoKSBhbGxvd1NlbmRSZW1pbmRlcnNGb3JTdGF0dXNlczogQXBwcm92YWxTdGF0dXNbXSA9IFsnaW4gcHJvZ3Jlc3MnLCAnbm90IHN0YXJ0ZWQnXTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhcHByb3ZhbCBmbG93IGlzIGVkaXRhYmxlICovXG4gICAgQElucHV0KCkgaXNFZGl0QXZhaWxhYmxlID0gZmFsc2U7XG5cbiAgICAvKiogVGV4dCBsYWJlbCBmb3Igd2F0Y2hlcnMgbGlzdCAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJzTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBFbmFibGVzIG9yIGRpc2FibGVzIGFiaWxpdHkgdG8gYWRkIHBhcmFsbGVsIG5vZGVzICovXG4gICAgQElucHV0KCkgYWxsb3dBZGRQYXJhbGxlbE5vZGVzID0gdHJ1ZTtcblxuICAgIC8qKiBEaXNhYmxlcyBzYXZlIGJ1dHRvbiwgc2F2ZSBidXR0b24gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KCkgZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKiBEaXNhYmxlcyBleGl0IGJ1dHRvbiwgZXhpdCBidXR0b24gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KCkgZGlzYWJsZUV4aXRCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGVudGl0eSBmb3Igd2hpY2ggdXNlcnMgRGF0YVByb3ZpZGVyIHdpbGwgYmUgbG9hZGVkLlxuICAgICAqIEludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KCkgdXNlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHRlYW1zIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRlYW1zRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZW50aXR5IGZvciB3aGljaCBhcHByb3ZhbCBmbG93IERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gYXBwcm92YWwgZmxvdyBub2RlIGNsaWNrLiAqL1xuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsTm9kZT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGFwcHJvdmFsIGZsb3cgbm9kZSBhZGQgKi9cbiAgICBAT3V0cHV0KCkgYWZ0ZXJOb2RlQWRkID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbE5vZGU+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCBvbiBhcHByb3ZhbCBmbG93IG5vZGUgZWRpdCAqL1xuICAgIEBPdXRwdXQoKSBhZnRlck5vZGVFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbE5vZGU+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVudmVyIHNhdmUgaXMgY2xpY2tlZCBpbiBlZGl0IG1vZGUgICovXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbFByb2Nlc3M+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuZXZlciByZW1pbmRlcnMgc2hvdWxkIGJlIHNlbnQgKi9cbiAgICBAT3V0cHV0KCkgc2VuZFJlbWluZGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8U2VuZFJlbWluZGVyc0RhdGE+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyYXBoQ29udGFpbmVyRWwnKSBfZ3JhcGhDb250YWluZXJFbDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyYXBoRWwnKSBfZ3JhcGhFbDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRMaXN0JykgX2dyaWRMaXN0OiBHcmlkTGlzdENvbXBvbmVudDxBcHByb3ZhbEdyYXBoTm9kZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQXBwcm92YWxGbG93Tm9kZUNvbXBvbmVudCkgX25vZGVDb21wb25lbnRzOiBRdWVyeUxpc3Q8QXBwcm92YWxGbG93Tm9kZUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hcHByb3ZhbFByb2Nlc3M6IEFwcHJvdmFsUHJvY2VzcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2luaXRpYWxBcHByb3ZhbFByb2Nlc3M/OiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcmV2aW91c0FwcHJvdmFsUHJvY2Vzcz86IEFwcHJvdmFsUHJvY2VzcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyYXBoOiBBcHByb3ZhbEZsb3dHcmFwaDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQ2Fyb3VzZWwgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyYXBoTWV0YWRhdGE6IEFwcHJvdmFsR3JhcGhNZXRhZGF0YSA9IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNFZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdXNlcnNGb3JXYXRjaGVyc0xpc3Q6IEFwcHJvdmFsVXNlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkV2F0Y2hlcnM6IEFwcHJvdmFsVXNlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RlZFdhdGNoZXJJZHM6IEFwcHJvdmFsVXNlclsnaWQnXVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlczogQXBwcm92YWxGbG93TWVzc2FnZVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5VXNlckZuID0gZGlzcGxheVVzZXJGbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3VzZXJWYWx1ZUZuID0gdXNlclZhbHVlRm47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5Rm4gPSB0cmFja0J5Rm47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lbXB0eUFwcHJvdmFsRmxvd1Nwb3RDb25maWcgPSB7XG4gICAgICAgIHNwb3Q6IHsgdXJsOiAnJywgaWQ6ICdzYXBJbGx1cy1TcG90LU5vRGF0YScgfVxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tdWx0aXBsZVJvb3ROb2RlcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbXVsdGlwbGVGaW5hbE5vZGVzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kcmFnRHJvcEluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgYXBwcm92YWxGbG93VW5pcXVlSWQgPSBgZmRwLWFwcHJvdmFsLWZsb3ctJHsrK2RlZmF1bHRJZH1gO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lZGl0TW9kZUluaXRTdWI6IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGF0YVNvdXJjZUNoYW5nZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRBX1BST1ZJREVSUykgcHJpdmF0ZSBwcm92aWRlcnM6IE1hcDxzdHJpbmcsIERhdGFQcm92aWRlcjxhbnk+PixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZygnQXBwcm92YWxGbG93Q29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IHJlbGVhc2UuJyk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgYW5kIGluaXRpYWwgc3RhdGVzIG9mIGFwcHJvdmFsIHByb2Nlc3MgKi9cbiAgICBnZXQgYXBwcm92YWxQcm9jZXNzKCk6IEFwcHJvdmFsUHJvY2VzcyB7XG4gICAgICAgIHJldHVybiBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZT8ucnRsLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3NlbGVjdGVkTm9kZXMoKTogQXBwcm92YWxHcmFwaE5vZGVbXSB7XG4gICAgICAgIHJldHVybiBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKS5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy51c2VyRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3QgdXNlcnNEUCA9IHRoaXMudXNlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkgJiYgdGhpcy5wcm92aWRlcnM/LmdldCh0aGlzLnVzZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh1c2Vyc0RQKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YVNvdXJjZSA9IG5ldyBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZSh1c2Vyc0RQKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgdXNlcnMgZGF0YSBzb3VyY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlckRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoZXJzRFAgPVxuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkgJiYgdGhpcy5wcm92aWRlcnM/LmdldCh0aGlzLndhdGNoZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyc0RQKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZSA9IG5ldyBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZSh3YXRjaGVyc0RQKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgd2F0Y2hlcnMgZGF0YSBzb3VyY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudGVhbURhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlYW1zRFAgPSB0aGlzLnRlYW1zRGF0YVByb3ZpZGVyRW50aXR5S2V5ICYmIHRoaXMucHJvdmlkZXJzPy5nZXQodGhpcy50ZWFtc0RhdGFQcm92aWRlckVudGl0eUtleSk7XG4gICAgICAgICAgICBpZiAodGVhbXNEUCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGVhbURhdGFTb3VyY2UgPSBuZXcgQXBwcm92YWxGbG93VGVhbURhdGFTb3VyY2UodGVhbXNEUCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHRlYW1zIGRhdGEgc291cmNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9zZXR1cERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSB0aGlzLnZhbHVlID8/IHsgd2F0Y2hlcnM6IFtdLCBub2RlczogW10gfTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAocHJvY2Vzcyk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcocHJvY2Vzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy51c2VyRGF0YVNvdXJjZSB8fCBjaGFuZ2VzLndhdGNoZXJEYXRhU291cmNlIHx8IGNoYW5nZXMudGVhbURhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkJC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNOZXh0Tm9kZUJsYW5rKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlLCBjb2x1bW5JbmRleDogbnVtYmVyLCBub2RlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbY29sdW1uSW5kZXggKyAxXT8ubm9kZXNbbm9kZUluZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dE5vZGVCbGFuayA9IG5leHROb2RlPy5ibGFuaztcbiAgICAgICAgY29uc3QgbmV4dE5vZGVQYXJhbGxlbEVuZCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbbmV4dE5vZGU/LmlkXT8ucGFyYWxsZWxFbmQ7XG5cbiAgICAgICAgcmV0dXJuICFub2RlLmJsYW5rICYmICEhbmV4dE5vZGVCbGFuayAmJiAhbmV4dE5vZGVQYXJhbGxlbEVuZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0Nka0RyYWdEaXNhYmxlZChub2RlOiBBcHByb3ZhbEdyYXBoTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2lzRWRpdE1vZGUgfHwgbm9kZS5ibGFuayB8fCBub2RlLnNwYWNlIHx8IG5vZGUuc3RhdHVzICE9PSAnbm90IHN0YXJ0ZWQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE5vZGUgY2xpY2sgaGFuZGxlciAqL1xuICAgIF9vbk5vZGVDbGljayhub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RyYWdEcm9wSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0RpYWxvZ1JlZkRhdGE+KFxuICAgICAgICAgICAgQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dTZW5kUmVtaW5kZXI6IHRoaXMuYWxsb3dTZW5kUmVtaW5kZXJzRm9yU3RhdHVzZXMuaW5jbHVkZXMobm9kZS5zdGF0dXMpLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKHJlbWluZGVyVGFyZ2V0cykgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVtaW5kZXJUYXJnZXRzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFJlbWluZGVycy5lbWl0KHsgdXNlcnM6IHJlbWluZGVyVGFyZ2V0cywgbm9kZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk5vZGVBZGQobm9kZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWZ0ZXJOb2RlQWRkLmVtaXQobm9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ob2RlRWRpdChub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZnRlck5vZGVFZGl0LmVtaXQobm9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ob2RlU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBHcmlkTGlzdFNlbGVjdGlvbkV2ZW50PEFwcHJvdmFsR3JhcGhOb2RlPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncmFwaC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLnNlbGVjdGVkID0gISFldmVudC5zZWxlY3Rpb24uZmluZCgoX25vZGUpID0+IF9ub2RlLmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBXYXRjaGVyJ3MgYXZhdGFyIGNsaWNrIGhhbmRsZXIgKi9cbiAgICBfb25XYXRjaGVyQ2xpY2sod2F0Y2hlcjogQXBwcm92YWxVc2VyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0RpYWxvZ1JlZkRhdGE+KEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHdhdGNoZXIsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdERpYWxvZ09wdGlvbnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHJpdmUgbWV0YWRhdGEgYnkgbm9kZSBpZCAqL1xuICAgIGdldE5vZGVNZXRhZGF0YUJ5Tm9kZUlkKG5vZGVJZDogc3RyaW5nKTogQXBwcm92YWxHcmFwaE5vZGVNZXRhZGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGVJZF07XG4gICAgfVxuXG4gICAgLyoqIFNjcm9sbCB0byB0aGUgbmV4dCBob3Jpem9udGFsIHNsaWRlICovXG4gICAgbmV4dFNsaWRlKGRpciA9IDEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMTtcblxuICAgICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgICBpZiAoZGlyID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0U3RlcCA9IHRoaXMuX2Nhcm91c2VsU3RlcHNSaWdodCA9PT0gMTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc0NvdW50IC0gdGhpcy5fY2Fyb3VzZWxTdGVwc1JpZ2h0ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVSaWdodFBvaW50ID0gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZSAqIG5leHRTdGVwICsgKGxhc3RTdGVwID8gMCA6IHRocmVzaG9sZCk7XG4gICAgICAgICAgICBwb3MgPSB2aXNpYmxlUmlnaHRQb2ludCAtIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc0xlZnQgPT09IDE7XG4gICAgICAgICAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuX2Nhcm91c2VsU3RlcHNMZWZ0IC0gMTtcbiAgICAgICAgICAgIHBvcyA9IHRoaXMuX2Nhcm91c2VsU3RlcFNpemUgKiBuZXh0U3RlcCAtIChsYXN0U3RlcCA/IDAgOiB0aHJlc2hvbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24ocG9zKTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNjcm9sbFBvc2l0aW9uKHBvczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7XG4gICAgICAgICAgICBsZWZ0OiBwb3MsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb3ZlQ29sSW5WaWV3KGNvbEluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuW2NvbEluZGV4XS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHg6IG5vZGVYLCB3aWR0aCB9ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54O1xuXG4gICAgICAgIGNvbnN0IGxlZnQgPSBub2RlWCAtIGRlbHRhO1xuICAgICAgICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcblxuICAgICAgICBpZiAobGVmdCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICsgbGVmdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmlnaHQgPiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICsgcmlnaHQgLSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBIYW5kbGUgbm9kZSBrZXlkb3duIGFuZCBmb2N1cyBvdGhlciBub2RlIGJhc2VkIG9uIHdoaWNoIGtleSBpcyBwcmVzc2VkICovXG4gICAgX29uTm9kZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtVUF9BUlJPVywgRE9XTl9BUlJPVywgUklHSFRfQVJST1csIExFRlRfQVJST1ddKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBub2RlSW5kZXgsIGNvbHVtbkluZGV4IH0gPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGUuaWRdO1xuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IG5leHRGb2N1c1RhcmdldDogQXBwcm92YWxHcmFwaE5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBub2RlSW5kZXggPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dFZlcnRpY2FsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4LCAndXAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5leHRGb2N1c1RhcmdldCA9IHRoaXMuX2dldE5leHRWZXJ0aWNhbE5vZGUobm9kZUluZGV4LCBjb2x1bW5JbmRleCwgJ2Rvd24nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsIHRoaXMuX3J0bCA/ICdyaWdodCcgOiAnbGVmdCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsIHRoaXMuX3J0bCA/ICdsZWZ0JyA6ICdyaWdodCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRGb2N1c1RhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNOb2RlKG5leHRGb2N1c1RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBGZXRjaCBhbGwgbmVjZXNzYXJ5IGRhdGEgYW5kIGVudGVyIGVkaXQgbW9kZSAqL1xuICAgIF9lbnRlckVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICAvLyB0aGVyZSdzIG5vIHN1cHBvcnQgZm9yIHNlYXJjaGluZyBpbiBtdWx0aS1pbnB1dCwgc28gZ3JhYmJpbmcgYWxsIHdhdGNoZXJzXG4gICAgICAgIC8vIHRyaWdnZXJpbmcgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaW4gZGF0YSBzb3VyY2VzXG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UubWF0Y2goKTtcbiAgICAgICAgdGhpcy5fZWRpdE1vZGVJbml0U3ViID0gdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5vcGVuKCkuc3Vic2NyaWJlKCh3YXRjaGVycykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXNlcnNGb3JXYXRjaGVyc0xpc3QgPSB3YXRjaGVycztcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnM7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFdhdGNoZXJJZHMgPSB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzLm1hcCgodykgPT4gdy5pZCk7XG4gICAgICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9lZGl0TW9kZUluaXRTdWIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNlbmQgdXBkYXRlIGFwcHJvdmFsIHByb2Nlc3MgY2FsbHMgdG8gRGF0YVNvdXJjZSBhbmQgZXhpdCBlZGl0IG1vZGUqL1xuICAgIF9zYXZlRWRpdE1vZGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lZGl0TW9kZUluaXRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UuY2xvc2UoKTtcblxuICAgICAgICB0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW107XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2FwcHJvdmFsUHJvY2VzcyxcbiAgICAgICAgICAgIHdhdGNoZXJzOiB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHVwZGF0ZWQpO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh1cGRhdGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXN0b3JlIGluaXRpYWwgYXBwcm92YWwgZmxvdyBzdGF0ZSBhbmQgZXhpdCBlZGl0IG1vZGUgKi9cbiAgICBfZXhpdEVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lZGl0TW9kZUluaXRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UuY2xvc2UoKTtcblxuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyEpO1xuICAgICAgICB0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW107XG5cbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfd2F0Y2hlcnNTZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGVkSWRzOiBBcHByb3ZhbFVzZXJbJ2lkJ11bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHNTZXQgPSBuZXcgU2V0KHNlbGVjdGVkSWRzKTtcbiAgICAgICAgLy8gdXBkYXRpbmcgd2F0Y2hlcnMgc2VsZWN0aW9uXG4gICAgICAgIC8vIHNpbmNlIGl0J3MgcG9zc2libGUgXCJfdXNlcnNGb3JXYXRjaGVyc0xpc3RcIiBtaWdodCBub3QgY29udGFpbiBhbGwgc2VsZWN0ZWQgdmFsdWVzLFxuICAgICAgICAvLyBkZXRlcm1pbmUgY3VycmVudCBzZWxlY3Rpb24gYmFzZWQgb24gd2hhdCdzIGFscmVhZHkgc2VsZWN0ZWQgYW5kIFwiX3VzZXJzRm9yV2F0Y2hlcnNMaXN0XCJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRXYXRjaGVycyA9IHVuaXFCeShcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMuY29uY2F0KHRoaXMuX3VzZXJzRm9yV2F0Y2hlcnNMaXN0KS5maWx0ZXIoKHVzZXIpID0+IGlkc1NldC5oYXModXNlci5pZCkpLFxuICAgICAgICAgICAgKHUpID0+IHUuaWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXN0b3JlIHByZXZpb3VzbHkgc2F2ZWQgYXBwcm92YWwgcHJvY2VzcyBzdGF0ZSAqL1xuICAgIF91bmRvTGFzdEFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzISk7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE9wZW4gYWRkIG5vZGUgZGlhbG9nICovXG4gICAgX2FkZE5vZGUoc291cmNlOiBBcHByb3ZhbEdyYXBoTm9kZSwgdHlwZTogQXBwcm92YWxGbG93Tm9kZVRhcmdldCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaG93Tm9kZVR5cGVTZWxlY3QgPSB0eXBlID09PSAnYmVmb3JlJyAmJiAhc291cmNlLmFjdGlvbnNDb25maWc/LmRpc2FibGVBZGRQYXJhbGxlbDtcblxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW48QWRkTm9kZURpYWxvZ1JlZkRhdGE+KFxuICAgICAgICAgICAgQXBwcm92YWxGbG93QWRkTm9kZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUYXJnZXQ6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNob3dOb2RlVHlwZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogT2JqZWN0LmFzc2lnbihnZXRCbGFua0FwcHJvdmFsR3JhcGhOb2RlKCksIHsgYmxhbms6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICBjaGVja0R1ZURhdGU6IHRoaXMuY2hlY2tEdWVEYXRlLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKGRhdGE6IEFkZE5vZGVEaWFsb2dGb3JtRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IG5vZGUsIG5vZGVUeXBlLCB0b05leHRTZXJpYWwgfSA9IGRhdGE7XG5cbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgICAgIG5vZGUuaWQgPSBgdGVtcElkJHsoTWF0aC5yYW5kb20oKSAqIDEwMDApLnRvRml4ZWQoKX1gO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdlbXB0eSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VudGVyRWRpdE1vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdiZWZvcmUnOlxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5TRVJJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IFtzb3VyY2UuaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoc291cmNlLmlkLCBbbm9kZS5pZF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMuUEFSQUxMRUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZGRpbmdQYXJhbGxlbE5vZGUobm9kZSwgc291cmNlLCB0b05leHRTZXJpYWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdiZWZvcmUtYWxsJzpcbiAgICAgICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzID0gdGhpcy5fZ3JhcGguY29sdW1uc1swXS5ub2Rlcy5tYXAoKF9ub2RlKSA9PiBfbm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYWZ0ZXInOlxuICAgICAgICAgICAgICAgICAgICBub2RlLnRhcmdldHMgPSBzb3VyY2UudGFyZ2V0cztcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnRhcmdldHMgPSBbbm9kZS5pZF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYWZ0ZXItYWxsJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRQYXJlbnRzID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtzb3VyY2UudGFyZ2V0c1swXV0/LnBhcmVudHM7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IHNvdXJjZS50YXJnZXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoc291cmNlLmlkLCBbbm9kZS5pZF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfbm9kZSkgPT4gX25vZGUuaWQgIT09IHNvdXJjZS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyYXBoLmNvbHVtbnNbdGhpcy5fZ3JhcGguY29sdW1ucy5sZW5ndGggLSAxXS5ub2Rlcy5mb3JFYWNoKChfbm9kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbm9kZS50YXJnZXRzLnB1c2gobm9kZS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAncGFyYWxsZWwnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKG5vZGUsIHNvdXJjZSwgdG9OZXh0U2VyaWFsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKG5vZGUuYXBwcm92YWxUZWFtSWQgPyAndGVhbUFkZFN1Y2Nlc3MnIDogJ2FwcHJvdmVyQWRkU3VjY2VzcycpO1xuICAgICAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fb25Ob2RlQWRkKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBPcGVuIGVkaXQgbm9kZSBkaWFsb2cgKi9cbiAgICBfZWRpdE5vZGUobm9kZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbjxBZGROb2RlRGlhbG9nUmVmRGF0YT4oXG4gICAgICAgICAgICBBcHByb3ZhbEZsb3dBZGROb2RlQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgaXNFZGl0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBPYmplY3QuYXNzaWduKHt9LCBub2RlKSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tEdWVEYXRlOiB0aGlzLmNoZWNrRHVlRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdERpYWxvZ09wdGlvbnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChkYXRhOiB7IG5vZGU6IEFwcHJvdmFsTm9kZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkTm9kZSA9IGRhdGE/Lm5vZGU7XG5cbiAgICAgICAgICAgIGlmICghdXBkYXRlZE5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTm9kZSh1cGRhdGVkTm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZSgnbm9kZUVkaXQnKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fb25Ob2RlRWRpdChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gXCJEZWxldGVcIiBidXR0b24gY2xpY2sgaGFuZGxlciAqL1xuICAgIF9vbk5vZGVEZWxldGUobm9kZVRvRGVsZXRlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG4gICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRGVsZXRlKTtcbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2Uobm9kZVRvRGVsZXRlLmFwcHJvdmFsVGVhbUlkID8gJ3RlYW1SZW1vdmUnIDogJ25vZGVSZW1vdmUnKTtcbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVsZXRlU2VsZWN0ZWROb2RlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgY29uc3Qgbm9kZXNUb0RlbGV0ZSA9IHRoaXMuX25vZGVDb21wb25lbnRzXG4gICAgICAgICAgICAuZmlsdGVyKChub2RlQ29tcG9uZW50KSA9PiBub2RlQ29tcG9uZW50Ll9pc1NlbGVjdGVkKVxuICAgICAgICAgICAgLm1hcCgobm9kZUNvbXBvbmVudCkgPT4gbm9kZUNvbXBvbmVudC5ub2RlKTtcblxuICAgICAgICBub2Rlc1RvRGVsZXRlLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoJ25vZGVzUmVtb3ZlJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTm9kZSBkcmFnIG1vdmUgaGFuZGxlciwgdXNlZCB0byBjaGVjayBpZiBuZWVkIHRvIGhpZ2hsaWdodCBhIGRyb3Agem9uZSByZWN0YW5nbGUgKi9cbiAgICBfb25Ob2RlRHJhZ01vdmVkKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRyYWdnZWROb2RlRGltZW5zaW9ucyA9IHRoaXMuX25vZGVDb21wb25lbnRzXG4gICAgICAgICAgICAuZmluZCgoY29tcCkgPT4gY29tcC5ub2RlID09PSBub2RlKVxuICAgICAgICAgICAgPy5fbmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoIWRyYWdnZWROb2RlRGltZW5zaW9ucykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbm9kZUNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50Lm5vZGUgIT09IG5vZGUgJiYgQm9vbGVhbihjb21wb25lbnQuX2Ryb3Bab25lcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50Ll9jaGVja0lmTm9kZURyYWdnZWRJbkRyb3Bab25lKGRyYWdnZWROb2RlRGltZW5zaW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE5vZGUgZHJvcCBoYW5kbGVyICovXG4gICAgX29uTm9kZURyb3Aobm9kZVRvRHJvcDogQXBwcm92YWxHcmFwaE5vZGUsIGRyYWc6IENka0RyYWcpOiB2b2lkIHtcbiAgICAgICAgZHJhZy5yZXNldCgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuX2RyYWdEcm9wSW5Qcm9ncmVzcyA9IGZhbHNlKSk7XG5cbiAgICAgICAgY29uc3QgZHJvcFRhcmdldCA9IHRoaXMuX25vZGVDb21wb25lbnRzLmZpbmQoKG4pID0+IG4uX2lzQW55RHJvcFpvbmVBY3RpdmUpO1xuXG4gICAgICAgIGlmICghZHJvcFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gZHJvcFRhcmdldC5fYWN0aXZlRHJvcFpvbmVzWzBdLnBsYWNlbWVudDtcblxuICAgICAgICB0aGlzLl9ub2RlQ29tcG9uZW50cy5mb3JFYWNoKChuKSA9PiBuLl9kZWFjdGl2YXRlRHJvcFpvbmVzKCkpO1xuXG4gICAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdhZnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcblxuICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKS5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBkcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0c1swXSk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZT8uYmxhbmspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5leHROb2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID1cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gZHJvcFRhcmdldC5ub2RlLmlkKT8udGFyZ2V0cyA/PyBbXTtcbiAgICAgICAgICAgIGRyb3BUYXJnZXQubm9kZS50YXJnZXRzID0gW25vZGVUb0Ryb3AuaWRdO1xuXG4gICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2VtZW50ID09PSAnYmVmb3JlJykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKEFwcHJvdmFsRmxvd1NlbGVjdFR5cGVDb21wb25lbnQsIHVuZGVmaW5lZCwgdGhpcy5faW5qZWN0b3IpO1xuXG4gICAgICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChkYXRhOiBTZWxlY3RUeXBlRGlhbG9nRm9ybURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgdG9OZXh0U2VyaWFsIH0gPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMuU0VSSUFMKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKGRyb3BUYXJnZXQubm9kZS5pZCwgW25vZGVUb0Ryb3AuaWRdKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID0gW2Ryb3BUYXJnZXQubm9kZS5pZF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5QQVJBTExFTCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKG5vZGVUb0Ryb3AsIGRyb3BUYXJnZXQubm9kZSwgdG9OZXh0U2VyaWFsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQgPT09ICdiZWZvcmUtYWxsJykge1xuICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcblxuICAgICAgICAgICAgY29uc3QgZmlyc3RDb2x1bW5Ob2RlcyA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbMF0ubm9kZXM7XG4gICAgICAgICAgICBub2RlVG9Ecm9wLnRhcmdldHMgPSBmaXJzdENvbHVtbk5vZGVzLm1hcCgobm9kZSkgPT4gbm9kZS5pZCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQgPT09ICdhZnRlci1hbGwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0Ryb3ApO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG5cbiAgICAgICAgICAgIG5vZGVUb0Ryb3AudGFyZ2V0cyA9IFsuLi5kcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0c107XG5cbiAgICAgICAgICAgIGlmIChkcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q29sdW1uTm9kZXMgPSB0aGlzLl9ncmFwaC5jb2x1bW5zW3RoaXMuX2dyYXBoLmNvbHVtbnMubGVuZ3RoIC0gMV0ubm9kZXM7XG4gICAgICAgICAgICAgICAgbGFzdENvbHVtbk5vZGVzLmZvckVhY2goKG5vZGUpID0+IG5vZGUudGFyZ2V0cy5wdXNoKG5vZGVUb0Ryb3AuaWQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaWQgIT09IGRyb3BUYXJnZXQubm9kZS5pZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoZHJvcFRhcmdldC5ub2RlLmlkLCBbbm9kZVRvRHJvcC5pZF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wOiBBcHByb3ZhbEdyYXBoTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMucHVzaChub2RlVG9Ecm9wKTtcbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG93TWVzc2FnZSh0eXBlOiBBcHByb3ZhbEZsb3dNZXNzYWdlVHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFt7IHR5cGUgfV07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQnVpbGQgQXBwcm92YWwgRmxvdyBncmFwaCBhbmQgcmVuZGVyIGl0ICovXG4gICAgcHJpdmF0ZSBfYnVpbGRWaWV3KGFwcHJvdmFsUHJvY2VzczogQXBwcm92YWxQcm9jZXNzKTogdm9pZCB7XG4gICAgICAgIGlmICghYXBwcm92YWxQcm9jZXNzLm5vZGVzKSB7XG4gICAgICAgICAgICBhcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFwcHJvdmFsUHJvY2Vzcy53YXRjaGVycykge1xuICAgICAgICAgICAgYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzID0gYXBwcm92YWxQcm9jZXNzO1xuICAgICAgICB0aGlzLl9ncmFwaCA9IGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGgodGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzKTtcblxuICAgICAgICBpZiAodGhpcy5fZ3JhcGguZXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZSgnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dyYXBoTWV0YWRhdGEgPSBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoTWV0YWRhdGEodGhpcy5fZ3JhcGgpO1xuXG4gICAgICAgIGNvbnN0IG5vZGVzID0gZ2V0R3JhcGhOb2Rlcyh0aGlzLl9ncmFwaCk7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gIW5vZGUuc3BhY2UpO1xuICAgICAgICB0aGlzLl9tdWx0aXBsZVJvb3ROb2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gdGhpcy5fZ3JhcGhNZXRhZGF0YVtub2RlLmlkXS5pc1Jvb3QpLmxlbmd0aCA+IDE7XG4gICAgICAgIHRoaXMuX211bHRpcGxlRmluYWxOb2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gdGhpcy5fZ3JhcGhNZXRhZGF0YVtub2RlLmlkXS5pc0ZpbmFsKS5sZW5ndGggPiAxO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2dyaWRMaXN0Py5jbGVhclNlbGVjdGlvbigpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24oMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gd2luZG93IHJlc2l6ZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgbWVyZ2UoZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLCBmcm9tRXZlbnQodGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJykpXG4gICAgICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDUwLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWUgfSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mb2N1c05vZGUobm9kZTogQXBwcm92YWxHcmFwaE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZVRvRm9jdXMgPSB0aGlzLl9ub2RlQ29tcG9uZW50cy5maW5kKChjb21wKSA9PiBjb21wLm5vZGUgPT09IG5vZGUpO1xuXG4gICAgICAgIGlmICghbm9kZVRvRm9jdXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3ZlQ29sSW5WaWV3KG5vZGUuY29sSW5kZXggPz8gMCk7XG4gICAgICAgIG5vZGVUb0ZvY3VzLl9mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVXBkYXRlIG5vZGUgb2JqZWN0IGluIGxvY2FsIGFwcHJvdmFsIHByb2Nlc3MgZGF0YSBzdHJ1Y3R1cmUgKi9cbiAgICBwcml2YXRlIF91cGRhdGVOb2RlKG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlSW5kZXggPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZEluZGV4KChuKSA9PiBuLmlkID09PSBub2RlLmlkKTtcblxuICAgICAgICBpZiAobm9kZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlc1tub2RlSW5kZXhdID0gbm9kZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIERlbGV0ZSBub2RlIG9iamVjdCBpbiBsb2NhbCBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgc3RydWN0dXJlICovXG4gICAgcHJpdmF0ZSBfZGVsZXRlTm9kZShub2RlVG9EZWxldGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2Rlc1RvRGVsZXRlID0gW25vZGVUb0RlbGV0ZV07XG4gICAgICAgIGNvbnN0IGdyYXBoTm9kZXMgPSBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKTtcbiAgICAgICAgbGV0IGN1cnJOb2RlID0gZ3JhcGhOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBub2RlVG9EZWxldGUuaWQpO1xuICAgICAgICBsZXQgbmV4dE5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChjdXJyTm9kZT8udGFyZ2V0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gY3Vyck5vZGU/LnRhcmdldHNbMF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5leHROb2RlPy5ibGFuayAmJiB0aGlzLl9ncmFwaE1ldGFkYXRhW25leHROb2RlLmlkXS5wYXJlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlc1RvRGVsZXRlLnB1c2gobmV4dE5vZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1cnJOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gZ3JhcGhOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBjdXJyTm9kZT8udGFyZ2V0c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChuZXh0Tm9kZT8uYmxhbmsgJiYgdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0Tm9kZS5pZF0ucGFyZW50cy5sZW5ndGggPT09IDEpO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZVRvRGVsZXRlLmlkXS5wYXJlbnRzWzBdO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBub2RlVG9EZWxldGUudGFyZ2V0c1swXTtcbiAgICAgICAgY29uc3QgaXNQYXJlbnRQYXJhbGxlbFN0YXJ0ID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtwYXJlbnQ/LmlkXT8ucGFyYWxsZWxTdGFydDtcbiAgICAgICAgY29uc3QgaXNUYXJnZXRQYXJhbGxlbEVuZCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbdGFyZ2V0XT8ucGFyYWxsZWxFbmQ7XG4gICAgICAgIGNvbnN0IHRhcmdldHMgPVxuICAgICAgICAgICAgKGlzUGFyZW50UGFyYWxsZWxTdGFydCAmJiBpc1RhcmdldFBhcmFsbGVsRW5kKSB8fCBub2Rlc1RvRGVsZXRlLmxlbmd0aCA+IDEgPyBbXSA6IGN1cnJOb2RlPy50YXJnZXRzID8/IFtdO1xuXG4gICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKG5vZGVUb0RlbGV0ZS5pZCwgdGFyZ2V0cyk7XG5cbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbHRlcigobm9kZSkgPT4gIW5vZGVzVG9EZWxldGUuaW5jbHVkZXMobm9kZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkUGFyYWxsZWxUYXJnZXRzKHRhcmdldE5vZGVJZDogc3RyaW5nLCBub2RlSWRUb0FkZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZChub2RlLCB0YXJnZXROb2RlSWQpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzLnB1c2gobm9kZUlkVG9BZGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBcImlkVG9SZXBsYWNlXCIgaW4gYWxsIG5vZGVzJyBcInRhcmdldHNcIiB3aXRoIG9uZXMgaW4gXCJyZXBsYWNlV2l0aFwiIGFycmF5ICovXG4gICAgcHJpdmF0ZSBfcmVwbGFjZVRhcmdldHMoSWRUb1JlcGxhY2U6IHN0cmluZywgcmVwbGFjZVdpdGhJZDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgIGlmIChpc05vZGVUYXJnZXRzSW5jbHVkZUlkKG4sIElkVG9SZXBsYWNlKSkge1xuICAgICAgICAgICAgICAgIG4udGFyZ2V0cyA9IG4udGFyZ2V0cy5maWx0ZXIoKF9pZCkgPT4gX2lkICE9PSBJZFRvUmVwbGFjZSk7XG4gICAgICAgICAgICAgICAgbi50YXJnZXRzLnB1c2goLi4ucmVwbGFjZVdpdGhJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNhdmUgY3VycmVudCBzdGF0ZSBvZiBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgdG8gYmUgYWJsZSB0byB1bmRvIGFuIGFjdGlvbiBtYWRlIGluIGVkaXQgbW9kZSAqL1xuICAgIHByaXZhdGUgX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5leHRIb3Jpem9udGFsTm9kZSA9IChcbiAgICAgICAgbm9kZUluZGV4OiBudW1iZXIsXG4gICAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0J1xuICAgICk6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhEaWZmID0gZGlyZWN0aW9uID09PSAncmlnaHQnID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBuZXh0Q29sdW1uID0gdGhpcy5fZ3JhcGguY29sdW1uc1tjb2x1bW5JbmRleCArIGluZGV4RGlmZl07XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gbmV4dENvbHVtbj8ubm9kZXNbbm9kZUluZGV4XTtcblxuICAgICAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHROb2RlLmJsYW5rIHx8IG5leHROb2RlLnNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXggKyBpbmRleERpZmYsIGRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dE5vZGU7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0TmV4dFZlcnRpY2FsTm9kZSA9IChcbiAgICAgICAgbm9kZUluZGV4OiBudW1iZXIsXG4gICAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICAgIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJ1xuICAgICk6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhEaWZmID0gZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTE7XG4gICAgICAgIGNvbnN0IGN1cnJDb2x1bW4gPSB0aGlzLl9ncmFwaC5jb2x1bW5zW2NvbHVtbkluZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBjdXJyQ29sdW1uLm5vZGVzW25vZGVJbmRleCArIGluZGV4RGlmZl07XG5cbiAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0Tm9kZS5ibGFuayB8fCBuZXh0Tm9kZS5zcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldE5leHRWZXJ0aWNhbE5vZGUobm9kZUluZGV4ICsgaW5kZXhEaWZmLCBjb2x1bW5JbmRleCwgZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0Tm9kZTtcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfY2Fyb3VzZWxTdGVwU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoIC8gdGhpcy5fY2Fyb3VzZWxTdGVwc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zY3JvbGxEaWZmKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5fZ3JhcGhFbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCAtIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY2Fyb3VzZWxTdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9jYXJvdXNlbFN0ZXBzTGVmdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0IC8gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2Nhcm91c2VsU3RlcHNSaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKFxuICAgICAgICAgICAgKHRoaXMuX3Njcm9sbERpZmYgLSBNYXRoLnJvdW5kKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KSkgLyB0aGlzLl9jYXJvdXNlbFN0ZXBTaXplXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfZGVmYXVsdERpYWxvZ09wdGlvbnMoKTogRGVmYXVsdERpYWxvZ09wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGVhbURhdGFTb3VyY2U6IHRoaXMudGVhbURhdGFTb3VyY2UsXG4gICAgICAgICAgICB1c2VyRGF0YVNvdXJjZTogdGhpcy51c2VyRGF0YVNvdXJjZSxcbiAgICAgICAgICAgIHVzZXJEZXRhaWxzVGVtcGxhdGU6IHRoaXMudXNlckRldGFpbHNUZW1wbGF0ZSxcbiAgICAgICAgICAgIHJ0bDogdGhpcy5fcnRsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maW5kU2VyaWFsTm9kZSh5SW5kZXg/OiBudW1iZXIsIHRhcmdldHM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0SXNQYXJlbnQgPVxuICAgICAgICAgICAgTnVtYmVyLmlzSW50ZWdlcih5SW5kZXgpICYmXG4gICAgICAgICAgICB0YXJnZXRzPy5zb21lKCh0YXJnZXRJZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVJbmRleCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbdGFyZ2V0SWRdPy5ub2RlSW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobm9kZUluZGV4KSAmJiBub2RlSW5kZXghIDw9IHlJbmRleCEgLSAxO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRhcmdldElzUGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0cyA/PyBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gdGFyZ2V0cz8uWzBdKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRTZXJpYWxOb2RlKHlJbmRleCwgdGFyZ2V0Tm9kZT8udGFyZ2V0cyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKFxuICAgICAgICBhZGRlZE5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlLFxuICAgICAgICBzb3VyY2VOb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICAgICAgdG9OZXh0U2VyaWFsID0gZmFsc2VcbiAgICApOiB2b2lkIHtcbiAgICAgICAgYWRkZWROb2RlLnRhcmdldHMgPSBzb3VyY2VOb2RlLnRhcmdldHM7XG5cbiAgICAgICAgdGhpcy5fYWRkUGFyYWxsZWxUYXJnZXRzKHNvdXJjZU5vZGUuaWQsIGFkZGVkTm9kZS5pZCk7XG5cbiAgICAgICAgaWYgKHRvTmV4dFNlcmlhbCkge1xuICAgICAgICAgICAgbGV0IHlJbmRleCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbc291cmNlTm9kZS5pZF0ubm9kZUluZGV4O1xuICAgICAgICAgICAgbGV0IHRhcmdldHMgPSBzb3VyY2VOb2RlLnRhcmdldHM7XG5cbiAgICAgICAgICAgIGlmICh5SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VOb2RlTWV0YWRhdGEgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3NvdXJjZU5vZGUuaWRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5vZGVzID0gdGhpcy5fZ3JhcGguY29sdW1ucz8uW3NvdXJjZU5vZGVNZXRhZGF0YS5jb2x1bW5JbmRleCFdPy5ub2RlcztcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0UGFyYWxsZWxOb2RlID0gY29sdW1uTm9kZXMuZmluZCgobm9kZSwgaW5kZXgpID0+IGluZGV4ID4gMCAmJiAhbm9kZS5zcGFjZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV4dFBhcmFsbGVsTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB5SW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25leHRQYXJhbGxlbE5vZGUuaWRdLmNvbHVtbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzID0gbmV4dFBhcmFsbGVsTm9kZS50YXJnZXRzO1xuXG4gICAgICAgICAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gdGhpcy5fZmluZFNlcmlhbE5vZGUoeUluZGV4LCB0YXJnZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYWRkZWROb2RlLnRhcmdldHMgPSB0aGlzLl9maW5kU2VyaWFsTm9kZSh5SW5kZXgsIHRhcmdldHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRpbmdTdGF0ZXMgPSBbdGhpcy50ZWFtRGF0YVNvdXJjZSwgdGhpcy51c2VyRGF0YVNvdXJjZSwgdGhpcy53YXRjaGVyRGF0YVNvdXJjZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGRzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKGRzLm9uRGF0YVJlcXVlc3RlZCgpLnBpcGUobWFwVG8odHJ1ZSkpLCBkcy5vbkRhdGFSZWNlaXZlZCgpLnBpcGUobWFwVG8oZmFsc2UpKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGRzLmlzRGF0YUxvYWRpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QobG9hZGluZ1N0YXRlcyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChsb2FkaW5nU3RhdGVzKSA9PiBsb2FkaW5nU3RhdGVzLnNvbWUoQm9vbGVhbikpLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNvbWVMb2FkaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNvbWVMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVxdWVzdGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlY2VpdmVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoc3ViKTtcbiAgICB9XG59XG5cbmludGVyZmFjZSBEZWZhdWx0RGlhbG9nT3B0aW9ucyB7XG4gICAgdGVhbURhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlPEFwcHJvdmFsVGVhbT47XG4gICAgdXNlckRhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlPEFwcHJvdmFsVXNlcj47XG4gICAgdXNlckRldGFpbHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBydGw6IGJvb2xlYW47XG59XG4iLCI8bmctY29udGFpbmVyIGZkQ29tcGFjdD5cbiAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctbWVzc2FnZXNcbiAgICAgICAgWyhtZXNzYWdlcyldPVwiX21lc3NhZ2VzXCJcbiAgICAgICAgW3VuZG9MYXN0QWN0aW9uQXZhaWxhYmxlXT1cIiEhX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzXCJcbiAgICAgICAgKHVuZG9MYXN0QWN0aW9uKT1cIl91bmRvTGFzdEFjdGlvbigpXCJcbiAgICA+PC9mZHAtYXBwcm92YWwtZmxvdy1tZXNzYWdlcz5cblxuICAgIDxmZC1ncmlkLWxpc3RcbiAgICAgICAgI2dyaWRMaXN0XG4gICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3Rvb2xiYXJcIlxuICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfaXNFZGl0TW9kZSA/ICdtdWx0aVNlbGVjdCcgOiAnbm9uZSdcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIl9vbk5vZGVTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8ZmQtZ3JpZC1saXN0LXRpdGxlLWJhciBbdGl0bGVdPVwidGl0bGUgfHwgKCdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5kZWZhdWx0VGl0bGUnIHwgZmRUcmFuc2xhdGUpXCI+XG4gICAgICAgICAgICA8ZmQtZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXI+PC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyLXNwYWNlcj5cblxuICAgICAgICAgICAgPGZkcC1hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9uc1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNFZGl0QXZhaWxhYmxlXCJcbiAgICAgICAgICAgICAgICBbZ3JhcGhdPVwiX2dyYXBoXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWROb2Rlc109XCJfc2VsZWN0ZWROb2Rlc1wiXG4gICAgICAgICAgICAgICAgW2dyYXBoTWV0YWRhdGFdPVwiX2dyYXBoTWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgIFtpc0VkaXRNb2RlXT1cIl9pc0VkaXRNb2RlXCJcbiAgICAgICAgICAgICAgICAoZW50ZXJFZGl0TW9kZSk9XCJfZW50ZXJFZGl0TW9kZSgpXCJcbiAgICAgICAgICAgICAgICAoYWRkTm9kZSk9XCJfYWRkTm9kZSgkZXZlbnQubm9kZSwgJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgICAgIChlZGl0U2VsZWN0ZWROb2RlKT1cIl9lZGl0Tm9kZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZGVsZXRlU2VsZWN0ZWROb2Rlcyk9XCJfZGVsZXRlU2VsZWN0ZWROb2RlcygpXCJcbiAgICAgICAgICAgID48L2ZkcC1hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9ucz5cbiAgICAgICAgPC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzXCJcbiAgICAgICAgICAgICpuZ0lmPVwiX2FwcHJvdmFsUHJvY2Vzcz8ud2F0Y2hlcnM/Lmxlbmd0aCB8fCBfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIndhdGNoZXJzTGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X193YXRjaGVycy10aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IHdhdGNoZXJzTGFiZWwgfHwgKCdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5kZWZhdWx0V2F0Y2hlcnNMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFfaXNFZGl0TW9kZVwiPlxuICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHdhdGNoZXIgb2YgX2FwcHJvdmFsUHJvY2Vzcz8ud2F0Y2hlcnM7IHRyYWNrQnk6IF90cmFja0J5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICBbaW1hZ2VdPVwid2F0Y2hlci5pbWdVcmwgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwid2F0Y2hlci5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NpcmNsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGF2YXRhckNsaWNrZWQpPVwiX29uV2F0Y2hlckNsaWNrKHdhdGNoZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2ZkLWF2YXRhcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiX2lzRWRpdE1vZGVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtbXVsdGktaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cIl91c2Vyc0ZvcldhdGNoZXJzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cud2F0Y2hlcnNJbnB1dFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJfZGlzcGxheVVzZXJGblwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZuXT1cIl91c2VyVmFsdWVGblwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93QWxsQnV0dG9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIl9zZWxlY3RlZFdhdGNoZXJJZHNcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfd2F0Y2hlcnNTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2ZkLW11bHRpLWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhX2dyYXBoLmVycm9yc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9ncmFwaC5jb2x1bW5zLmxlbmd0aDsgZWxzZSBlbXB0eUFwcHJvdmFsRmxvd0dyYXBoXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2NvbnRhaW5lci0tZXh0cmEtcGFkZGluZy1zdGFydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXItLWV4dHJhLXBhZGRpbmctZW5kXT1cInRydWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1jYXJvdXNlbC1jb250cm9sc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9zY3JvbGxEaWZmID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHMtLWVkaXQtbW9kZV09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9jYXJvdXNlbFN0ZXBzTGVmdCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHNfX2J1dHRvbi0tcHJldi1zbGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cucHJldkJ1dHRvbkFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRTbGlkZSgtMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIFtnbHlwaF09XCInbmF2aWdhdGlvbi0nICsgKF9ydGwgPyAncmlnaHQnIDogJ2xlZnQnKSArICctYXJyb3cnXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IF9jYXJvdXNlbFN0ZXBzTGVmdCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9jYXJvdXNlbFN0ZXBzUmlnaHQgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LWNhcm91c2VsLWNvbnRyb2xzX19idXR0b24tLW5leHQtc2xpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5leHRCdXR0b25BcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0U2xpZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgX2Nhcm91c2VsU3RlcHNSaWdodCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIFtnbHlwaF09XCInbmF2aWdhdGlvbi0nICsgKF9ydGwgPyAnbGVmdCcgOiAncmlnaHQnKSArICctYXJyb3cnXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lci0tbXVsdGlwbGUtcm9vdC1ub2Rlc109XCJfbXVsdGlwbGVSb290Tm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb250YWluZXItLW11bHRpcGxlLWZpbmFsLW5vZGVzXT1cIl9tdWx0aXBsZUZpbmFsTm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXNjcm9sbGJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNncmFwaENvbnRhaW5lckVsXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2dyYXBoRWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLS1lZGl0LW1vZGVdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvd19fZ3JhcGgtY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBfZ3JhcGguY29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1hcHByb3ZhbC1mbG93LW5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIGNvbHVtbi5ub2RlczsgbGV0IG5vZGVJbmRleCA9IGluZGV4OyB0cmFja0J5OiBfdHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcHByb3ZhbEZsb3dOb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIl9pc0Nka0RyYWdEaXNhYmxlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttZXRhXT1cIl9ncmFwaE1ldGFkYXRhW25vZGUuaWRdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0VkaXRdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmV4dE5vZGVCbGFua109XCJfaXNOZXh0Tm9kZUJsYW5rKG5vZGUsIGNvbHVtbkluZGV4LCBub2RlSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0R1ZURhdGVdPVwiY2hlY2tEdWVEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkdWVEYXRlVGhyZXNob2xkXT1cImR1ZURhdGVUaHJlc2hvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbmRlckFycm93XT1cImNvbHVtbkluZGV4ID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsTm9kZXNJbkNvbHVtbkFwcHJvdmVkXT1cIiEhY29sdW1uLmFsbE5vZGVzQXBwcm92ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcHJvdmFsU3RhdHVzVGVtcGxhdGVdPVwiYXBwcm92YWxTdGF0dXNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzQ29sb3JNYXBwaW5nXT1cInN0YXR1c0NvbG9yTWFwcGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25BZGQpPVwiX2FkZE5vZGUobm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25FZGl0KT1cIl9lZGl0Tm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25EZWxldGUpPVwiX29uTm9kZURlbGV0ZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25Ob2RlS2V5RG93bigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJfZHJhZ0Ryb3BJblByb2dyZXNzID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cIl9vbk5vZGVEcm9wKG5vZGUsICRldmVudC5zb3VyY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnTW92ZWQpPVwiX29uTm9kZURyYWdNb3ZlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHJpY2sgd2l0aCB1c2luZyBwcm9qZWN0aW9uIHRvIG1ha2UgZ3JpZCBsaXN0IGl0ZW1zIHZpc2libGUgZm9yIHRoZSBncmlkIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtZ3JpZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhbm9kZS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cImFwcHJvdmFsRmxvd05vZGUuYXBwcm92YWxGbG93Tm9kZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2xiYXJDbGlja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1ub2RlLWlubmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLW5vZGUtaW5uZXItLWVkaXRdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmVzcyk9XCJfb25Ob2RlQ2xpY2sobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1ncmlkLWxpc3QtaXRlbS10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2lzRWRpdE1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhcHByb3ZhbEZsb3dOb2RlLl9vdmVyZmxvd01lbnVCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWdyaWQtbGlzdC1pdGVtLXRvb2xiYXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWdyaWQtbGlzdC1pdGVtLWltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCJub2RlLmFwcHJvdmVycy5sZW5ndGggPT09IDEgPyBub2RlLmFwcHJvdmVyc1swXS5pbWdVcmwgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm5vZGUuYXBwcm92ZXJzLmxlbmd0aCA+IDEgPyBub2RlLmRlc2NyaXB0aW9uIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaXJjbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtYXZhdGFyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZkLWdyaWQtbGlzdC1pdGVtLWJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcHJvdmFsRmxvd05vZGUuX25vZGVDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWdyaWQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkcC1hcHByb3ZhbC1mbG93LW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9mZC1ncmlkLWxpc3Q+XG5cbiAgICA8ZGl2IGZkLWJhciAqbmdJZj1cIl9pc0VkaXRNb2RlXCI+XG4gICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cuZWRpdE1vZGVTYXZlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTYXZlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9zYXZlRWRpdE1vZGVDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG5cbiAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVkaXRNb2RlRXhpdEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUV4aXRCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2V4aXRFZGl0TW9kZSgpXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlBcHByb3ZhbEZsb3dHcmFwaD5cbiAgICAgICAgPGZpZ3VyZSBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlIHR5cGU9XCJzcG90XCIgW3N2Z0NvbmZpZ109XCJfZW1wdHlBcHByb3ZhbEZsb3dTcG90Q29uZmlnXCI+XG4gICAgICAgICAgICA8ZmlnY2FwdGlvbiBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlLWZpZ2NhcHRpb24+XG4gICAgICAgICAgICAgICAgPGgzIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lbXB0eVRpdGxlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICA8cCBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lbXB0eUhpbnQnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2ZpZ2NhcHRpb24+XG4gICAgICAgIDwvZmlndXJlPlxuXG4gICAgICAgIDwhLS0gVE9ETyAjNTE3ODogUmVwbGFjZSB3aXRoIGlsbHVzdHJhdGVkIGltYWdlIGNvbXBvbmVudCBhZnRlciBpdCBnZXRzIGZpeGVkIC0tPlxuICAgICAgICA8ZGl2IFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiPlxuICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTI4XCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMjhcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTI4IDEyOFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJzYXBJbGx1cy1TcG90LU5vRGF0YVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk00MS42MTc5LDMyLjcxNzRIODQuNjI3M2ExLDEsMCwwLDEsLjcyMy4zMDkybDcuMjQ0NSw3LjU4MjQsNy40ODE3LDcuODQ5MWExLDEsMCwwLDEsLjI3NjEuNjlsLS4wMDQ2LDU1LjYwNjlhNC4xMDM4LDQuMTAzOCwwLDAsMS0uODc4NywyLjEyMTJBNC4wNTY0LDQuMDU2NCwwLDAsMSw5OC4xLDEwNy45NjMxbC01Ni4zODU4LjAzMTNhMi42MTY3LDIuNjE2NywwLDAsMS0zLjA4MTItMy4yMzA5bC0uMDE1Mi02OS4wNTk0WlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfUGF0dGVyblNoYWRvd1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfUGF0dGVyblNoYWRvdylcIlxuICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zNS43OTI4LDI3LjQ5ODdINzguODAyMmExLDEsMCwwLDEsLjcyMy4zMDkyTDg2Ljc3LDM1LjM5bDcuNDgxNiw3Ljg0OTJhMSwxLDAsMCwxLC4yNzYyLjY5bC0uMDA0Niw1NS42MDY5YTMsMywwLDAsMS0zLDNIMzUuODA4YTIuOTk0NiwyLjk5NDYsMCwwLDEtMy0yLjk5MTNjLS4wMS0xMi4wNTY0LS4wNDIzLTU3LjAxMTYtLjAxNTItNjkuMDU5NUEyLjk5NDMsMi45OTQzLDAsMCwxLDM1Ljc5MjgsMjcuNDk4N1pcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX09iamVjdEZpbGxDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfT2JqZWN0RmlsbENvbG9yKVwiXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTkzLjI5NzgsNDQuNTMzNUg3OC44MjA4YS45OTI1Ljk5MjUsMCwwLDEtLjk3NC0xLjAxVjI4LjUxMDhhLjk3Ljk3LDAsMCwxLDEuNjYyOC0uNzE0M0w5My45ODY1LDQyLjgwOTJBMS4wMTUxLDEuMDE1MSwwLDAsMSw5My4yOTc4LDQ0LjUzMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19CcmFuZENvbG9yU2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19CcmFuZENvbG9yU2Vjb25kYXJ5KVwiXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTEwNC42MDgsMzguOTQ4NWw1LjkxNTctMS43NzIxYzEuMzItLjM5NTQuNzU4NC0yLjUyNTgtLjU2ODktMi4xMjgyTDEwNC4wMzkyLDM2LjgyYy0xLjMyLjM5NTMtLjc1ODQsMi41MjU4LjU2ODgsMi4xMjgyWlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNODUuMjk3MywyMS4yNDY1bC45NzE4LTUuOTMzMWMuMjE1NC0xLjMxNTEtMS43NzctMS44ODA3LTEuOTk0MS0uNTU1NGwtLjk3MTgsNS45MzMyYy0uMjE1NSwxLjMxNTEsMS43NzcsMS44ODA3LDEuOTk0MS41NTUzWlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNOTUuMzAzNCwyOS4wMDE1YTEuMDEsMS4wMSwwLDAsMS0uNjgzNy0uMjY3LDEuMDc4MywxLjA3ODMsMCwwLDEtLjA4NjQtMS40OTMybDUuOTUxMS02Ljg4NTdhMS4wMSwxLjAxLDAsMCwxLDEuNDUzOC0uMDg4NCwxLjA3ODUsMS4wNzg1LDAsMCwxLC4wODY1LDEuNDkzMmwtNS45NTExLDYuODg1OEExLjAxNjQsMS4wMTY0LDAsMCwxLDk1LjMwMzQsMjkuMDAxNVpcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0xheWVyaW5nMVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfTGF5ZXJpbmcxKVwiXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTk0Ljg3NDcsNDIuODg2MSw4MC4wODU1LDI3LjQ2MjNhMS41MTUyLDEuNTE1MiwwLDAsMC0xLjA4ODUtLjQ2MzZIMzUuODA3YTMuNTA5LDMuNTA5LDAsMCwwLTMuNTE0NiwzLjQ4MzZjLS4wMjk0LDEzLjI4NTcuMDEzNyw2Ni43NTU5LjAxNTcsNjkuMDI1N2EzLjUwNzYsMy41MDc2LDAsMCwwLDMuNTE0NiwzLjQ4OTRIOTEuNzcwOWEzLjUxMDYsMy41MTA2LDAsMCwwLDMuNTE0Ni0zLjQ5ODJsLjAwNS01NS41Nzg1QTEuNDksMS40OSwwLDAsMCw5NC44NzQ3LDQyLjg4NjFabS0xNi4yMS0xNC44MzU1YTEuMTUsMS4xNSwwLDAsMSwuMjU2MS0uMDMwOSwxLjA0LDEuMDQsMCwwLDEsLjUxLjIxMzRsMTQuMjc2LDE0Ljg4MzcuMDE5NC4wMmEuNTg5MS41ODkxLDAsMCwxLC4wOTY4LjYyNTFjLS4xMDE2LjE3NjQtLjQwODYuMjQtLjY5LjI0TDc4LjgzNTUsNDRhLjYwMzEuNjAzMSwwLDAsMS0uNTQ3Mi0uNjEzMWMtLjAwODctNC45NTg4LS4wMTctOS45MDE1LS4wMDM1LTE0Ljg2ODlBLjUxODkuNTE4OSwwLDAsMSw3OC42NjQ2LDI4LjA1MDZabTEzLjEwNjIsNzMuOTVIMzUuODE4OGEyLjUwNDUsMi41MDQ1LDAsMCwxLTIuNTEwNy0yLjQ5MWMtLjAwMi0yLjI2OTQtLjA0NTEtNTUuNzQtLjAxNTctNjkuMDI0OGEyLjUwNTQsMi41MDU0LDAsMCwxLDIuNTEwNy0yLjQ4NjFINzcuMzY4NGExLjQ5LDEuNDksMCwwLDAtLjA5NzYuNTEwNlY0My40OTM0QTEuNTE0NSwxLjUxNDUsMCwwLDAsNzguNzg5NCw0NUg3OC45Mkw5NC4yODYsNDcuOTc0OWwtLjAwNDYsNTEuNTI2OUEyLjUwNzQsMi41MDc0LDAsMCwxLDkxLjc3MDgsMTAyLjAwMDZaXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19TdHJva2VEZXRhaWxDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfU3Ryb2tlRGV0YWlsQ29sb3IpXCJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==