@fundamental-ngx/platform 0.47.2-rc.0 → 0.47.2

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 (54) hide show
  1. package/esm2022/approval-flow/approval-flow.component.mjs +3 -3
  2. package/esm2022/dynamic-page/dynamic-page.component.mjs +3 -3
  3. package/esm2022/feed-input/feed-input.component.mjs +3 -3
  4. package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +2 -2
  5. package/esm2022/form/form-group/form-group.component.mjs +3 -3
  6. package/esm2022/form/input-group/input-group.component.mjs +3 -3
  7. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
  8. package/esm2022/form/select/select/select.component.mjs +3 -3
  9. package/esm2022/form/step-input/number/number-step-input.component.mjs +3 -3
  10. package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +3 -3
  11. package/esm2022/link/link.component.mjs +3 -3
  12. package/esm2022/list/list.component.mjs +3 -3
  13. package/esm2022/list/object-list-item/object-list-item-row.component.mjs +3 -3
  14. package/esm2022/list/object-list-item/object-list-item.component.mjs +3 -3
  15. package/esm2022/menu/menu-item.component.mjs +3 -3
  16. package/esm2022/menu/menu.component.mjs +3 -3
  17. package/esm2022/message-popover/message-popover.component.mjs +3 -3
  18. package/esm2022/page-footer/page-footer.component.mjs +3 -3
  19. package/esm2022/search-field/search-field.component.mjs +3 -3
  20. package/esm2022/split-menu-button/split-menu-button.component.mjs +3 -3
  21. package/esm2022/table/table.component.mjs +3 -3
  22. package/esm2022/variant-management/variant-management.component.mjs +3 -3
  23. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +2 -2
  24. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  25. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +2 -2
  26. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +2 -2
  28. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-platform-form.mjs +12 -12
  30. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +2 -2
  32. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-platform-link.mjs +2 -2
  34. package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-platform-list.mjs +6 -6
  36. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-platform-menu.mjs +4 -4
  38. package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +2 -2
  40. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +2 -2
  42. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-platform-search-field.mjs +2 -2
  44. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +2 -2
  46. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-platform-table.mjs +2 -2
  48. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +2 -2
  50. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  51. package/fundamental-ngx-platform-v0.47.2.tgz +0 -0
  52. package/package.json +4 -4
  53. package/schematics/ng-add/index.js +1 -1
  54. package/fundamental-ngx-platform-v0.47.2-rc.0.tgz +0 -0
@@ -756,7 +756,7 @@ export class ApprovalFlowComponent {
756
756
  this._subscriptions.add(sub);
757
757
  }
758
758
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", 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 }); }
759
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: ApprovalFlowComponent, isStandalone: true, 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" }, providers: [ApprovalFlowAddNodeViewService], 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.32.0-rc.7\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: 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: ApprovalFlowMessagesComponent, selector: "fdp-approval-flow-messages", inputs: ["messages", "undoLastActionAvailable"], outputs: ["messagesChange", "undoLastAction"] }, { kind: "component", type: GridListComponent, selector: "fd-grid-list", inputs: ["id", "width", "ariaLabel", "selectionMode", "layoutPattern"], outputs: ["selectionChange"] }, { kind: "component", type: GridListTitleBarComponent, selector: "fd-grid-list-title-bar", inputs: ["title"] }, { kind: "component", type: GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ApprovalFlowToolbarActionsComponent, selector: "fdp-approval-flow-toolbar-actions", inputs: ["graph", "graphMetadata", "selectedNodes", "isEditMode"], outputs: ["enterEditMode", "addNode", "editSelectedNode", "deleteSelectedNodes"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "dropdownValues", "openDropdownOnAddOnClicked", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "optionItemIdentifier", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton", "tokenHiddenId"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: ApprovalFlowNodeComponent, selector: "fdp-approval-flow-node", inputs: ["node", "meta", "renderArrow", "checkDueDate", "dueDateThreshold", "allNodesInColumnApproved", "approvalStatusTemplate", "statusColorMapping", "isEdit", "isNextNodeBlank"], outputs: ["onAdd", "onEdit", "onDelete"] }, { kind: "directive", type: 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: 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: GridListItemToolbarComponent, selector: "fd-grid-list-item-toolbar" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: GridListItemImageDirective, selector: "[fd-grid-list-item-image]" }, { kind: "directive", type: GridListItemBodyDirective, selector: "[fd-grid-list-item-body]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IllustratedMessageComponent, selector: "[fd-illustrated-message]", inputs: ["type", "svgConfig", "noSvg", "id", "class"] }, { kind: "component", type: IllustratedMessageFigcaptionComponent, selector: "[fd-illustrated-message-figcaption]" }, { kind: "directive", type: IllustratedMessageTitleDirective, selector: "[fd-illustrated-message-title]" }, { kind: "directive", type: IllustratedMessageTextDirective, selector: "[fd-illustrated-message-text]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
759
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: ApprovalFlowComponent, isStandalone: true, 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" }, providers: [ApprovalFlowAddNodeViewService], 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.32.0\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: 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: ApprovalFlowMessagesComponent, selector: "fdp-approval-flow-messages", inputs: ["messages", "undoLastActionAvailable"], outputs: ["messagesChange", "undoLastAction"] }, { kind: "component", type: GridListComponent, selector: "fd-grid-list", inputs: ["id", "width", "ariaLabel", "selectionMode", "layoutPattern"], outputs: ["selectionChange"] }, { kind: "component", type: GridListTitleBarComponent, selector: "fd-grid-list-title-bar", inputs: ["title"] }, { kind: "component", type: GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ApprovalFlowToolbarActionsComponent, selector: "fdp-approval-flow-toolbar-actions", inputs: ["graph", "graphMetadata", "selectedNodes", "isEditMode"], outputs: ["enterEditMode", "addNode", "editSelectedNode", "deleteSelectedNodes"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "dropdownValues", "openDropdownOnAddOnClicked", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "optionItemIdentifier", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton", "tokenHiddenId"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: ApprovalFlowNodeComponent, selector: "fdp-approval-flow-node", inputs: ["node", "meta", "renderArrow", "checkDueDate", "dueDateThreshold", "allNodesInColumnApproved", "approvalStatusTemplate", "statusColorMapping", "isEdit", "isNextNodeBlank"], outputs: ["onAdd", "onEdit", "onDelete"] }, { kind: "directive", type: 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: 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: GridListItemToolbarComponent, selector: "fd-grid-list-item-toolbar" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: GridListItemImageDirective, selector: "[fd-grid-list-item-image]" }, { kind: "directive", type: GridListItemBodyDirective, selector: "[fd-grid-list-item-body]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IllustratedMessageComponent, selector: "[fd-illustrated-message]", inputs: ["type", "svgConfig", "noSvg", "id", "class"] }, { kind: "component", type: IllustratedMessageFigcaptionComponent, selector: "[fd-illustrated-message-figcaption]" }, { kind: "directive", type: IllustratedMessageTitleDirective, selector: "[fd-illustrated-message-title]" }, { kind: "directive", type: IllustratedMessageTextDirective, selector: "[fd-illustrated-message-text]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
760
760
  }
761
761
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ApprovalFlowComponent, decorators: [{
762
762
  type: Component,
@@ -789,7 +789,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
789
789
  IllustratedMessageTitleDirective,
790
790
  IllustratedMessageTextDirective,
791
791
  FdTranslatePipe
792
- ], 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.32.0-rc.7\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"] }]
792
+ ], 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.32.0\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"] }]
793
793
  }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: Map, decorators: [{
794
794
  type: Optional
795
795
  }, {
@@ -862,4 +862,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
862
862
  type: ViewChildren,
863
863
  args: [ApprovalFlowNodeComponent]
864
864
  }] } });
865
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9hcHByb3ZhbC1mbG93L2FwcHJvdmFsLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RixPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQTBCLE1BQU0saUNBQWlDLENBQUM7QUFFNUYsT0FBTyxFQUFF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c0JBQXpCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBR0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUlOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQU9HLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFPRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBT0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUdJLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csWUFBWTtzQkFBckIsTUFBTTtnQkFHRyxhQUFhO3NCQUF0QixNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxlQUFlO3NCQUF4QixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR3dCLGlCQUFpQjtzQkFBL0MsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBR1AsUUFBUTtzQkFBN0IsU0FBUzt1QkFBQyxTQUFTO2dCQUdHLFNBQVM7c0JBQS9CLFNBQVM7dUJBQUMsVUFBVTtnQkFHb0IsZUFBZTtzQkFBdkQsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtYXBUbywgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEdyaWRMaXN0Q29tcG9uZW50LCBHcmlkTGlzdFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2dyaWQtbGlzdCc7XG5cbmltcG9ydCB7IE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2F2YXRhcic7XG5pbXBvcnQgeyBCYXJDb21wb25lbnQsIEJhckVsZW1lbnREaXJlY3RpdmUsIEJhclJpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQge1xuICAgIEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUsXG4gICAgR3JpZExpc3RJdGVtQ29tcG9uZW50LFxuICAgIEdyaWRMaXN0SXRlbUltYWdlRGlyZWN0aXZlLFxuICAgIEdyaWRMaXN0SXRlbVRvb2xiYXJDb21wb25lbnQsXG4gICAgR3JpZExpc3RUaXRsZUJhckNvbXBvbmVudCxcbiAgICBHcmlkTGlzdFRpdGxlQmFyU3BhY2VyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9ncmlkLWxpc3QnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pY29uJztcbmltcG9ydCB7XG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlQ29tcG9uZW50LFxuICAgIElsbHVzdHJhdGVkTWVzc2FnZUZpZ2NhcHRpb25Db21wb25lbnQsXG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGV4dERpcmVjdGl2ZSxcbiAgICBJbGx1c3RyYXRlZE1lc3NhZ2VUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWxsdXN0cmF0ZWQtbWVzc2FnZSc7XG5pbXBvcnQgeyBNdWx0aUlucHV0Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL211bHRpLWlucHV0JztcbmltcG9ydCB7IE9iamVjdFN0YXR1cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9vYmplY3Qtc3RhdHVzJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlLFxuICAgIEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlLFxuICAgIERBVEFfUFJPVklERVJTLFxuICAgIERhdGFQcm92aWRlclxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICAgIEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUyxcbiAgICBBZGROb2RlRGlhbG9nRm9ybURhdGEsXG4gICAgQWRkTm9kZURpYWxvZ1JlZkRhdGEsXG4gICAgQXBwcm92YWxGbG93QWRkTm9kZUNvbXBvbmVudCxcbiAgICBBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0XG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1hZGQtbm9kZS9hcHByb3ZhbC1mbG93LWFkZC1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0NvbXBvbmVudCxcbiAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNEaWFsb2dSZWZEYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1hcHByb3Zlci1kZXRhaWxzL2FwcHJvdmFsLWZsb3ctYXBwcm92ZXItZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dHcmFwaCxcbiAgICBBcHByb3ZhbEdyYXBoTWV0YWRhdGEsXG4gICAgZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaCxcbiAgICBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoTWV0YWRhdGFcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LWdyYXBoJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93TWVzc2FnZSxcbiAgICBBcHByb3ZhbEZsb3dNZXNzYWdlVHlwZSxcbiAgICBBcHByb3ZhbEZsb3dNZXNzYWdlc0NvbXBvbmVudFxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctbWVzc2FnZXMvYXBwcm92YWwtZmxvdy1tZXNzYWdlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwcm92YWxGbG93Tm9kZUNvbXBvbmVudCB9IGZyb20gJy4vYXBwcm92YWwtZmxvdy1ub2RlL2FwcHJvdmFsLWZsb3ctbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dTZWxlY3RUeXBlQ29tcG9uZW50LFxuICAgIFNlbGVjdFR5cGVEaWFsb2dGb3JtRGF0YVxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctc2VsZWN0LXR5cGUvYXBwcm92YWwtZmxvdy1zZWxlY3QtdHlwZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwcm92YWxGbG93VG9vbGJhckFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctdG9vbGJhci1hY3Rpb25zL2FwcHJvdmFsLWZsb3ctdG9vbGJhci1hY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIGRpc3BsYXlVc2VyRm4sXG4gICAgZ2V0QmxhbmtBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICBnZXRHcmFwaE5vZGVzLFxuICAgIGlzTm9kZVRhcmdldHNJbmNsdWRlSWQsXG4gICAgdHJhY2tCeUZuLFxuICAgIHVzZXJWYWx1ZUZuXG59IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsR3JhcGhOb2RlLFxuICAgIEFwcHJvdmFsR3JhcGhOb2RlTWV0YWRhdGEsXG4gICAgQXBwcm92YWxOb2RlLFxuICAgIEFwcHJvdmFsUHJvY2VzcyxcbiAgICBBcHByb3ZhbFN0YXR1cyxcbiAgICBBcHByb3ZhbFRlYW0sXG4gICAgQXBwcm92YWxVc2VyLFxuICAgIFNlbmRSZW1pbmRlcnNEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dBZGROb2RlVmlld1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FwcHJvdmFsLWZsb3ctYWRkLW5vZGUtdmlldy5zZXJ2aWNlJztcblxubGV0IGRlZmF1bHRJZCA9IDA7XG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC40MC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWFwcHJvdmFsLWZsb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtBcHByb3ZhbEZsb3dBZGROb2RlVmlld1NlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSxcbiAgICAgICAgQXBwcm92YWxGbG93TWVzc2FnZXNDb21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0Q29tcG9uZW50LFxuICAgICAgICBHcmlkTGlzdFRpdGxlQmFyQ29tcG9uZW50LFxuICAgICAgICBHcmlkTGlzdFRpdGxlQmFyU3BhY2VyQ29tcG9uZW50LFxuICAgICAgICBOZ0lmLFxuICAgICAgICBBcHByb3ZhbEZsb3dUb29sYmFyQWN0aW9uc0NvbXBvbmVudCxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICAgICAgTXVsdGlJbnB1dENvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIEdyaWRMaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgICAgR3JpZExpc3RJdGVtVG9vbGJhckNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgR3JpZExpc3RJdGVtSW1hZ2VEaXJlY3RpdmUsXG4gICAgICAgIEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBJbGx1c3RyYXRlZE1lc3NhZ2VGaWdjYXB0aW9uQ29tcG9uZW50LFxuICAgICAgICBJbGx1c3RyYXRlZE1lc3NhZ2VUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGV4dERpcmVjdGl2ZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbEZsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogVGl0bGUgd2hpY2ggaXMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGFwcHJvdmFsIGZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHZhbHVlOiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB1c2VycyBvZiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB1c2VyRGF0YVNvdXJjZTogQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2U8QXBwcm92YWxVc2VyPjtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHdhdGNoZXJzIG9mIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJEYXRhU291cmNlOiBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZTxBcHByb3ZhbFVzZXI+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==
865
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9hcHByb3ZhbC1mbG93L2FwcHJvdmFsLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RixPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQTBCLE1BQU0saUNBQWlDLENBQUM7QUFFNUYsT0FBTyxFQUFF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c0JBQXpCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBR0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUlOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQU9HLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFPRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBT0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUdJLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csWUFBWTtzQkFBckIsTUFBTTtnQkFHRyxhQUFhO3NCQUF0QixNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxlQUFlO3NCQUF4QixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR3dCLGlCQUFpQjtzQkFBL0MsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBR1AsUUFBUTtzQkFBN0IsU0FBUzt1QkFBQyxTQUFTO2dCQUdHLFNBQVM7c0JBQS9CLFNBQVM7dUJBQUMsVUFBVTtnQkFHb0IsZUFBZTtzQkFBdkQsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtYXBUbywgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEdyaWRMaXN0Q29tcG9uZW50LCBHcmlkTGlzdFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2dyaWQtbGlzdCc7XG5cbmltcG9ydCB7IE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2F2YXRhcic7XG5pbXBvcnQgeyBCYXJDb21wb25lbnQsIEJhckVsZW1lbnREaXJlY3RpdmUsIEJhclJpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQge1xuICAgIEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUsXG4gICAgR3JpZExpc3RJdGVtQ29tcG9uZW50LFxuICAgIEdyaWRMaXN0SXRlbUltYWdlRGlyZWN0aXZlLFxuICAgIEdyaWRMaXN0SXRlbVRvb2xiYXJDb21wb25lbnQsXG4gICAgR3JpZExpc3RUaXRsZUJhckNvbXBvbmVudCxcbiAgICBHcmlkTGlzdFRpdGxlQmFyU3BhY2VyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9ncmlkLWxpc3QnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pY29uJztcbmltcG9ydCB7XG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlQ29tcG9uZW50LFxuICAgIElsbHVzdHJhdGVkTWVzc2FnZUZpZ2NhcHRpb25Db21wb25lbnQsXG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGV4dERpcmVjdGl2ZSxcbiAgICBJbGx1c3RyYXRlZE1lc3NhZ2VUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWxsdXN0cmF0ZWQtbWVzc2FnZSc7XG5pbXBvcnQgeyBNdWx0aUlucHV0Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL211bHRpLWlucHV0JztcbmltcG9ydCB7IE9iamVjdFN0YXR1cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9vYmplY3Qtc3RhdHVzJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlLFxuICAgIEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlLFxuICAgIERBVEFfUFJPVklERVJTLFxuICAgIERhdGFQcm92aWRlclxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICAgIEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUyxcbiAgICBBZGROb2RlRGlhbG9nRm9ybURhdGEsXG4gICAgQWRkTm9kZURpYWxvZ1JlZkRhdGEsXG4gICAgQXBwcm92YWxGbG93QWRkTm9kZUNvbXBvbmVudCxcbiAgICBBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0XG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1hZGQtbm9kZS9hcHByb3ZhbC1mbG93LWFkZC1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0NvbXBvbmVudCxcbiAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNEaWFsb2dSZWZEYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1hcHByb3Zlci1kZXRhaWxzL2FwcHJvdmFsLWZsb3ctYXBwcm92ZXItZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dHcmFwaCxcbiAgICBBcHByb3ZhbEdyYXBoTWV0YWRhdGEsXG4gICAgZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaCxcbiAgICBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoTWV0YWRhdGFcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LWdyYXBoJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93TWVzc2FnZSxcbiAgICBBcHByb3ZhbEZsb3dNZXNzYWdlVHlwZSxcbiAgICBBcHByb3ZhbEZsb3dNZXNzYWdlc0NvbXBvbmVudFxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctbWVzc2FnZXMvYXBwcm92YWwtZmxvdy1tZXNzYWdlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwcm92YWxGbG93Tm9kZUNvbXBvbmVudCB9IGZyb20gJy4vYXBwcm92YWwtZmxvdy1ub2RlL2FwcHJvdmFsLWZsb3ctbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dTZWxlY3RUeXBlQ29tcG9uZW50LFxuICAgIFNlbGVjdFR5cGVEaWFsb2dGb3JtRGF0YVxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctc2VsZWN0LXR5cGUvYXBwcm92YWwtZmxvdy1zZWxlY3QtdHlwZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwcm92YWxGbG93VG9vbGJhckFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctdG9vbGJhci1hY3Rpb25zL2FwcHJvdmFsLWZsb3ctdG9vbGJhci1hY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIGRpc3BsYXlVc2VyRm4sXG4gICAgZ2V0QmxhbmtBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICBnZXRHcmFwaE5vZGVzLFxuICAgIGlzTm9kZVRhcmdldHNJbmNsdWRlSWQsXG4gICAgdHJhY2tCeUZuLFxuICAgIHVzZXJWYWx1ZUZuXG59IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsR3JhcGhOb2RlLFxuICAgIEFwcHJvdmFsR3JhcGhOb2RlTWV0YWRhdGEsXG4gICAgQXBwcm92YWxOb2RlLFxuICAgIEFwcHJvdmFsUHJvY2VzcyxcbiAgICBBcHByb3ZhbFN0YXR1cyxcbiAgICBBcHByb3ZhbFRlYW0sXG4gICAgQXBwcm92YWxVc2VyLFxuICAgIFNlbmRSZW1pbmRlcnNEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dBZGROb2RlVmlld1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FwcHJvdmFsLWZsb3ctYWRkLW5vZGUtdmlldy5zZXJ2aWNlJztcblxubGV0IGRlZmF1bHRJZCA9IDA7XG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC40MC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWFwcHJvdmFsLWZsb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtBcHByb3ZhbEZsb3dBZGROb2RlVmlld1NlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSxcbiAgICAgICAgQXBwcm92YWxGbG93TWVzc2FnZXNDb21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0Q29tcG9uZW50LFxuICAgICAgICBHcmlkTGlzdFRpdGxlQmFyQ29tcG9uZW50LFxuICAgICAgICBHcmlkTGlzdFRpdGxlQmFyU3BhY2VyQ29tcG9uZW50LFxuICAgICAgICBOZ0lmLFxuICAgICAgICBBcHByb3ZhbEZsb3dUb29sYmFyQWN0aW9uc0NvbXBvbmVudCxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICAgICAgTXVsdGlJbnB1dENvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIEdyaWRMaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgICAgR3JpZExpc3RJdGVtVG9vbGJhckNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgR3JpZExpc3RJdGVtSW1hZ2VEaXJlY3RpdmUsXG4gICAgICAgIEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBJbGx1c3RyYXRlZE1lc3NhZ2VGaWdjYXB0aW9uQ29tcG9uZW50LFxuICAgICAgICBJbGx1c3RyYXRlZE1lc3NhZ2VUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGV4dERpcmVjdGl2ZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbEZsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogVGl0bGUgd2hpY2ggaXMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGFwcHJvdmFsIGZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHZhbHVlOiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB1c2VycyBvZiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB1c2VyRGF0YVNvdXJjZTogQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2U8QXBwcm92YWxVc2VyPjtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHdhdGNoZXJzIG9mIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJEYXRhU291cmNlOiBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZTxBcHByb3ZhbFVzZXI+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==