@acorex/platform 21.0.0-next.2 → 21.0.0-next.3

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 (69) hide show
  1. package/auth/index.d.ts +97 -238
  2. package/common/index.d.ts +778 -213
  3. package/core/index.d.ts +562 -433
  4. package/fesm2022/acorex-platform-auth.mjs +160 -200
  5. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-common.mjs +1012 -125
  7. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-core.mjs +685 -400
  9. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-domain.mjs +54 -11
  11. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-builder.mjs +412 -270
  13. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-components.mjs +2112 -3153
  15. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-layout-designer.mjs +7 -7
  17. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-layout-entity.mjs +756 -648
  19. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-layout-views.mjs +4 -4
  21. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  22. package/fesm2022/acorex-platform-layout-widget-core.mjs +248 -174
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  24. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs → acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs} +2 -2
  25. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +1 -0
  26. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-m8rHZP8L.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs} +2 -2
  27. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +1 -0
  28. package/fesm2022/acorex-platform-layout-widgets.mjs +3058 -1038
  29. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  30. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-mARj77Mr.mjs → acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs} +26 -5
  31. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +1 -0
  32. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-Cym8pq0v.mjs → acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs} +4 -5
  33. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +1 -0
  34. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +101 -0
  35. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +1 -0
  36. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs → acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs} +3 -3
  37. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +1 -0
  38. package/fesm2022/acorex-platform-themes-default.mjs +166 -30
  39. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  40. package/fesm2022/acorex-platform-themes-shared.mjs +27 -27
  41. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  42. package/layout/builder/index.d.ts +4 -1
  43. package/layout/components/index.d.ts +405 -327
  44. package/layout/designer/index.d.ts +3 -3
  45. package/layout/entity/index.d.ts +163 -108
  46. package/layout/widget-core/index.d.ts +39 -49
  47. package/layout/widgets/index.d.ts +368 -54
  48. package/package.json +5 -5
  49. package/themes/default/index.d.ts +15 -2
  50. package/themes/shared/index.d.ts +10 -10
  51. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs +0 -50
  52. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs.map +0 -1
  53. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs +0 -42
  54. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs.map +0 -1
  55. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs +0 -55
  56. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs.map +0 -1
  57. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs +0 -50
  58. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs.map +0 -1
  59. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs +0 -48
  60. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs.map +0 -1
  61. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs +0 -42
  62. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs.map +0 -1
  63. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs.map +0 -1
  64. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-m8rHZP8L.mjs.map +0 -1
  65. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-mARj77Mr.mjs.map +0 -1
  66. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-Cym8pq0v.mjs.map +0 -1
  67. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BTA6h7Xd.mjs +0 -101
  68. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BTA6h7Xd.mjs.map +0 -1
  69. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs","sources":["../tmp-esm2022/themes/default/lib/layouts/entity-layouts/entity-category/entity-category.component.js","../tmp-esm2022/themes/default/lib/layouts/entity-layouts/entity-master-toolbar-view/entity-master-toolbar-view.component.js","../tmp-esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.js"],"sourcesContent":["import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { afterNextRender, Component, computed, inject, input, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTreeViewComponent, AXTreeViewModule, } from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPRefreshEvent } from '@acorex/platform/common';\nimport { AXHighlightService } from '@acorex/platform/core';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutToolbarComponent, } from '@acorex/platform/layout/components';\nimport { AXPCategoryTreeService, } from '@acorex/platform/layout/entity';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/skeleton\";\nimport * as i3 from \"@acorex/components/search-box\";\nimport * as i4 from \"@acorex/components/button\";\nimport * as i5 from \"@acorex/components/dropdown\";\nimport * as i6 from \"@angular/common\";\nimport * as i7 from \"@acorex/core/translation\";\n//#region ---- Constants ----\nconst ROOT_NODE_ID = 'all';\nconst LOADING_DELAY_MS = 300;\nconst DEFAULT_TEXT_FIELD = 'title';\nconst DEFAULT_VALUE_FIELD = 'id';\n//#endregion\nexport class AXPEntityCategoryComponent {\n //#endregion\n //#region ---- Constructor & Lifecycle ----\n constructor() {\n //#region ---- Services & Dependencies ----\n this.translate = inject(AXTranslationService);\n this.workflow = inject(AXPWorkflowService);\n this.categoryTreeService = inject(AXPCategoryTreeService);\n this.highlightService = inject(AXHighlightService);\n //#endregion\n //#region ---- Component Inputs & View Queries ----\n this.vm = input.required(...(ngDevMode ? [{ debugName: \"vm\" }] : []));\n this.tree = viewChild('tree', ...(ngDevMode ? [{ debugName: \"tree\" }] : []));\n this.searchValue = input('', ...(ngDevMode ? [{ debugName: \"searchValue\" }] : []));\n // Tree view inputs with defaults\n this.selectMode = input('single', ...(ngDevMode ? [{ debugName: \"selectMode\" }] : []));\n this.selectionBehavior = input('intermediate', ...(ngDevMode ? [{ debugName: \"selectionBehavior\" }] : []));\n this.dragArea = input('handler', ...(ngDevMode ? [{ debugName: \"dragArea\" }] : []));\n this.dragBehavior = input('none', ...(ngDevMode ? [{ debugName: \"dragBehavior\" }] : []));\n this.showIcons = input(true, ...(ngDevMode ? [{ debugName: \"showIcons\" }] : []));\n this.showChildrenBadge = input(false, ...(ngDevMode ? [{ debugName: \"showChildrenBadge\" }] : []));\n this.expandedIcon = input('fa-solid fa-chevron-down', ...(ngDevMode ? [{ debugName: \"expandedIcon\" }] : []));\n this.collapsedIcon = input('fa-solid fa-chevron-right', ...(ngDevMode ? [{ debugName: \"collapsedIcon\" }] : []));\n this.indentSize = input(16, ...(ngDevMode ? [{ debugName: \"indentSize\" }] : []));\n this.look = input('default', ...(ngDevMode ? [{ debugName: \"look\" }] : []));\n this.searchWithChildren = input(true, ...(ngDevMode ? [{ debugName: \"searchWithChildren\" }] : [])); // Include children of search results\n //#endregion\n //#region ---- Component State ----\n this.isLoading = signal(true, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.isSearching = signal(false, ...(ngDevMode ? [{ debugName: \"isSearching\" }] : []));\n this.searchResultCount = signal(0, ...(ngDevMode ? [{ debugName: \"searchResultCount\" }] : []));\n this.currentSearchValue = signal('', ...(ngDevMode ? [{ debugName: \"currentSearchValue\" }] : []));\n this.resultsFoundText = signal('', ...(ngDevMode ? [{ debugName: \"resultsFoundText\" }] : []));\n //#endregion\n //#region ---- Private Properties ----\n this.loadingTimeoutId = null;\n this.treeData = null;\n this.treeConfig = null;\n this.matchingNodeIds = new Set();\n this.relevantNodeIds = new Set(); // For search filtering\n this.nodeDataCache = new Map(); // Cache parent data from search results\n this.expandedNodesBeforeSearch = [];\n this.nodesExpandedDuringSearch = [];\n this.currentSearchTerm = null;\n //#endregion\n //#region ---- Computed Properties ----\n this.textField = computed(() => this.vm().entityDef.category?.textField || DEFAULT_TEXT_FIELD, ...(ngDevMode ? [{ debugName: \"textField\" }] : []));\n this.valueField = computed(() => this.vm().entityDef.category?.valueField || DEFAULT_VALUE_FIELD, ...(ngDevMode ? [{ debugName: \"valueField\" }] : []));\n /**\n * Computed property to check if we should show the \"no search results\" empty state.\n * Returns true when search is active, not searching, and no results found.\n */\n this.showNoSearchResults = computed(() => {\n const searchValue = this.currentSearchValue().trim();\n const isSearching = this.isSearching();\n const resultCount = this.searchResultCount();\n return searchValue.length > 0 && !isSearching && resultCount === 0;\n }, ...(ngDevMode ? [{ debugName: \"showNoSearchResults\" }] : []));\n this.categoryEntityKey = computed(() => {\n const key = this.vm().entityDef.category?.entity;\n if (!key) {\n throw new Error('Category entity is not configured');\n }\n return key;\n }, ...(ngDevMode ? [{ debugName: \"categoryEntityKey\" }] : []));\n // protected toggleExpand(e: AXTreeViewNodeDoubleClickEvent) {\n // (e.component as AXTreeViewComponent).toggleNodeExpansion(String(e.node[this.valueField()] ?? ''));\n // }\n //#endregion\n //#region ---- Tree Data Source ----\n /**\n * Datasource callback for tree-view component.\n * Provides lazy loading support for tree nodes.\n */\n this.datasource = async (parentId) => {\n console.log('datasource', parentId);\n if (!this.isTreeInitialized()) {\n return [];\n }\n // Load root nodes if no parent ID provided\n if (!parentId) {\n return await this.loadRootNodes();\n }\n // Load children for the specified parent\n return await this.loadChildNodes(parentId);\n };\n afterNextRender(() => {\n this.initializeTree();\n });\n this.workflow.events$\n .pipe(ofType(AXPRefreshEvent))\n .pipe(takeUntilDestroyed())\n .subscribe((event) => {\n this.tree()?.reloadData();\n // this.tree()?.refresh();\n });\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Handles category search input changes - Uses server-side search for efficiency and reliability\n */\n async handleCategorySearchChange(event) {\n if (!this.isTreeInitialized()) {\n return;\n }\n const searchTerm = (event.value ?? '').trim().toLowerCase();\n const previousSearchTerm = this.currentSearchValue();\n // If search is cleared, reset tree\n if (!searchTerm) {\n if (previousSearchTerm || this.matchingNodeIds.size > 0) {\n this.currentSearchValue.set('');\n this.currentSearchTerm = null;\n await this.resetSearch();\n }\n return;\n }\n // For non-empty search, only process user interactions\n if (!event.isUserInteraction) {\n return;\n }\n // Prevent concurrent searches\n if (this.isSearching() && this.currentSearchTerm !== null) {\n if (this.currentSearchTerm === searchTerm) {\n return;\n }\n }\n this.currentSearchValue.set(event.value ?? '');\n this.currentSearchTerm = searchTerm;\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n // Store expanded nodes before starting a new search (only on first search)\n if (!previousSearchTerm && this.expandedNodesBeforeSearch.length === 0) {\n const expandedNodes = treeComponent.getExpandedNodes();\n this.expandedNodesBeforeSearch = expandedNodes\n .map((node) => String(node['id'] ?? ''))\n .filter((id) => id && id !== ROOT_NODE_ID);\n }\n // Collapse nodes from previous search before starting new search\n if (previousSearchTerm && this.nodesExpandedDuringSearch.length > 0) {\n const nodesToCollapse = [...this.nodesExpandedDuringSearch].reverse();\n this.nodesExpandedDuringSearch = [];\n for (const nodeId of nodesToCollapse) {\n // Only collapse if it wasn't originally expanded before search\n if (!this.expandedNodesBeforeSearch.includes(nodeId)) {\n try {\n treeComponent.collapseNode(nodeId);\n }\n catch {\n // Node might not exist anymore, ignore\n }\n }\n }\n }\n this.isSearching.set(true);\n try {\n // Step 1: Use server-side search to get matching items\n const searchResults = await this.categoryTreeService.searchCategories(searchTerm, this.treeData, this.treeConfig);\n // Check if search term changed during the API call\n if (this.currentSearchTerm !== searchTerm) {\n return;\n }\n if (!searchResults || searchResults.length === 0) {\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n this.searchResultCount.set(0);\n await this.updateTranslatedMessages(0);\n // Clear highlighting and reload tree to show all nodes\n this.highlightService.clear();\n await treeComponent.reloadData();\n return;\n }\n // Store matching node IDs from search results\n this.matchingNodeIds.clear();\n const valueField = this.valueField();\n searchResults.forEach((item) => {\n const nodeId = String(item[valueField] ?? '');\n if (nodeId) {\n this.matchingNodeIds.add(nodeId);\n }\n });\n const resultCount = searchResults.length;\n this.searchResultCount.set(resultCount);\n // Update translated messages\n await this.updateTranslatedMessages(resultCount);\n // Step 2: Collect parent IDs (builds relevantNodeIds for filtering)\n const parentsToExpand = await this.collectParentIds(searchResults);\n // Step 2.5: Collect children IDs if searchWithChildren is enabled\n if (this.searchWithChildren()) {\n await this.collectChildrenIds(searchResults);\n }\n // Step 3: Reload tree to apply filtering\n await treeComponent.reloadData();\n // Step 4: Expand root node\n if (!treeComponent.isNodeExpanded(ROOT_NODE_ID)) {\n try {\n await treeComponent.expandNode(ROOT_NODE_ID);\n this.nodesExpandedDuringSearch.push(ROOT_NODE_ID);\n }\n catch {\n // Root might not exist\n }\n }\n // Step 4: Expand all parent nodes in order (from root to leaves)\n // Sort parents by their depth to expand in correct order\n const sortedParents = await this.sortParentsByDepth(Array.from(parentsToExpand));\n for (const parentId of sortedParents) {\n // Only expand if not already expanded\n if (!treeComponent.isNodeExpanded(parentId)) {\n try {\n await treeComponent.expandNode(parentId);\n this.nodesExpandedDuringSearch.push(parentId);\n // Small delay to prevent overwhelming the tree component\n await new Promise((resolve) => setTimeout(resolve, 10));\n }\n catch {\n // Node might not exist, ignore\n }\n }\n }\n // Step 5: Apply highlighting after tree is rendered\n // Use setTimeout to ensure DOM is updated after tree reload\n setTimeout(() => {\n if (this.currentSearchValue().trim()) {\n this.highlightService.highlight('ax-tree-view .ax-truncate', this.currentSearchValue().trim());\n }\n }, 100);\n }\n catch (error) {\n console.error('Error searching categories:', error);\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n this.searchResultCount.set(0);\n this.highlightService.clear();\n // Reload tree to clear any filters\n const treeComponent = this.tree();\n if (treeComponent) {\n await treeComponent.reloadData();\n }\n }\n finally {\n if (this.currentSearchTerm === searchTerm) {\n this.currentSearchTerm = null;\n }\n this.isSearching.set(false);\n }\n }\n /**\n * Collects all parent IDs for the given search results\n * Handles both nested 'parent' object and 'parentId' field in search results\n * Recursively fetches parent nodes to build the full parent chain\n */\n async collectParentIds(items) {\n const parentsToExpand = new Set();\n const valueField = this.valueField();\n const parentKey = this.treeData?.categoryEntityDef?.parentKey || 'parentId';\n // Build relevantNodeIds = matching nodes + all parents\n this.relevantNodeIds.clear();\n this.matchingNodeIds.forEach((id) => this.relevantNodeIds.add(id));\n // Recursively extract all parent IDs\n const extractParentIds = async (item) => {\n // First, try to get parent from nested 'parent' object (if available)\n const parent = item['parent'];\n if (parent) {\n const parentId = String(parent[valueField] ?? parent['id'] ?? '');\n if (parentId && parentId !== ROOT_NODE_ID) {\n parentsToExpand.add(parentId);\n this.relevantNodeIds.add(parentId); // Add to filter set\n this.nodeDataCache.set(parentId, parent);\n await extractParentIds(parent);\n }\n }\n else {\n // Fallback: use parentId field and fetch parent from server\n // Try both parentKey from entity definition and common 'parentId' field\n const parentIdValue = item[parentKey] ?? item['parentId'];\n if (parentIdValue) {\n const parentId = String(parentIdValue);\n if (parentId && parentId !== ROOT_NODE_ID) {\n // Add to sets first\n parentsToExpand.add(parentId);\n this.relevantNodeIds.add(parentId);\n // Fetch parent from server if not already cached\n if (!this.nodeDataCache.has(parentId)) {\n const parentItem = await this.fetchItemById(parentId);\n if (parentItem) {\n this.nodeDataCache.set(parentId, parentItem);\n // Recursively fetch parent's parent\n await extractParentIds(parentItem);\n }\n }\n else {\n // Parent already in cache, recursively process it\n const cachedParent = this.nodeDataCache.get(parentId);\n if (cachedParent) {\n await extractParentIds(cachedParent);\n }\n }\n }\n }\n }\n };\n // Process all items\n for (const item of items) {\n await extractParentIds(item);\n }\n return parentsToExpand;\n }\n /**\n * Collects children IDs for matching search results recursively\n * Adds all descendants (children, grandchildren, etc.) to relevantNodeIds so they appear in the filtered tree\n */\n async collectChildrenIds(items) {\n if (!this.treeData?.categoryEntityQueryFunc || !this.treeConfig) {\n return;\n }\n const valueField = this.valueField();\n const parentKey = this.treeData.categoryEntityDef?.parentKey;\n if (!parentKey) {\n return;\n }\n // For each matching node, recursively fetch all its descendants\n for (const item of items) {\n const nodeId = String(item[valueField] ?? '');\n if (!nodeId || nodeId === ROOT_NODE_ID) {\n continue;\n }\n await this.collectChildrenRecursively(nodeId, valueField, parentKey);\n }\n }\n /**\n * Recursively collects all descendant IDs for a given node\n */\n async collectChildrenRecursively(nodeId, valueField, parentKey) {\n if (!this.treeData?.categoryEntityQueryFunc) {\n return;\n }\n try {\n // Fetch children for this node\n const event = {\n ...this.treeData.basicQueryEvent,\n filter: {\n field: parentKey,\n value: nodeId,\n operator: { type: 'equal' },\n },\n };\n const res = await this.treeData.categoryEntityQueryFunc(event);\n if (res?.items && res.items.length > 0) {\n // Add children IDs to relevantNodeIds so they appear in filtered tree\n for (const child of res.items) {\n const childId = String(child[valueField] ?? '');\n if (childId && childId !== ROOT_NODE_ID) {\n this.relevantNodeIds.add(childId);\n // Cache child data\n this.nodeDataCache.set(childId, child);\n // Recursively fetch children of this child\n await this.collectChildrenRecursively(childId, valueField, parentKey);\n }\n }\n }\n }\n catch (error) {\n console.error(`Error fetching children for node ${nodeId}:`, error);\n }\n }\n /**\n * Fetches a single item by ID from the server\n */\n async fetchItemById(id) {\n if (!this.treeData?.categoryEntityQueryFunc) {\n return null;\n }\n try {\n const valueField = this.valueField();\n const event = {\n ...this.treeData.basicQueryEvent,\n filter: {\n field: valueField,\n value: id,\n operator: { type: 'equal' },\n },\n };\n const res = await this.treeData.categoryEntityQueryFunc(event);\n return res?.items?.[0] ?? null;\n }\n catch (error) {\n console.error('Error fetching item by ID:', error);\n return null;\n }\n }\n /**\n * Sorts parent IDs by their depth (root first, leaves last)\n * Uses cached data from collectParentIds\n */\n async sortParentsByDepth(parentIds) {\n const parentKey = this.treeData?.categoryEntityDef?.parentKey;\n if (!parentKey || parentIds.length === 0) {\n return parentIds;\n }\n // Build depth map using cached data\n const depthMap = new Map();\n for (const parentId of parentIds) {\n if (depthMap.has(parentId)) {\n continue;\n }\n let depth = 0;\n let currentId = parentId;\n const visited = new Set();\n while (currentId && currentId !== ROOT_NODE_ID && !visited.has(currentId)) {\n visited.add(currentId);\n depth++;\n // Use nodeDataCache which was populated by collectParentIds\n const item = this.nodeDataCache.get(currentId);\n if (item) {\n currentId = item[parentKey] ? String(item[parentKey]) : null;\n }\n else {\n break;\n }\n }\n depthMap.set(parentId, depth);\n }\n // Sort by depth (lower depth = closer to root = expand first)\n return parentIds.sort((a, b) => {\n const depthA = depthMap.get(a) ?? 0;\n const depthB = depthMap.get(b) ?? 0;\n return depthA - depthB;\n });\n }\n /**\n * Updates translated messages for search results\n */\n async updateTranslatedMessages(resultCount) {\n if (resultCount > 0) {\n const key = resultCount === 1\n ? '@general:terms.interface.category.search.results-found.singular'\n : '@general:terms.interface.category.search.results-found.plural';\n const text = await this.translate.translateAsync(key, { params: { count: resultCount } });\n this.resultsFoundText.set(text);\n }\n else {\n this.resultsFoundText.set('');\n }\n }\n /**\n * Resets search state and restores tree to original expanded state\n */\n async resetSearch() {\n this.searchResultCount.set(0);\n this.resultsFoundText.set('');\n this.currentSearchTerm = null;\n this.isSearching.set(false);\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n this.nodeDataCache.clear();\n // Clear highlighting\n this.highlightService.clear();\n const treeComponent = this.tree();\n if (!treeComponent) {\n this.expandedNodesBeforeSearch = [];\n this.nodesExpandedDuringSearch = [];\n return;\n }\n // Reload tree to show all nodes (no filtering)\n await treeComponent.reloadData();\n // Collapse nodes that were expanded during search (in reverse order - leaves first)\n const nodesToCollapse = [...this.nodesExpandedDuringSearch].reverse();\n this.nodesExpandedDuringSearch = [];\n for (const nodeId of nodesToCollapse) {\n // Only collapse if it wasn't originally expanded before search\n if (!this.expandedNodesBeforeSearch.includes(nodeId)) {\n try {\n treeComponent.collapseNode(nodeId);\n }\n catch {\n // Node might not exist anymore, ignore\n }\n }\n }\n // Clear the stored expanded nodes\n this.expandedNodesBeforeSearch = [];\n }\n /**\n * Checks if a node matches the current search term\n */\n isMatchingNode(nodeId) {\n return this.matchingNodeIds.has(nodeId);\n }\n /**\n * Handles node click events to apply category filters\n */\n handleNodeClick(node) {\n const nodeData = this.extractNodeData(node);\n const applyConditions = this.vm().entityDef.category?.applyConditions || [];\n const categoryFilters = this.buildCategoryFilters(nodeData, applyConditions);\n const viewFilters = this.buildViewFilters();\n this.vm().dataSource.filter({\n filters: [...viewFilters, ...categoryFilters],\n logic: 'and',\n });\n this.vm().dataSource.refresh();\n }\n /**\n * Handles node toggle events (expansion/collapse)\n */\n async onNodeToggle(_event) {\n // Tree component handles lazy loading via datasource callback\n }\n //#endregion\n //#region ---- CRUD Operations ----\n /**\n * Creates a new root category node\n */\n async handleCreateRootClick(event) {\n this.preventDefaultAndStopPropagation(event);\n try {\n const context = await this.executeCreateWorkflow(undefined);\n await this.handleCreateResult(context, undefined);\n }\n catch (error) {\n console.error('Error creating root category:', error);\n }\n }\n /**\n * Creates a new child category under the given parent node\n */\n async handleCreateChildClick(node, event) {\n this.preventDefaultAndStopPropagation(event);\n try {\n const parentId = this.extractNodeId(node);\n const context = await this.executeCreateWorkflow(parentId);\n await this.handleCreateResult(context, parentId);\n }\n catch (error) {\n console.error('Error creating child category:', error);\n }\n }\n /**\n * Updates an existing category node\n */\n async handleEditNodeClick(node, event) {\n this.preventDefaultAndStopPropagation(event);\n try {\n const nodeData = this.extractNodeData(node);\n const context = await this.executeModifyWorkflow(nodeData);\n await this.handleModifyResult(context, node);\n }\n catch (error) {\n console.error('Error editing category:', error);\n }\n }\n /**\n * Deletes a category node\n */\n async handleDeleteNodeClick(node, event) {\n this.preventDefaultAndStopPropagation(event);\n try {\n const nodeData = this.extractNodeData(node);\n const context = await this.executeDeleteWorkflow(nodeData);\n await this.handleDeleteResult(context, node);\n }\n catch (error) {\n console.error('Error deleting category:', error);\n }\n }\n //#endregion\n //#region ---- Private Tree Management Methods ----\n /**\n * Initializes the category tree data structure\n */\n async initializeTree() {\n this.setLoadingWithDelay(true);\n try {\n const entityKey = this.categoryEntityKey();\n this.treeConfig = {\n entityKey,\n textField: this.textField(),\n valueField: this.valueField(),\n };\n this.treeData = await this.categoryTreeService.initializeCategoryTree(this.treeConfig);\n if (!this.treeData) {\n this.clearLoadingState();\n return;\n }\n // Set parent key from entity definition\n if (this.treeData.categoryEntityDef?.parentKey) {\n this.treeConfig.parentKey = this.treeData.categoryEntityDef.parentKey;\n }\n }\n catch (error) {\n console.error('Error loading categories:', error);\n }\n finally {\n this.clearLoadingState();\n }\n }\n /**\n * Loads root nodes for the tree\n */\n async loadRootNodes() {\n if (!this.isTreeInitialized()) {\n return [];\n }\n // Load root categories\n const items = await this.categoryTreeService.loadRootCategories(this.treeData, this.treeConfig);\n if (!items) {\n return [];\n }\n const rootNode = await this.categoryTreeService.createRootNode(items, this.treeConfig);\n // Filter root's children when search is active\n if (this.relevantNodeIds.size > 0 && rootNode['children']) {\n rootNode['children'] = rootNode['children'].filter((child) => {\n const childId = String(child['id'] ?? '');\n return this.relevantNodeIds.has(childId);\n });\n rootNode['childrenCount'] = rootNode['children'].length;\n }\n return [rootNode];\n }\n /**\n * Loads child nodes for a given parent ID\n */\n async loadChildNodes(parentId) {\n if (!this.isTreeInitialized()) {\n return [];\n }\n // Create minimal node object - loadChildren only needs node.id\n const targetNode = {\n id: parentId,\n };\n let children = await this.categoryTreeService.loadChildren(targetNode, this.treeData, this.treeConfig);\n // Filter children when search is active\n if (this.relevantNodeIds.size > 0) {\n children = children.filter((child) => {\n const childId = String(child['id'] ?? '');\n return this.relevantNodeIds.has(childId);\n });\n }\n return children;\n }\n /**\n * Refreshes the tree view component\n */\n refreshTree() {\n const treeComponent = this.tree();\n if (treeComponent) {\n treeComponent.refresh();\n }\n }\n /**\n * Refreshes tree after CRUD operations\n */\n async refreshAfterChange(parentId) {\n this.refreshTree();\n }\n /**\n * Adds a new node to the tree after create operation\n */\n async addNodeToTree(entityData, parentId) {\n if (!this.isTreeInitialized()) {\n return;\n }\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n const newNode = this.categoryTreeService.convertToTreeNode(entityData, this.treeConfig);\n if (parentId) {\n await this.addChildNode(treeComponent, parentId, newNode);\n }\n else {\n await this.addRootNode(treeComponent, newNode);\n }\n }\n /**\n * Adds a child node to a parent node\n */\n async addChildNode(treeComponent, parentId, newNode) {\n const parentNode = treeComponent.findNode(parentId);\n if (!parentNode) {\n await this.refreshAfterChange(parentId);\n return;\n }\n if (!treeComponent.isNodeExpanded(parentId)) {\n await treeComponent.expandNode(parentId);\n }\n treeComponent.addChild(parentId, newNode);\n }\n /**\n * Adds a root node to the tree\n */\n async addRootNode(treeComponent, newNode) {\n const rootNode = treeComponent.findNode(ROOT_NODE_ID);\n if (!rootNode) {\n await this.refreshAfterChange();\n return;\n }\n if (!treeComponent.isNodeExpanded(ROOT_NODE_ID)) {\n await treeComponent.expandNode(ROOT_NODE_ID);\n }\n treeComponent.addChild(ROOT_NODE_ID, newNode);\n }\n /**\n * Updates an existing node in the tree after edit operation\n */\n async updateNodeInTree(nodeId, entityData) {\n if (!this.isTreeInitialized()) {\n return;\n }\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n const existingNode = treeComponent.findNode(nodeId);\n if (!existingNode) {\n await this.refreshNodeParent(entityData);\n return;\n }\n // Check if parent changed\n const parentKey = this.treeData?.categoryEntityDef?.parentKey;\n let newParentId = undefined;\n if (parentKey && entityData[parentKey]) {\n const parentValue = String(entityData[parentKey]);\n // 'all' means root, so treat it as undefined\n newParentId = parentValue !== 'all' && parentValue !== '' ? parentValue : undefined;\n }\n const currentParent = treeComponent.getParent(nodeId);\n const currentParentId = currentParent ? String(currentParent['id'] ?? '') : undefined;\n // Normalize current parent: 'all' means root (undefined)\n const normalizedCurrentParentId = currentParentId === 'all' || currentParentId === '' ? undefined : currentParentId;\n // Handle parent change: move node to new parent if parent changed\n if (newParentId !== normalizedCurrentParentId) {\n // If parent changed, move the node first\n const moved = treeComponent.moveNode(nodeId, newParentId);\n if (!moved) {\n // If move failed, refresh the tree to ensure consistency\n await this.refreshNodeParent(entityData);\n return;\n }\n // After moving, we need to ensure the new parent is expanded\n if (newParentId) {\n if (!treeComponent.isNodeExpanded(newParentId)) {\n await treeComponent.expandNode(newParentId);\n }\n }\n else {\n // Moving to root - ensure root is expanded\n if (!treeComponent.isNodeExpanded(ROOT_NODE_ID)) {\n await treeComponent.expandNode(ROOT_NODE_ID);\n }\n }\n }\n // Update node properties (title, data, etc.)\n const updatedNode = this.categoryTreeService.convertToTreeNode(entityData, this.treeConfig);\n const updates = {\n ['title']: updatedNode['title'],\n ['data']: updatedNode['data'],\n ['childrenCount']: updatedNode['childrenCount'],\n ['icon']: updatedNode['icon'],\n };\n treeComponent.editNode(nodeId, updates);\n }\n /**\n * Removes a node from the tree after delete operation\n */\n async removeNodeFromTree(nodeId) {\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n const nodeToDelete = treeComponent.findNode(nodeId);\n if (!nodeToDelete) {\n await this.refreshAfterChange();\n return;\n }\n treeComponent.removeNode(nodeId);\n }\n //#endregion\n //#region ---- Workflow Execution Methods ----\n /**\n * Executes the create entity workflow\n */\n async executeCreateWorkflow(parentId) {\n const entityKey = this.categoryEntityKey();\n const workflowData = {};\n if (parentId && this.treeData?.categoryEntityDef?.parentKey) {\n workflowData[this.treeData.categoryEntityDef.parentKey] = parentId;\n }\n return await this.workflow.execute('create-entity', {\n entity: entityKey,\n data: Object.keys(workflowData).length > 0 ? workflowData : undefined,\n options: { process: { redirect: false, canCreateNewOne: !!parentId } },\n });\n }\n /**\n * Executes the modify entity workflow\n */\n async executeModifyWorkflow(nodeData) {\n return await this.workflow.execute('quick-modify-entity', {\n entity: this.categoryEntityKey(),\n data: nodeData,\n options: { layout: { size: 'md' } },\n });\n }\n /**\n * Executes the delete entity workflow\n */\n async executeDeleteWorkflow(nodeData) {\n return await this.workflow.execute('delete-entity', {\n entity: this.categoryEntityKey(),\n data: nodeData,\n options: { process: { showResult: true } },\n });\n }\n /**\n * Handles the result of a create operation\n */\n async handleCreateResult(context, parentId) {\n const result = context.getOutput('result');\n if (!result || !this.isTreeInitialized()) {\n await this.refreshAfterChange(parentId);\n return;\n }\n const newEntityData = context.getVariable('data');\n if (newEntityData) {\n await this.addNodeToTree(newEntityData, parentId);\n }\n else {\n await this.refreshAfterChange(parentId);\n }\n }\n /**\n * Handles the result of a modify operation\n */\n async handleModifyResult(context, node) {\n const result = context.getOutput('result');\n if (!result || !this.isTreeInitialized()) {\n await this.refreshNodeParent(this.extractNodeData(node));\n return;\n }\n const updatedEntityData = context.getVariable('data');\n if (updatedEntityData) {\n await this.updateNodeInTree(this.extractNodeId(node), updatedEntityData);\n }\n else {\n await this.refreshNodeParent(this.extractNodeData(node));\n }\n }\n /**\n * Handles the result of a delete operation\n */\n async handleDeleteResult(context, node) {\n const result = context.getOutput('result');\n if (result) {\n await this.removeNodeFromTree(this.extractNodeId(node));\n }\n else {\n await this.refreshNodeParent(this.extractNodeData(node));\n }\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Checks if tree data and config are initialized\n */\n isTreeInitialized() {\n return !!(this.treeData && this.treeConfig);\n }\n /**\n * Extracts node data from a tree node\n */\n extractNodeData(node) {\n return (node['data'] || node);\n }\n /**\n * Extracts node ID from a tree node\n */\n extractNodeId(node) {\n return String(node['id'] ?? '');\n }\n /**\n * Builds category filters from node data and apply conditions\n */\n buildCategoryFilters(nodeData, applyConditions) {\n return applyConditions\n .map((condition) => {\n const value = nodeData[condition.value];\n if (value === 'all' || value == null) {\n return null;\n }\n return {\n field: condition.name,\n value,\n operator: condition.operator,\n };\n })\n .filter((item) => item !== null);\n }\n /**\n * Builds view filters from view conditions\n */\n buildViewFilters() {\n return this.vm()\n .view()\n .conditions.map((condition) => ({ ...condition, field: condition.name }));\n }\n /**\n * Refreshes the parent node of the given entity data\n */\n async refreshNodeParent(entityData) {\n const parentKey = this.treeData?.categoryEntityDef?.parentKey;\n const parentId = parentKey && entityData[parentKey] ? entityData[parentKey] : undefined;\n await this.refreshAfterChange(parentId);\n }\n /**\n * Prevents default behavior and stops event propagation\n */\n preventDefaultAndStopPropagation(event) {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n }\n //#endregion\n //#region ---- Loading State Management ----\n /**\n * Sets loading state with delay to avoid flickering for fast responses\n */\n setLoadingWithDelay(loading) {\n if (!loading) {\n return;\n }\n if (this.loadingTimeoutId) {\n clearTimeout(this.loadingTimeoutId);\n }\n this.loadingTimeoutId = setTimeout(() => {\n this.isLoading.set(true);\n this.loadingTimeoutId = null;\n }, LOADING_DELAY_MS);\n }\n /**\n * Clears loading state and cancels any pending timeout\n */\n clearLoadingState() {\n if (this.loadingTimeoutId) {\n clearTimeout(this.loadingTimeoutId);\n this.loadingTimeoutId = null;\n }\n this.isLoading.set(false);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXPEntityCategoryComponent, isStandalone: true, selector: \"axp-entity-category\", inputs: { vm: { classPropertyName: \"vm\", publicName: \"vm\", isSignal: true, isRequired: true, transformFunction: null }, searchValue: { classPropertyName: \"searchValue\", publicName: \"searchValue\", isSignal: true, isRequired: false, transformFunction: null }, selectMode: { classPropertyName: \"selectMode\", publicName: \"selectMode\", isSignal: true, isRequired: false, transformFunction: null }, selectionBehavior: { classPropertyName: \"selectionBehavior\", publicName: \"selectionBehavior\", isSignal: true, isRequired: false, transformFunction: null }, dragArea: { classPropertyName: \"dragArea\", publicName: \"dragArea\", isSignal: true, isRequired: false, transformFunction: null }, dragBehavior: { classPropertyName: \"dragBehavior\", publicName: \"dragBehavior\", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: \"showIcons\", publicName: \"showIcons\", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: \"showChildrenBadge\", publicName: \"showChildrenBadge\", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: \"expandedIcon\", publicName: \"expandedIcon\", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: \"collapsedIcon\", publicName: \"collapsedIcon\", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: \"indentSize\", publicName: \"indentSize\", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: true, isRequired: false, transformFunction: null }, searchWithChildren: { classPropertyName: \"searchWithChildren\", publicName: \"searchWithChildren\", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: \"tree\", first: true, predicate: [\"tree\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<axp-layout-header>\\n <axp-layout-title>{{\\n vm().entityDef.category?.title || '@general:terms.classification.category' | translate | async\\n }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-1 ax-w-full\\\">\\n <ax-search-box\\n (onValueChanged)=\\\"handleCategorySearchChange($event)\\\"\\n [delayTime]=\\\"300\\\"\\n [placeholder]=\\\"'@general:terms.interface.category.search.placeholder' | translate | async\\\"\\n >\\n </ax-search-box>\\n @if (isSearching() && currentSearchValue().trim()) {\\n <div class=\\\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\\\">\\n <span>{{ '@general:terms.interface.category.search.searching' | translate | async }}</span>\\n </div>\\n } @else if (currentSearchValue().trim() && !isSearching()) {\\n <div class=\\\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\\\">\\n @if (searchResultCount() > 0) {\\n <span>{{ resultsFoundText() }}</span>\\n }\\n </div>\\n }\\n </div>\\n </axp-layout-toolbar>\\n</axp-layout-header>\\n<axp-layout-content>\\n @if (isLoading()) {\\n <div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-3\\\">\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n </div>\\n } @else if (showNoSearchResults()) {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-search\\\"\\n [title]=\\\"'@general:terms.interface.category.search.no-results-found.title'\\\"\\n [description]=\\\"'@general:terms.interface.category.search.no-results-found.description'\\\"\\n >\\n </axp-state-message>\\n </div>\\n } @else if (treeData) {\\n <div class=\\\"ax-px-4 ax-max-h-[calc(100vh-250px)] ax-overflow-auto\\\">\\n <ax-tree-view\\n [datasource]=\\\"datasource\\\"\\n [selectMode]=\\\"selectMode()\\\"\\n [selectionBehavior]=\\\"selectionBehavior()\\\"\\n [dragArea]=\\\"dragArea()\\\"\\n [dragBehavior]=\\\"dragBehavior()\\\"\\n [showIcons]=\\\"showIcons()\\\"\\n [showChildrenBadge]=\\\"showChildrenBadge()\\\"\\n [expandedIcon]=\\\"expandedIcon()\\\"\\n [collapsedIcon]=\\\"collapsedIcon()\\\"\\n [indentSize]=\\\"indentSize()\\\"\\n [look]=\\\"look()\\\"\\n [titleField]=\\\"textField()\\\"\\n [idField]=\\\"valueField()\\\"\\n [expandOnDoubleClick]=\\\"true\\\"\\n [nodeTemplate]=\\\"itemTemplate\\\"\\n (onNodeToggle)=\\\"onNodeToggle($event)\\\"\\n (onNodeClick)=\\\"handleNodeClick($event.node)\\\"\\n #tree\\n >\\n </ax-tree-view>\\n </div>\\n } @else {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-folder-open\\\"\\n [title]=\\\"'@general:terms.interface.category.search.no-records.title'\\\"\\n [description]=\\\"'@general:terms.interface.category.search.no-records.description'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n (onClick)=\\\"handleCreateRootClick($event)\\\"\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"'@general:actions.add-new.title' | translate | async\\\"\\n >\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n </axp-state-message>\\n </div>\\n }\\n\\n <ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let item = node.data || node;\\n @let textField = vm().entityDef.category?.textField || 'title';\\n @let valueField = vm().entityDef.category?.valueField || 'id';\\n @let itemId = item[valueField] || node.id;\\n @let itemTitle = item[textField] || node.title;\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-2 ax-overflow-hidden ax-py-1\\\">\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 ax-min-w-0\\\">\\n <ax-icon\\n class=\\\"fas fa-folder\\\"\\n [style.color]=\\\"item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\\\"\\n ></ax-icon>\\n <span class=\\\"ax-truncate\\\">{{ itemTitle }}</span>\\n </div>\\n @if (itemId && itemId !== 'all') {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n <ax-button class=\\\"ax-xs\\\" color=\\\"default\\\" look=\\\"blank\\\" (onClick)=\\\"$event.nativeEvent.stopPropagation()\\\">\\n <ax-icon class=\\\"fas fa-ellipsis-v\\\"></ax-icon>\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n (onClick)=\\\"handleCreateChildClick(node, $event)\\\"\\n look=\\\"blank\\\"\\n color=\\\"default\\\"\\n text=\\\"Add New Child\\\"\\n >\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item (onClick)=\\\"handleEditNodeClick(node, $event)\\\" look=\\\"blank\\\" text=\\\"Edit\\\">\\n <ax-icon class=\\\"fas fa-pen\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item\\n (onClick)=\\\"handleDeleteNodeClick(node, $event)\\\"\\n color=\\\"danger\\\"\\n look=\\\"blank\\\"\\n text=\\\"Delete\\\"\\n >\\n <ax-icon class=\\\"fas fa-trash\\\"></ax-icon>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n } @else if (itemId === 'all') {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n <ax-button class=\\\"ax-xs\\\" (onClick)=\\\"handleCreateRootClick($event)\\\" look=\\\"blank\\\" color=\\\"default\\\">\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </ng-template>\\n</axp-layout-content>\\n\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"ngmodule\", type: AXTreeViewModule }, { kind: \"component\", type: AXTreeViewComponent, selector: \"ax-tree-view\", inputs: [\"datasource\", \"selectMode\", \"selectionBehavior\", \"dragArea\", \"dragBehavior\", \"showIcons\", \"showChildrenBadge\", \"expandedIcon\", \"collapsedIcon\", \"indentSize\", \"look\", \"nodeTemplate\", \"idField\", \"titleField\", \"tooltipField\", \"iconField\", \"expandedField\", \"selectedField\", \"indeterminateField\", \"disabledField\", \"hiddenField\", \"childrenField\", \"childrenCountField\", \"dataField\", \"inheritDisabled\", \"expandOnDoubleClick\"], outputs: [\"datasourceChange\", \"onBeforeDrop\", \"onNodeToggle\", \"onNodeSelect\", \"onNodeDoubleClick\", \"onNodeClick\", \"onSelectionChange\", \"onOrderChange\", \"onMoveChange\", \"onItemsChange\"] }, { kind: \"ngmodule\", type: AXSkeletonModule }, { kind: \"component\", type: i2.AXSkeletonComponent, selector: \"ax-skeleton\", inputs: [\"animated\"] }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"ngmodule\", type: AXSearchBoxModule }, { kind: \"component\", type: i3.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\", \"autoSearch\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"component\", type: AXPThemeLayoutHeaderComponent, selector: \"axp-layout-header\" }, { kind: \"component\", type: AXPThemeLayoutToolbarComponent, selector: \"axp-layout-toolbar\" }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i4.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: i4.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i4.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\", \"closeParentOnClick\", \"lockOnLoading\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i5.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"pipe\", type: i6.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i7.AXTranslatorPipe, name: \"translate\" }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityCategoryComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-entity-category', standalone: true, encapsulation: ViewEncapsulation.None, imports: [\n CommonModule,\n AXDecoratorModule,\n AXTreeViewModule,\n AXTreeViewComponent,\n AXSkeletonModule,\n AXPThemeLayoutBlockComponent,\n AXSearchBoxModule,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n AXTranslationModule,\n AXButtonModule,\n AXDropdownModule,\n AXPStateMessageComponent,\n ], template: \"<axp-layout-header>\\n <axp-layout-title>{{\\n vm().entityDef.category?.title || '@general:terms.classification.category' | translate | async\\n }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-1 ax-w-full\\\">\\n <ax-search-box\\n (onValueChanged)=\\\"handleCategorySearchChange($event)\\\"\\n [delayTime]=\\\"300\\\"\\n [placeholder]=\\\"'@general:terms.interface.category.search.placeholder' | translate | async\\\"\\n >\\n </ax-search-box>\\n @if (isSearching() && currentSearchValue().trim()) {\\n <div class=\\\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\\\">\\n <span>{{ '@general:terms.interface.category.search.searching' | translate | async }}</span>\\n </div>\\n } @else if (currentSearchValue().trim() && !isSearching()) {\\n <div class=\\\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\\\">\\n @if (searchResultCount() > 0) {\\n <span>{{ resultsFoundText() }}</span>\\n }\\n </div>\\n }\\n </div>\\n </axp-layout-toolbar>\\n</axp-layout-header>\\n<axp-layout-content>\\n @if (isLoading()) {\\n <div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-3\\\">\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n </div>\\n } @else if (showNoSearchResults()) {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-search\\\"\\n [title]=\\\"'@general:terms.interface.category.search.no-results-found.title'\\\"\\n [description]=\\\"'@general:terms.interface.category.search.no-results-found.description'\\\"\\n >\\n </axp-state-message>\\n </div>\\n } @else if (treeData) {\\n <div class=\\\"ax-px-4 ax-max-h-[calc(100vh-250px)] ax-overflow-auto\\\">\\n <ax-tree-view\\n [datasource]=\\\"datasource\\\"\\n [selectMode]=\\\"selectMode()\\\"\\n [selectionBehavior]=\\\"selectionBehavior()\\\"\\n [dragArea]=\\\"dragArea()\\\"\\n [dragBehavior]=\\\"dragBehavior()\\\"\\n [showIcons]=\\\"showIcons()\\\"\\n [showChildrenBadge]=\\\"showChildrenBadge()\\\"\\n [expandedIcon]=\\\"expandedIcon()\\\"\\n [collapsedIcon]=\\\"collapsedIcon()\\\"\\n [indentSize]=\\\"indentSize()\\\"\\n [look]=\\\"look()\\\"\\n [titleField]=\\\"textField()\\\"\\n [idField]=\\\"valueField()\\\"\\n [expandOnDoubleClick]=\\\"true\\\"\\n [nodeTemplate]=\\\"itemTemplate\\\"\\n (onNodeToggle)=\\\"onNodeToggle($event)\\\"\\n (onNodeClick)=\\\"handleNodeClick($event.node)\\\"\\n #tree\\n >\\n </ax-tree-view>\\n </div>\\n } @else {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-folder-open\\\"\\n [title]=\\\"'@general:terms.interface.category.search.no-records.title'\\\"\\n [description]=\\\"'@general:terms.interface.category.search.no-records.description'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n (onClick)=\\\"handleCreateRootClick($event)\\\"\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"'@general:actions.add-new.title' | translate | async\\\"\\n >\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n </axp-state-message>\\n </div>\\n }\\n\\n <ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let item = node.data || node;\\n @let textField = vm().entityDef.category?.textField || 'title';\\n @let valueField = vm().entityDef.category?.valueField || 'id';\\n @let itemId = item[valueField] || node.id;\\n @let itemTitle = item[textField] || node.title;\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-2 ax-overflow-hidden ax-py-1\\\">\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 ax-min-w-0\\\">\\n <ax-icon\\n class=\\\"fas fa-folder\\\"\\n [style.color]=\\\"item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\\\"\\n ></ax-icon>\\n <span class=\\\"ax-truncate\\\">{{ itemTitle }}</span>\\n </div>\\n @if (itemId && itemId !== 'all') {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n <ax-button class=\\\"ax-xs\\\" color=\\\"default\\\" look=\\\"blank\\\" (onClick)=\\\"$event.nativeEvent.stopPropagation()\\\">\\n <ax-icon class=\\\"fas fa-ellipsis-v\\\"></ax-icon>\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n (onClick)=\\\"handleCreateChildClick(node, $event)\\\"\\n look=\\\"blank\\\"\\n color=\\\"default\\\"\\n text=\\\"Add New Child\\\"\\n >\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item (onClick)=\\\"handleEditNodeClick(node, $event)\\\" look=\\\"blank\\\" text=\\\"Edit\\\">\\n <ax-icon class=\\\"fas fa-pen\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item\\n (onClick)=\\\"handleDeleteNodeClick(node, $event)\\\"\\n color=\\\"danger\\\"\\n look=\\\"blank\\\"\\n text=\\\"Delete\\\"\\n >\\n <ax-icon class=\\\"fas fa-trash\\\"></ax-icon>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n } @else if (itemId === 'all') {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n <ax-button class=\\\"ax-xs\\\" (onClick)=\\\"handleCreateRootClick($event)\\\" look=\\\"blank\\\" color=\\\"default\\\">\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </ng-template>\\n</axp-layout-content>\\n\" }]\n }], ctorParameters: () => [], propDecorators: { vm: [{ type: i0.Input, args: [{ isSignal: true, alias: \"vm\", required: true }] }], tree: [{ type: i0.ViewChild, args: ['tree', { isSignal: true }] }], searchValue: [{ type: i0.Input, args: [{ isSignal: true, alias: \"searchValue\", required: false }] }], selectMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"selectMode\", required: false }] }], selectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: \"selectionBehavior\", required: false }] }], dragArea: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragArea\", required: false }] }], dragBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragBehavior\", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showIcons\", required: false }] }], showChildrenBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showChildrenBadge\", required: false }] }], expandedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"expandedIcon\", required: false }] }], collapsedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"collapsedIcon\", required: false }] }], indentSize: [{ type: i0.Input, args: [{ isSignal: true, alias: \"indentSize\", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: \"look\", required: false }] }], searchWithChildren: [{ type: i0.Input, args: [{ isSignal: true, alias: \"searchWithChildren\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNhdGVnb3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL2RlZmF1bHQvc3JjL2xpYi9sYXlvdXRzL2VudGl0eS1sYXlvdXRzL2VudGl0eS1jYXRlZ29yeS9lbnRpdHktY2F0ZWdvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LWNhdGVnb3J5L2VudGl0eS1jYXRlZ29yeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFDTCxtQkFBbUIsRUFHbkIsZ0JBQWdCLEdBTWpCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFrQixlQUFlLEVBQUUs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MndCQUNkLGdCQUFnQixzUUFDaEIsd0JBQXdCOzs0RkFLZiwwQkFBMEI7a0JBdEJ0QyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLGlCQUNELGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIsaUJBQWlCO3dCQUNqQiw2QkFBNkI7d0JBQzdCLDhCQUE4Qjt3QkFDOUIsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3FCQUN6QjsrS0FpQnFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBhZnRlck5leHRSZW5kZXIsXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYQ2xpY2tFdmVudCwgQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uLCBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYU2VhcmNoQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQVhTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9za2VsZXRvbic7XG5pbXBvcnQge1xuICBBWFRyZWVWaWV3Q29tcG9uZW50LFxuICBBWFRyZWVWaWV3RHJhZ0FyZWEsXG4gIEFYVHJlZVZpZXdEcmFnQmVoYXZpb3IsXG4gIEFYVHJlZVZpZXdNb2R1bGUsXG4gIEFYVHJlZVZpZXdOb2RlLFxuICBBWFRyZWVWaWV3Tm9kZVRvZ2dsZUV2ZW50LFxuICBBWFRyZWVWaWV3U2VsZWN0aW9uQmVoYXZpb3IsXG4gIEFYVHJlZVZpZXdTZWxlY3RNb2RlLFxuICBBWFRyZWVWaWV3Vmlld0xvb2ssXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90cmVlLXZpZXcnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQUXVlcnlGaWx0ZXIsIEFYUFJlZnJlc2hFdmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYSGlnaGxpZ2h0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQge1xuICBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0SGVhZGVyQ29tcG9uZW50LFxuICBBWFBUaGVtZUxheW91dFRvb2xiYXJDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQVhQQ2F0ZWdvcnlUcmVlU2VydmljZSxcbiAgQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdNb2RlbCxcbiAgQ2F0ZWdvcnlUcmVlQ29uZmlnLFxuICBDYXRlZ29yeVRyZWVOb2RlRGF0YSxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFdvcmtmbG93Q29udGV4dCwgQVhQV29ya2Zsb3dTZXJ2aWNlLCBvZlR5cGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuLy8jcmVnaW9uIC0tLS0gICBDb25zdGFudHMgICAtLS0tXG5cbmNvbnN0IFJPT1RfTk9ERV9JRCA9ICdhbGwnO1xuY29uc3QgTE9BRElOR19ERUxBWV9NUyA9IDMwMDtcbmNvbnN0IERFRkFVTFRfVEVYVF9GSUVMRCA9ICd0aXRsZSc7XG5jb25zdCBERUZBVUxUX1ZBTFVFX0ZJRUxEID0gJ2lkJztcblxuLy8jZW5kcmVnaW9uXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1lbnRpdHktY2F0ZWdvcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVHJlZVZpZXdNb2R1bGUsXG4gICAgQVhUcmVlVmlld0NvbXBvbmVudCxcbiAgICBBWFNrZWxldG9uTW9kdWxlLFxuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhTZWFyY2hCb3hNb2R1bGUsXG4gICAgQVhQVGhlbWVMYXlvdXRIZWFkZXJDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRUb29sYmFyQ29tcG9uZW50LFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEcm9wZG93bk1vZHVsZSxcbiAgICBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktY2F0ZWdvcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZW50aXR5LWNhdGVnb3J5LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5Q2F0ZWdvcnlDb21wb25lbnQge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd29ya2Zsb3cgPSBpbmplY3QoQVhQV29ya2Zsb3dTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhdGVnb3J5VHJlZVNlcnZpY2UgPSBpbmplY3QoQVhQQ2F0ZWdvcnlUcmVlU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBoaWdobGlnaHRTZXJ2aWNlID0gaW5qZWN0KEFYSGlnaGxpZ2h0U2VydmljZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21wb25lbnQgSW5wdXRzICYgVmlldyBRdWVyaWVzICAgLS0tLVxuXG4gIHZtID0gaW5wdXQucmVxdWlyZWQ8QVhQRW50aXR5TWFzdGVyTGlzdFZpZXdNb2RlbD4oKTtcbiAgdHJlZSA9IHZpZXdDaGlsZDxBWFRyZWVWaWV3Q29tcG9uZW50PigndHJlZScpO1xuICBzZWFyY2hWYWx1ZSA9IGlucHV0PHN0cmluZz4oJycpO1xuXG4gIC8vIFRyZWUgdmlldyBpbnB1dHMgd2l0aCBkZWZhdWx0c1xuICBzZWxlY3RNb2RlID0gaW5wdXQ8QVhUcmVlVmlld1NlbGVjdE1vZGU+KCdzaW5nbGUnKTtcbiAgc2VsZWN0aW9uQmVoYXZpb3IgPSBpbnB1dDxBWFRyZWVWaWV3U2VsZWN0aW9uQmVoYXZpb3I+KCdpbnRlcm1lZGlhdGUnKTtcbiAgZHJhZ0FyZWEgPSBpbnB1dDxBWFRyZWVWaWV3RHJhZ0FyZWE+KCdoYW5kbGVyJyk7XG4gIGRyYWdCZWhhdmlvciA9IGlucHV0PEFYVHJlZVZpZXdEcmFnQmVoYXZpb3I+KCdub25lJyk7XG4gIHNob3dJY29ucyA9IGlucHV0KHRydWUpO1xuICBzaG93Q2hpbGRyZW5CYWRnZSA9IGlucHV0KGZhbHNlKTtcbiAgZXhwYW5kZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tZG93bicpO1xuICBjb2xsYXBzZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tcmlnaHQnKTtcbiAgaW5kZW50U2l6ZSA9IGlucHV0KDE2KTtcbiAgbG9vayA9IGlucHV0PEFYVHJlZVZpZXdWaWV3TG9vaz4oJ2RlZmF1bHQnKTtcbiAgc2VhcmNoV2l0aENoaWxkcmVuID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7IC8vIEluY2x1ZGUgY2hpbGRyZW4gb2Ygc2VhcmNoIHJlc3VsdHNcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbXBvbmVudCBTdGF0ZSAgIC0tLS1cblxuICBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIHByb3RlY3RlZCBpc1NlYXJjaGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzZWFyY2hSZXN1bHRDb3VudCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIGN1cnJlbnRTZWFyY2hWYWx1ZSA9IHNpZ25hbCgnJyk7XG4gIHByb3RlY3RlZCByZXN1bHRzRm91bmRUZXh0ID0gc2lnbmFsKCcnKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGUgUHJvcGVydGllcyAgIC0tLS1cblxuICBwcml2YXRlIGxvYWRpbmdUaW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCB0cmVlRGF0YTogQ2F0ZWdvcnlUcmVlTm9kZURhdGEgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0cmVlQ29uZmlnOiBDYXRlZ29yeVRyZWVDb25maWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtYXRjaGluZ05vZGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWxldmFudE5vZGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gRm9yIHNlYXJjaCBmaWx0ZXJpbmdcbiAgcHJpdmF0ZSBub2RlRGF0YUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpOyAvLyBDYWNoZSBwYXJlbnQgZGF0YSBmcm9tIHNlYXJjaCByZXN1bHRzXG4gIHByaXZhdGUgZXhwYW5kZWROb2Rlc0JlZm9yZVNlYXJjaDogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGN1cnJlbnRTZWFyY2hUZXJtOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbXB1dGVkIFByb3BlcnRpZXMgICAtLS0tXG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRleHRGaWVsZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LnRleHRGaWVsZCB8fCBERUZBVUxUX1RFWFRfRklFTEQpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmFsdWVGaWVsZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LnZhbHVlRmllbGQgfHwgREVGQVVMVF9WQUxVRV9GSUVMRCk7XG5cbiAgLyoqXG4gICAqIENvbXB1dGVkIHByb3BlcnR5IHRvIGNoZWNrIGlmIHdlIHNob3VsZCBzaG93IHRoZSBcIm5vIHNlYXJjaCByZXN1bHRzXCIgZW1wdHkgc3RhdGUuXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHNlYXJjaCBpcyBhY3RpdmUsIG5vdCBzZWFyY2hpbmcsIGFuZCBubyByZXN1bHRzIGZvdW5kLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dOb1NlYXJjaFJlc3VsdHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZSgpLnRyaW0oKTtcbiAgICBjb25zdCBpc1NlYXJjaGluZyA9IHRoaXMuaXNTZWFyY2hpbmcoKTtcbiAgICBjb25zdCByZXN1bHRDb3VudCA9IHRoaXMuc2VhcmNoUmVzdWx0Q291bnQoKTtcbiAgICByZXR1cm4gc2VhcmNoVmFsdWUubGVuZ3RoID4gMCAmJiAhaXNTZWFyY2hpbmcgJiYgcmVzdWx0Q291bnQgPT09IDA7XG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlFbnRpdHlLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy52bSgpLmVudGl0eURlZi5jYXRlZ29yeT8uZW50aXR5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhdGVnb3J5IGVudGl0eSBpcyBub3QgY29uZmlndXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbnN0cnVjdG9yICYgTGlmZWN5Y2xlICAgLS0tLVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUcmVlKCk7XG4gICAgfSk7XG4gICAgdGhpcy53b3JrZmxvdy5ldmVudHMkXG4gICAgICAucGlwZShvZlR5cGUoQVhQUmVmcmVzaEV2ZW50KSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50cmVlKCk/LnJlbG9hZERhdGEoKTtcbiAgICAgICAgLy8gdGhpcy50cmVlKCk/LnJlZnJlc2goKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogSGFuZGxlcyBjYXRlZ29yeSBzZWFyY2ggaW5wdXQgY2hhbmdlcyAtIFVzZXMgc2VydmVyLXNpZGUgc2VhcmNoIGZvciBlZmZpY2llbmN5IGFuZCByZWxpYWJpbGl0eVxuICAgKi9cbiAgYXN5bmMgaGFuZGxlQ2F0ZWdvcnlTZWFyY2hDaGFuZ2UoZXZlbnQ6IEFYVmFsdWVDaGFuZ2VkRXZlbnQ8c3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IChldmVudC52YWx1ZSA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcHJldmlvdXNTZWFyY2hUZXJtID0gdGhpcy5jdXJyZW50U2VhcmNoVmFsdWUoKTtcblxuICAgIC8vIElmIHNlYXJjaCBpcyBjbGVhcmVkLCByZXNldCB0cmVlXG4gICAgaWYgKCFzZWFyY2hUZXJtKSB7XG4gICAgICBpZiAocHJldmlvdXNTZWFyY2hUZXJtIHx8IHRoaXMubWF0Y2hpbmdOb2RlSWRzLnNpemUgPiAwKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFZhbHVlLnNldCgnJyk7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBudWxsO1xuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIG5vbi1lbXB0eSBzZWFyY2gsIG9ubHkgcHJvY2VzcyB1c2VyIGludGVyYWN0aW9uc1xuICAgIGlmICghZXZlbnQuaXNVc2VySW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IGNvbmN1cnJlbnQgc2VhcmNoZXNcbiAgICBpZiAodGhpcy5pc1NlYXJjaGluZygpICYmIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID09PSBzZWFyY2hUZXJtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZS5zZXQoZXZlbnQudmFsdWUgPz8gJycpO1xuICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuXG4gICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgIGlmICghdHJlZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIGV4cGFuZGVkIG5vZGVzIGJlZm9yZSBzdGFydGluZyBhIG5ldyBzZWFyY2ggKG9ubHkgb24gZmlyc3Qgc2VhcmNoKVxuICAgIGlmICghcHJldmlvdXNTZWFyY2hUZXJtICYmIHRoaXMuZXhwYW5kZWROb2Rlc0JlZm9yZVNlYXJjaC5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGV4cGFuZGVkTm9kZXMgPSB0cmVlQ29tcG9uZW50LmdldEV4cGFuZGVkTm9kZXMoKTtcbiAgICAgIHRoaXMuZXhwYW5kZWROb2Rlc0JlZm9yZVNlYXJjaCA9IGV4cGFuZGVkTm9kZXNcbiAgICAgICAgLm1hcCgobm9kZSkgPT4gU3RyaW5nKG5vZGVbJ2lkJ10gPz8gJycpKVxuICAgICAgICAuZmlsdGVyKChpZCkgPT4gaWQgJiYgaWQgIT09IFJPT1RfTk9ERV9JRCk7XG4gICAgfVxuXG4gICAgLy8gQ29sbGFwc2Ugbm9kZXMgZnJvbSBwcmV2aW91cyBzZWFyY2ggYmVmb3JlIHN0YXJ0aW5nIG5ldyBzZWFyY2hcbiAgICBpZiAocHJldmlvdXNTZWFyY2hUZXJtICYmIHRoaXMubm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBub2Rlc1RvQ29sbGFwc2UgPSBbLi4udGhpcy5ub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoXS5yZXZlcnNlKCk7XG4gICAgICB0aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2ggPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIG5vZGVzVG9Db2xsYXBzZSkge1xuICAgICAgICAvLyBPbmx5IGNvbGxhcHNlIGlmIGl0IHdhc24ndCBvcmlnaW5hbGx5IGV4cGFuZGVkIGJlZm9yZSBzZWFyY2hcbiAgICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkTm9kZXNCZWZvcmVTZWFyY2guaW5jbHVkZXMobm9kZUlkKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0cmVlQ29tcG9uZW50LmNvbGxhcHNlTm9kZShub2RlSWQpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm9kZSBtaWdodCBub3QgZXhpc3QgYW55bW9yZSwgaWdub3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc1NlYXJjaGluZy5zZXQodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3RlcCAxOiBVc2Ugc2VydmVyLXNpZGUgc2VhcmNoIHRvIGdldCBtYXRjaGluZyBpdGVtc1xuICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlUcmVlU2VydmljZS5zZWFyY2hDYXRlZ29yaWVzKFxuICAgICAgICBzZWFyY2hUZXJtLFxuICAgICAgICB0aGlzLnRyZWVEYXRhISxcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnISxcbiAgICAgICk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHNlYXJjaCB0ZXJtIGNoYW5nZWQgZHVyaW5nIHRoZSBBUEkgY2FsbFxuICAgICAgaWYgKHRoaXMuY3VycmVudFNlYXJjaFRlcm0gIT09IHNlYXJjaFRlcm0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNlYXJjaFJlc3VsdHMgfHwgc2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5tYXRjaGluZ05vZGVJZHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yZWxldmFudE5vZGVJZHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRDb3VudC5zZXQoMCk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVHJhbnNsYXRlZE1lc3NhZ2VzKDApO1xuICAgICAgICAvLyBDbGVhciBoaWdobGlnaHRpbmcgYW5kIHJlbG9hZCB0cmVlIHRvIHNob3cgYWxsIG5vZGVzXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5jbGVhcigpO1xuICAgICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LnJlbG9hZERhdGEoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSBtYXRjaGluZyBub2RlIElEcyBmcm9tIHNlYXJjaCByZXN1bHRzXG4gICAgICB0aGlzLm1hdGNoaW5nTm9kZUlkcy5jbGVhcigpO1xuICAgICAgY29uc3QgdmFsdWVGaWVsZCA9IHRoaXMudmFsdWVGaWVsZCgpO1xuICAgICAgc2VhcmNoUmVzdWx0cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IFN0cmluZyhpdGVtW3ZhbHVlRmllbGRdID8/ICcnKTtcbiAgICAgICAgaWYgKG5vZGVJZCkge1xuICAgICAgICAgIHRoaXMubWF0Y2hpbmdOb2RlSWRzLmFkZChub2RlSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0Q291bnQgPSBzZWFyY2hSZXN1bHRzLmxlbmd0aDtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0Q291bnQuc2V0KHJlc3VsdENvdW50KTtcblxuICAgICAgLy8gVXBkYXRlIHRyYW5zbGF0ZWQgbWVzc2FnZXNcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVHJhbnNsYXRlZE1lc3NhZ2VzKHJlc3VsdENvdW50KTtcblxuICAgICAgLy8gU3RlcCAyOiBDb2xsZWN0IHBhcmVudCBJRHMgKGJ1aWxkcyByZWxldmFudE5vZGVJZHMgZm9yIGZpbHRlcmluZylcbiAgICAgIGNvbnN0IHBhcmVudHNUb0V4cGFuZCA9IGF3YWl0IHRoaXMuY29sbGVjdFBhcmVudElkcyhzZWFyY2hSZXN1bHRzKTtcblxuICAgICAgLy8gU3RlcCAyLjU6IENvbGxlY3QgY2hpbGRyZW4gSURzIGlmIHNlYXJjaFdpdGhDaGlsZHJlbiBpcyBlbmFibGVkXG4gICAgICBpZiAodGhpcy5zZWFyY2hXaXRoQ2hpbGRyZW4oKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3RDaGlsZHJlbklkcyhzZWFyY2hSZXN1bHRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAzOiBSZWxvYWQgdHJlZSB0byBhcHBseSBmaWx0ZXJpbmdcbiAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQucmVsb2FkRGF0YSgpO1xuXG4gICAgICAvLyBTdGVwIDQ6IEV4cGFuZCByb290IG5vZGVcbiAgICAgIGlmICghdHJlZUNvbXBvbmVudC5pc05vZGVFeHBhbmRlZChST09UX05PREVfSUQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdHJlZUNvbXBvbmVudC5leHBhbmROb2RlKFJPT1RfTk9ERV9JRCk7XG4gICAgICAgICAgdGhpcy5ub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoLnB1c2goUk9PVF9OT0RFX0lEKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gUm9vdCBtaWdodCBub3QgZXhpc3RcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDQ6IEV4cGFuZCBhbGwgcGFyZW50IG5vZGVzIGluIG9yZGVyIChmcm9tIHJvb3QgdG8gbGVhdmVzKVxuICAgICAgLy8gU29ydCBwYXJlbnRzIGJ5IHRoZWlyIGRlcHRoIHRvIGV4cGFuZCBpbiBjb3JyZWN0IG9yZGVyXG4gICAgICBjb25zdCBzb3J0ZWRQYXJlbnRzID0gYXdhaXQgdGhpcy5zb3J0UGFyZW50c0J5RGVwdGgoQXJyYXkuZnJvbShwYXJlbnRzVG9FeHBhbmQpKTtcbiAgICAgIGZvciAoY29uc3QgcGFyZW50SWQgb2Ygc29ydGVkUGFyZW50cykge1xuICAgICAgICAvLyBPbmx5IGV4cGFuZCBpZiBub3QgYWxyZWFkeSBleHBhbmRlZFxuICAgICAgICBpZiAoIXRyZWVDb21wb25lbnQuaXNOb2RlRXhwYW5kZWQocGFyZW50SWQpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQuZXhwYW5kTm9kZShwYXJlbnRJZCk7XG4gICAgICAgICAgICB0aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2gucHVzaChwYXJlbnRJZCk7XG4gICAgICAgICAgICAvLyBTbWFsbCBkZWxheSB0byBwcmV2ZW50IG92ZXJ3aGVsbWluZyB0aGUgdHJlZSBjb21wb25lbnRcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBOb2RlIG1pZ2h0IG5vdCBleGlzdCwgaWdub3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFN0ZXAgNTogQXBwbHkgaGlnaGxpZ2h0aW5nIGFmdGVyIHRyZWUgaXMgcmVuZGVyZWRcbiAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZCBhZnRlciB0cmVlIHJlbG9hZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZSgpLnRyaW0oKSkge1xuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5oaWdobGlnaHQoJ2F4LXRyZWUtdmlldyAuYXgtdHJ1bmNhdGUnLCB0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZSgpLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlYXJjaGluZyBjYXRlZ29yaWVzOicsIGVycm9yKTtcbiAgICAgIHRoaXMubWF0Y2hpbmdOb2RlSWRzLmNsZWFyKCk7XG4gICAgICB0aGlzLnJlbGV2YW50Tm9kZUlkcy5jbGVhcigpO1xuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRDb3VudC5zZXQoMCk7XG4gICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2xlYXIoKTtcbiAgICAgIC8vIFJlbG9hZCB0cmVlIHRvIGNsZWFyIGFueSBmaWx0ZXJzXG4gICAgICBjb25zdCB0cmVlQ29tcG9uZW50ID0gdGhpcy50cmVlKCk7XG4gICAgICBpZiAodHJlZUNvbXBvbmVudCkge1xuICAgICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LnJlbG9hZERhdGEoKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPT09IHNlYXJjaFRlcm0pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybSA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmlzU2VhcmNoaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIGFsbCBwYXJlbnQgSURzIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIHJlc3VsdHNcbiAgICogSGFuZGxlcyBib3RoIG5lc3RlZCAncGFyZW50JyBvYmplY3QgYW5kICdwYXJlbnRJZCcgZmllbGQgaW4gc2VhcmNoIHJlc3VsdHNcbiAgICogUmVjdXJzaXZlbHkgZmV0Y2hlcyBwYXJlbnQgbm9kZXMgdG8gYnVpbGQgdGhlIGZ1bGwgcGFyZW50IGNoYWluXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RQYXJlbnRJZHMoaXRlbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gICAgY29uc3QgcGFyZW50c1RvRXhwYW5kID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdmFsdWVGaWVsZCA9IHRoaXMudmFsdWVGaWVsZCgpO1xuICAgIGNvbnN0IHBhcmVudEtleSA9IHRoaXMudHJlZURhdGE/LmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXkgfHwgJ3BhcmVudElkJztcblxuICAgIC8vIEJ1aWxkIHJlbGV2YW50Tm9kZUlkcyA9IG1hdGNoaW5nIG5vZGVzICsgYWxsIHBhcmVudHNcbiAgICB0aGlzLnJlbGV2YW50Tm9kZUlkcy5jbGVhcigpO1xuICAgIHRoaXMubWF0Y2hpbmdOb2RlSWRzLmZvckVhY2goKGlkKSA9PiB0aGlzLnJlbGV2YW50Tm9kZUlkcy5hZGQoaWQpKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGV4dHJhY3QgYWxsIHBhcmVudCBJRHNcbiAgICBjb25zdCBleHRyYWN0UGFyZW50SWRzID0gYXN5bmMgKGl0ZW06IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAvLyBGaXJzdCwgdHJ5IHRvIGdldCBwYXJlbnQgZnJvbSBuZXN0ZWQgJ3BhcmVudCcgb2JqZWN0IChpZiBhdmFpbGFibGUpXG4gICAgICBjb25zdCBwYXJlbnQgPSBpdGVtWydwYXJlbnQnXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSBTdHJpbmcocGFyZW50W3ZhbHVlRmllbGRdID8/IHBhcmVudFsnaWQnXSA/PyAnJyk7XG4gICAgICAgIGlmIChwYXJlbnRJZCAmJiBwYXJlbnRJZCAhPT0gUk9PVF9OT0RFX0lEKSB7XG4gICAgICAgICAgcGFyZW50c1RvRXhwYW5kLmFkZChwYXJlbnRJZCk7XG4gICAgICAgICAgdGhpcy5yZWxldmFudE5vZGVJZHMuYWRkKHBhcmVudElkKTsgLy8gQWRkIHRvIGZpbHRlciBzZXRcbiAgICAgICAgICB0aGlzLm5vZGVEYXRhQ2FjaGUuc2V0KHBhcmVudElkLCBwYXJlbnQpO1xuICAgICAgICAgIGF3YWl0IGV4dHJhY3RQYXJlbnRJZHMocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmFsbGJhY2s6IHVzZSBwYXJlbnRJZCBmaWVsZCBhbmQgZmV0Y2ggcGFyZW50IGZyb20gc2VydmVyXG4gICAgICAgIC8vIFRyeSBib3RoIHBhcmVudEtleSBmcm9tIGVudGl0eSBkZWZpbml0aW9uIGFuZCBjb21tb24gJ3BhcmVudElkJyBmaWVsZFxuICAgICAgICBjb25zdCBwYXJlbnRJZFZhbHVlID0gaXRlbVtwYXJlbnRLZXldID8/IGl0ZW1bJ3BhcmVudElkJ107XG4gICAgICAgIGlmIChwYXJlbnRJZFZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBTdHJpbmcocGFyZW50SWRWYWx1ZSk7XG4gICAgICAgICAgaWYgKHBhcmVudElkICYmIHBhcmVudElkICE9PSBST09UX05PREVfSUQpIHtcbiAgICAgICAgICAgIC8vIEFkZCB0byBzZXRzIGZpcnN0XG4gICAgICAgICAgICBwYXJlbnRzVG9FeHBhbmQuYWRkKHBhcmVudElkKTtcbiAgICAgICAgICAgIHRoaXMucmVsZXZhbnROb2RlSWRzLmFkZChwYXJlbnRJZCk7XG5cbiAgICAgICAgICAgIC8vIEZldGNoIHBhcmVudCBmcm9tIHNlcnZlciBpZiBub3QgYWxyZWFkeSBjYWNoZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlRGF0YUNhY2hlLmhhcyhwYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IGF3YWl0IHRoaXMuZmV0Y2hJdGVtQnlJZChwYXJlbnRJZCk7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlRGF0YUNhY2hlLnNldChwYXJlbnRJZCwgcGFyZW50SXRlbSk7XG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmV0Y2ggcGFyZW50J3MgcGFyZW50XG4gICAgICAgICAgICAgICAgYXdhaXQgZXh0cmFjdFBhcmVudElkcyhwYXJlbnRJdGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUGFyZW50IGFscmVhZHkgaW4gY2FjaGUsIHJlY3Vyc2l2ZWx5IHByb2Nlc3MgaXRcbiAgICAgICAgICAgICAgY29uc3QgY2FjaGVkUGFyZW50ID0gdGhpcy5ub2RlRGF0YUNhY2hlLmdldChwYXJlbnRJZCk7XG4gICAgICAgICAgICAgIGlmIChjYWNoZWRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBleHRyYWN0UGFyZW50SWRzKGNhY2hlZFBhcmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gUHJvY2VzcyBhbGwgaXRlbXNcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGF3YWl0IGV4dHJhY3RQYXJlbnRJZHMoaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudHNUb0V4cGFuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyBjaGlsZHJlbiBJRHMgZm9yIG1hdGNoaW5nIHNlYXJjaCByZXN1bHRzIHJlY3Vyc2l2ZWx5XG4gICAqIEFkZHMgYWxsIGRlc2NlbmRhbnRzIChjaGlsZHJlbiwgZ3JhbmRjaGlsZHJlbiwgZXRjLikgdG8gcmVsZXZhbnROb2RlSWRzIHNvIHRoZXkgYXBwZWFyIGluIHRoZSBmaWx0ZXJlZCB0cmVlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RDaGlsZHJlbklkcyhpdGVtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlRdWVyeUZ1bmMgfHwgIXRoaXMudHJlZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnZhbHVlRmllbGQoKTtcbiAgICBjb25zdCBwYXJlbnRLZXkgPSB0aGlzLnRyZWVEYXRhLmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXk7XG4gICAgaWYgKCFwYXJlbnRLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb3IgZWFjaCBtYXRjaGluZyBub2RlLCByZWN1cnNpdmVseSBmZXRjaCBhbGwgaXRzIGRlc2NlbmRhbnRzXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBTdHJpbmcoaXRlbVt2YWx1ZUZpZWxkXSA/PyAnJyk7XG4gICAgICBpZiAoIW5vZGVJZCB8fCBub2RlSWQgPT09IFJPT1RfTk9ERV9JRCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0Q2hpbGRyZW5SZWN1cnNpdmVseShub2RlSWQsIHZhbHVlRmllbGQsIHBhcmVudEtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNvbGxlY3RzIGFsbCBkZXNjZW5kYW50IElEcyBmb3IgYSBnaXZlbiBub2RlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RDaGlsZHJlblJlY3Vyc2l2ZWx5KG5vZGVJZDogc3RyaW5nLCB2YWx1ZUZpZWxkOiBzdHJpbmcsIHBhcmVudEtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnRyZWVEYXRhPy5jYXRlZ29yeUVudGl0eVF1ZXJ5RnVuYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBGZXRjaCBjaGlsZHJlbiBmb3IgdGhpcyBub2RlXG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgLi4udGhpcy50cmVlRGF0YS5iYXNpY1F1ZXJ5RXZlbnQsXG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIGZpZWxkOiBwYXJlbnRLZXksXG4gICAgICAgICAgdmFsdWU6IG5vZGVJZCxcbiAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRyZWVEYXRhLmNhdGVnb3J5RW50aXR5UXVlcnlGdW5jKGV2ZW50KTtcbiAgICAgIGlmIChyZXM/Lml0ZW1zICYmIHJlcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBjaGlsZHJlbiBJRHMgdG8gcmVsZXZhbnROb2RlSWRzIHNvIHRoZXkgYXBwZWFyIGluIGZpbHRlcmVkIHRyZWVcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiByZXMuaXRlbXMpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZElkID0gU3RyaW5nKGNoaWxkW3ZhbHVlRmllbGRdID8/ICcnKTtcbiAgICAgICAgICBpZiAoY2hpbGRJZCAmJiBjaGlsZElkICE9PSBST09UX05PREVfSUQpIHtcbiAgICAgICAgICAgIHRoaXMucmVsZXZhbnROb2RlSWRzLmFkZChjaGlsZElkKTtcbiAgICAgICAgICAgIC8vIENhY2hlIGNoaWxkIGRhdGFcbiAgICAgICAgICAgIHRoaXMubm9kZURhdGFDYWNoZS5zZXQoY2hpbGRJZCwgY2hpbGQpO1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmV0Y2ggY2hpbGRyZW4gb2YgdGhpcyBjaGlsZFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0Q2hpbGRyZW5SZWN1cnNpdmVseShjaGlsZElkLCB2YWx1ZUZpZWxkLCBwYXJlbnRLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBmZXRjaGluZyBjaGlsZHJlbiBmb3Igbm9kZSAke25vZGVJZH06YCwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGEgc2luZ2xlIGl0ZW0gYnkgSUQgZnJvbSB0aGUgc2VydmVyXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoSXRlbUJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLnRyZWVEYXRhPy5jYXRlZ29yeUVudGl0eVF1ZXJ5RnVuYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnZhbHVlRmllbGQoKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAuLi50aGlzLnRyZWVEYXRhLmJhc2ljUXVlcnlFdmVudCxcbiAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgZmllbGQ6IHZhbHVlRmllbGQsXG4gICAgICAgICAgdmFsdWU6IGlkLFxuICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudHJlZURhdGEuY2F0ZWdvcnlFbnRpdHlRdWVyeUZ1bmMoZXZlbnQpO1xuICAgICAgcmV0dXJuIHJlcz8uaXRlbXM/LlswXSA/PyBudWxsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBpdGVtIGJ5IElEOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyBwYXJlbnQgSURzIGJ5IHRoZWlyIGRlcHRoIChyb290IGZpcnN0LCBsZWF2ZXMgbGFzdClcbiAgICogVXNlcyBjYWNoZWQgZGF0YSBmcm9tIGNvbGxlY3RQYXJlbnRJZHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc29ydFBhcmVudHNCeURlcHRoKHBhcmVudElkczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcGFyZW50S2V5ID0gdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlEZWY/LnBhcmVudEtleTtcbiAgICBpZiAoIXBhcmVudEtleSB8fCBwYXJlbnRJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyZW50SWRzO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGRlcHRoIG1hcCB1c2luZyBjYWNoZWQgZGF0YVxuICAgIGNvbnN0IGRlcHRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRzKSB7XG4gICAgICBpZiAoZGVwdGhNYXAuaGFzKHBhcmVudElkKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlcHRoID0gMDtcbiAgICAgIGxldCBjdXJyZW50SWQ6IHN0cmluZyB8IG51bGwgPSBwYXJlbnRJZDtcbiAgICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgd2hpbGUgKGN1cnJlbnRJZCAmJiBjdXJyZW50SWQgIT09IFJPT1RfTk9ERV9JRCAmJiAhdmlzaXRlZC5oYXMoY3VycmVudElkKSkge1xuICAgICAgICB2aXNpdGVkLmFkZChjdXJyZW50SWQpO1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIC8vIFVzZSBub2RlRGF0YUNhY2hlIHdoaWNoIHdhcyBwb3B1bGF0ZWQgYnkgY29sbGVjdFBhcmVudElkc1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5ub2RlRGF0YUNhY2hlLmdldChjdXJyZW50SWQpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIGN1cnJlbnRJZCA9IGl0ZW1bcGFyZW50S2V5XSA/IFN0cmluZyhpdGVtW3BhcmVudEtleV0pIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkZXB0aE1hcC5zZXQocGFyZW50SWQsIGRlcHRoKTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IGJ5IGRlcHRoIChsb3dlciBkZXB0aCA9IGNsb3NlciB0byByb290ID0gZXhwYW5kIGZpcnN0KVxuICAgIHJldHVybiBwYXJlbnRJZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgZGVwdGhBID0gZGVwdGhNYXAuZ2V0KGEpID8/IDA7XG4gICAgICBjb25zdCBkZXB0aEIgPSBkZXB0aE1hcC5nZXQoYikgPz8gMDtcbiAgICAgIHJldHVybiBkZXB0aEEgLSBkZXB0aEI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0cmFuc2xhdGVkIG1lc3NhZ2VzIGZvciBzZWFyY2ggcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVUcmFuc2xhdGVkTWVzc2FnZXMocmVzdWx0Q291bnQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChyZXN1bHRDb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IGtleSA9XG4gICAgICAgIHJlc3VsdENvdW50ID09PSAxXG4gICAgICAgICAgPyAnQGdlbmVyYWw6dGVybXMuaW50ZXJmYWNlLmNhdGVnb3J5LnNlYXJjaC5yZXN1bHRzLWZvdW5kLnNpbmd1bGFyJ1xuICAgICAgICAgIDogJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gucmVzdWx0cy1mb3VuZC5wbHVyYWwnO1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLnRyYW5zbGF0ZUFzeW5jKGtleSwgeyBwYXJhbXM6IHsgY291bnQ6IHJlc3VsdENvdW50IH0gfSk7XG4gICAgICB0aGlzLnJlc3VsdHNGb3VuZFRleHQuc2V0KHRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3VsdHNGb3VuZFRleHQuc2V0KCcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHNlYXJjaCBzdGF0ZSBhbmQgcmVzdG9yZXMgdHJlZSB0byBvcmlnaW5hbCBleHBhbmRlZCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNldFNlYXJjaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdENvdW50LnNldCgwKTtcbiAgICB0aGlzLnJlc3VsdHNGb3VuZFRleHQuc2V0KCcnKTtcbiAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gbnVsbDtcbiAgICB0aGlzLmlzU2VhcmNoaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5tYXRjaGluZ05vZGVJZHMuY2xlYXIoKTtcbiAgICB0aGlzLnJlbGV2YW50Tm9kZUlkcy5jbGVhcigpO1xuICAgIHRoaXMubm9kZURhdGFDYWNoZS5jbGVhcigpO1xuICAgIC8vIENsZWFyIGhpZ2hsaWdodGluZ1xuICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5jbGVhcigpO1xuXG4gICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgIGlmICghdHJlZUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5leHBhbmRlZE5vZGVzQmVmb3JlU2VhcmNoID0gW107XG4gICAgICB0aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2ggPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZWxvYWQgdHJlZSB0byBzaG93IGFsbCBub2RlcyAobm8gZmlsdGVyaW5nKVxuICAgIGF3YWl0IHRyZWVDb21wb25lbnQucmVsb2FkRGF0YSgpO1xuXG4gICAgLy8gQ29sbGFwc2Ugbm9kZXMgdGhhdCB3ZXJlIGV4cGFuZGVkIGR1cmluZyBzZWFyY2ggKGluIHJldmVyc2Ugb3JkZXIgLSBsZWF2ZXMgZmlyc3QpXG4gICAgY29uc3Qgbm9kZXNUb0NvbGxhcHNlID0gWy4uLnRoaXMubm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaF0ucmV2ZXJzZSgpO1xuICAgIHRoaXMubm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBub2RlSWQgb2Ygbm9kZXNUb0NvbGxhcHNlKSB7XG4gICAgICAvLyBPbmx5IGNvbGxhcHNlIGlmIGl0IHdhc24ndCBvcmlnaW5hbGx5IGV4cGFuZGVkIGJlZm9yZSBzZWFyY2hcbiAgICAgIGlmICghdGhpcy5leHBhbmRlZE5vZGVzQmVmb3JlU2VhcmNoLmluY2x1ZGVzKG5vZGVJZCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0cmVlQ29tcG9uZW50LmNvbGxhcHNlTm9kZShub2RlSWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBOb2RlIG1pZ2h0IG5vdCBleGlzdCBhbnltb3JlLCBpZ25vcmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBzdG9yZWQgZXhwYW5kZWQgbm9kZXNcbiAgICB0aGlzLmV4cGFuZGVkTm9kZXNCZWZvcmVTZWFyY2ggPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBub2RlIG1hdGNoZXMgdGhlIGN1cnJlbnQgc2VhcmNoIHRlcm1cbiAgICovXG4gIHByb3RlY3RlZCBpc01hdGNoaW5nTm9kZShub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdGNoaW5nTm9kZUlkcy5oYXMobm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIG5vZGUgY2xpY2sgZXZlbnRzIHRvIGFwcGx5IGNhdGVnb3J5IGZpbHRlcnNcbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVOb2RlQ2xpY2sobm9kZTogQVhUcmVlVmlld05vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlRGF0YSA9IHRoaXMuZXh0cmFjdE5vZGVEYXRhKG5vZGUpO1xuICAgIGNvbnN0IGFwcGx5Q29uZGl0aW9ucyA9IHRoaXMudm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LmFwcGx5Q29uZGl0aW9ucyB8fCBbXTtcblxuICAgIGNvbnN0IGNhdGVnb3J5RmlsdGVycyA9IHRoaXMuYnVpbGRDYXRlZ29yeUZpbHRlcnMobm9kZURhdGEsIGFwcGx5Q29uZGl0aW9ucyk7XG4gICAgY29uc3Qgdmlld0ZpbHRlcnMgPSB0aGlzLmJ1aWxkVmlld0ZpbHRlcnMoKTtcblxuICAgIHRoaXMudm0oKS5kYXRhU291cmNlLmZpbHRlcih7XG4gICAgICBmaWx0ZXJzOiBbLi4udmlld0ZpbHRlcnMsIC4uLmNhdGVnb3J5RmlsdGVyc10sXG4gICAgICBsb2dpYzogJ2FuZCcsXG4gICAgfSk7XG4gICAgdGhpcy52bSgpLmRhdGFTb3VyY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbm9kZSB0b2dnbGUgZXZlbnRzIChleHBhbnNpb24vY29sbGFwc2UpXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25Ob2RlVG9nZ2xlKF9ldmVudDogQVhUcmVlVmlld05vZGVUb2dnbGVFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRyZWUgY29tcG9uZW50IGhhbmRsZXMgbGF6eSBsb2FkaW5nIHZpYSBkYXRhc291cmNlIGNhbGxiYWNrXG4gIH1cblxuICAvLyBwcm90ZWN0ZWQgdG9nZ2xlRXhwYW5kKGU6IEFYVHJlZVZpZXdOb2RlRG91YmxlQ2xpY2tFdmVudCkge1xuICAvLyAgIChlLmNvbXBvbmVudCBhcyBBWFRyZWVWaWV3Q29tcG9uZW50KS50b2dnbGVOb2RlRXhwYW5zaW9uKFN0cmluZyhlLm5vZGVbdGhpcy52YWx1ZUZpZWxkKCldID8/ICcnKSk7XG4gIC8vIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFRyZWUgRGF0YSBTb3VyY2UgICAtLS0tXG5cbiAgLyoqXG4gICAqIERhdGFzb3VyY2UgY2FsbGJhY2sgZm9yIHRyZWUtdmlldyBjb21wb25lbnQuXG4gICAqIFByb3ZpZGVzIGxhenkgbG9hZGluZyBzdXBwb3J0IGZvciB0cmVlIG5vZGVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGRhdGFzb3VyY2UgPSBhc3luYyAocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYVHJlZVZpZXdOb2RlW10+ID0+IHtcbiAgICBjb25zb2xlLmxvZygnZGF0YXNvdXJjZScsIHBhcmVudElkKTtcbiAgICBpZiAoIXRoaXMuaXNUcmVlSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIExvYWQgcm9vdCBub2RlcyBpZiBubyBwYXJlbnQgSUQgcHJvdmlkZWRcbiAgICBpZiAoIXBhcmVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkUm9vdE5vZGVzKCk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCBjaGlsZHJlbiBmb3IgdGhlIHNwZWNpZmllZCBwYXJlbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkQ2hpbGROb2RlcyhwYXJlbnRJZCk7XG4gIH07XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDUlVEIE9wZXJhdGlvbnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcm9vdCBjYXRlZ29yeSBub2RlXG4gICAqL1xuICBhc3luYyBoYW5kbGVDcmVhdGVSb290Q2xpY2soZXZlbnQ6IEFYQ2xpY2tFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJldmVudERlZmF1bHRBbmRTdG9wUHJvcGFnYXRpb24oZXZlbnQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVDcmVhdGVXb3JrZmxvdyh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDcmVhdGVSZXN1bHQoY29udGV4dCwgdW5kZWZpbmVkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgcm9vdCBjYXRlZ29yeTonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY2hpbGQgY2F0ZWdvcnkgdW5kZXIgdGhlIGdpdmVuIHBhcmVudCBub2RlXG4gICAqL1xuICBhc3luYyBoYW5kbGVDcmVhdGVDaGlsZENsaWNrKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogQVhDbGlja0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcmV2ZW50RGVmYXVsdEFuZFN0b3BQcm9wYWdhdGlvbihldmVudCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmV4dHJhY3ROb2RlSWQobm9kZSk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgdGhpcy5leGVjdXRlQ3JlYXRlV29ya2Zsb3cocGFyZW50SWQpO1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDcmVhdGVSZXN1bHQoY29udGV4dCwgcGFyZW50SWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyBjaGlsZCBjYXRlZ29yeTonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgY2F0ZWdvcnkgbm9kZVxuICAgKi9cbiAgYXN5bmMgaGFuZGxlRWRpdE5vZGVDbGljayhub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEFYQ2xpY2tFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJldmVudERlZmF1bHRBbmRTdG9wUHJvcGFnYXRpb24oZXZlbnQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5vZGVEYXRhID0gdGhpcy5leHRyYWN0Tm9kZURhdGEobm9kZSk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgdGhpcy5leGVjdXRlTW9kaWZ5V29ya2Zsb3cobm9kZURhdGEpO1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVNb2RpZnlSZXN1bHQoY29udGV4dCwgbm9kZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVkaXRpbmcgY2F0ZWdvcnk6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgY2F0ZWdvcnkgbm9kZVxuICAgKi9cbiAgYXN5bmMgaGFuZGxlRGVsZXRlTm9kZUNsaWNrKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogQVhDbGlja0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcmV2ZW50RGVmYXVsdEFuZFN0b3BQcm9wYWdhdGlvbihldmVudCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9kZURhdGEgPSB0aGlzLmV4dHJhY3ROb2RlRGF0YShub2RlKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVEZWxldGVXb3JrZmxvdyhub2RlRGF0YSk7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZURlbGV0ZVJlc3VsdChjb250ZXh0LCBub2RlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgY2F0ZWdvcnk6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZSBUcmVlIE1hbmFnZW1lbnQgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGNhdGVnb3J5IHRyZWUgZGF0YSBzdHJ1Y3R1cmVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVRyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zZXRMb2FkaW5nV2l0aERlbGF5KHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudGl0eUtleSA9IHRoaXMuY2F0ZWdvcnlFbnRpdHlLZXkoKTtcbiAgICAgIHRoaXMudHJlZUNvbmZpZyA9IHtcbiAgICAgICAgZW50aXR5S2V5LFxuICAgICAgICB0ZXh0RmllbGQ6IHRoaXMudGV4dEZpZWxkKCksXG4gICAgICAgIHZhbHVlRmllbGQ6IHRoaXMudmFsdWVGaWVsZCgpLFxuICAgICAgfTtcblxuICAgICAgdGhpcy50cmVlRGF0YSA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlUcmVlU2VydmljZS5pbml0aWFsaXplQ2F0ZWdvcnlUcmVlKHRoaXMudHJlZUNvbmZpZyk7XG4gICAgICBpZiAoIXRoaXMudHJlZURhdGEpIHtcbiAgICAgICAgdGhpcy5jbGVhckxvYWRpbmdTdGF0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBwYXJlbnQga2V5IGZyb20gZW50aXR5IGRlZmluaXRpb25cbiAgICAgIGlmICh0aGlzLnRyZWVEYXRhLmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXkpIHtcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnLnBhcmVudEtleSA9IHRoaXMudHJlZURhdGEuY2F0ZWdvcnlFbnRpdHlEZWYucGFyZW50S2V5O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNhdGVnb3JpZXM6JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmNsZWFyTG9hZGluZ1N0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHJvb3Qgbm9kZXMgZm9yIHRoZSB0cmVlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRSb290Tm9kZXMoKTogUHJvbWlzZTxBWFRyZWVWaWV3Tm9kZVtdPiB7XG4gICAgaWYgKCF0aGlzLmlzVHJlZUluaXRpYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIHJvb3QgY2F0ZWdvcmllc1xuICAgIGNvbnN0IGl0ZW1zID0gYXdhaXQgdGhpcy5jYXRlZ29yeVRyZWVTZXJ2aWNlLmxvYWRSb290Q2F0ZWdvcmllcyh0aGlzLnRyZWVEYXRhISwgdGhpcy50cmVlQ29uZmlnISk7XG4gICAgaWYgKCFpdGVtcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3ROb2RlID0gYXdhaXQgdGhpcy5jYXRlZ29yeVRyZWVTZXJ2aWNlLmNyZWF0ZVJvb3ROb2RlKGl0ZW1zLCB0aGlzLnRyZWVDb25maWchKTtcblxuICAgIC8vIEZpbHRlciByb290J3MgY2hpbGRyZW4gd2hlbiBzZWFyY2ggaXMgYWN0aXZlXG4gICAgaWYgKHRoaXMucmVsZXZhbnROb2RlSWRzLnNpemUgPiAwICYmIHJvb3ROb2RlWydjaGlsZHJlbiddKSB7XG4gICAgICByb290Tm9kZVsnY2hpbGRyZW4nXSA9IChyb290Tm9kZVsnY2hpbGRyZW4nXSBhcyBBWFRyZWVWaWV3Tm9kZVtdKS5maWx0ZXIoKGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkSWQgPSBTdHJpbmcoY2hpbGRbJ2lkJ10gPz8gJycpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWxldmFudE5vZGVJZHMuaGFzKGNoaWxkSWQpO1xuICAgICAgfSk7XG4gICAgICByb290Tm9kZVsnY2hpbGRyZW5Db3VudCddID0gKHJvb3ROb2RlWydjaGlsZHJlbiddIGFzIEFYVHJlZVZpZXdOb2RlW10pLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3Jvb3ROb2RlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBjaGlsZCBub2RlcyBmb3IgYSBnaXZlbiBwYXJlbnQgSURcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZENoaWxkTm9kZXMocGFyZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhUcmVlVmlld05vZGVbXT4ge1xuICAgIGlmICghdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIG1pbmltYWwgbm9kZSBvYmplY3QgLSBsb2FkQ2hpbGRyZW4gb25seSBuZWVkcyBub2RlLmlkXG4gICAgY29uc3QgdGFyZ2V0Tm9kZTogQVhUcmVlVmlld05vZGUgPSB7XG4gICAgICBpZDogcGFyZW50SWQsXG4gICAgfSBhcyBBWFRyZWVWaWV3Tm9kZTtcblxuICAgIGxldCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlUcmVlU2VydmljZS5sb2FkQ2hpbGRyZW4odGFyZ2V0Tm9kZSwgdGhpcy50cmVlRGF0YSEsIHRoaXMudHJlZUNvbmZpZyEpO1xuXG4gICAgLy8gRmlsdGVyIGNoaWxkcmVuIHdoZW4gc2VhcmNoIGlzIGFjdGl2ZVxuICAgIGlmICh0aGlzLnJlbGV2YW50Tm9kZUlkcy5zaXplID4gMCkge1xuICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkSWQgPSBTdHJpbmcoY2hpbGRbJ2lkJ10gPz8gJycpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWxldmFudE5vZGVJZHMuaGFzKGNoaWxkSWQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgdHJlZSB2aWV3IGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSByZWZyZXNoVHJlZSgpOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlQ29tcG9uZW50ID0gdGhpcy50cmVlKCk7XG4gICAgaWYgKHRyZWVDb21wb25lbnQpIHtcbiAgICAgIHRyZWVDb21wb25lbnQucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdHJlZSBhZnRlciBDUlVEIG9wZXJhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaEFmdGVyQ2hhbmdlKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZWZyZXNoVHJlZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgbm9kZSB0byB0aGUgdHJlZSBhZnRlciBjcmVhdGUgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFkZE5vZGVUb1RyZWUoZW50aXR5RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzVHJlZUluaXRpYWxpemVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmVlQ29tcG9uZW50ID0gdGhpcy50cmVlKCk7XG4gICAgaWYgKCF0cmVlQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuY2F0ZWdvcnlUcmVlU2VydmljZS5jb252ZXJ0VG9UcmVlTm9kZShlbnRpdHlEYXRhLCB0aGlzLnRyZWVDb25maWchKTtcblxuICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRDaGlsZE5vZGUodHJlZUNvbXBvbmVudCwgcGFyZW50SWQsIG5ld05vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFJvb3ROb2RlKHRyZWVDb21wb25lbnQsIG5ld05vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgbm9kZSB0byBhIHBhcmVudCBub2RlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFkZENoaWxkTm9kZShcbiAgICB0cmVlQ29tcG9uZW50OiBBWFRyZWVWaWV3Q29tcG9uZW50LFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICAgbmV3Tm9kZTogQVhUcmVlVmlld05vZGUsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0cmVlQ29tcG9uZW50LmZpbmROb2RlKHBhcmVudElkKTtcbiAgICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFmdGVyQ2hhbmdlKHBhcmVudElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRyZWVDb21wb25lbnQuaXNOb2RlRXhwYW5kZWQocGFyZW50SWQpKSB7XG4gICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LmV4cGFuZE5vZGUocGFyZW50SWQpO1xuICAgIH1cblxuICAgIHRyZWVDb21wb25lbnQuYWRkQ2hpbGQocGFyZW50SWQsIG5ld05vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByb290IG5vZGUgdG8gdGhlIHRyZWVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYWRkUm9vdE5vZGUodHJlZUNvbXBvbmVudDogQVhUcmVlVmlld0NvbXBvbmVudCwgbmV3Tm9kZTogQVhUcmVlVmlld05vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb290Tm9kZSA9IHRyZWVDb21wb25lbnQuZmluZE5vZGUoUk9PVF9OT0RFX0lEKTtcbiAgICBpZiAoIXJvb3ROb2RlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBZnRlckNoYW5nZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdHJlZUNvbXBvbmVudC5pc05vZGVFeHBhbmRlZChST09UX05PREVfSUQpKSB7XG4gICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LmV4cGFuZE5vZGUoUk9PVF9OT0RFX0lEKTtcbiAgICB9XG5cbiAgICB0cmVlQ29tcG9uZW50LmFkZENoaWxkKFJPT1RfTk9ERV9JRCwgbmV3Tm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBub2RlIGluIHRoZSB0cmVlIGFmdGVyIGVkaXQgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwZGF0ZU5vZGVJblRyZWUobm9kZUlkOiBzdHJpbmcsIGVudGl0eURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzVHJlZUluaXRpYWxpemVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmVlQ29tcG9uZW50ID0gdGhpcy50cmVlKCk7XG4gICAgaWYgKCF0cmVlQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdOb2RlID0gdHJlZUNvbXBvbmVudC5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghZXhpc3RpbmdOb2RlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hOb2RlUGFyZW50KGVudGl0eURhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHBhcmVudCBjaGFuZ2VkXG4gICAgY29uc3QgcGFyZW50S2V5ID0gdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlEZWY/LnBhcmVudEtleTtcbiAgICBsZXQgbmV3UGFyZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50S2V5ICYmIGVudGl0eURhdGFbcGFyZW50S2V5XSkge1xuICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSBTdHJpbmcoZW50aXR5RGF0YVtwYXJlbnRLZXldKTtcbiAgICAgIC8vICdhbGwnIG1lYW5zIHJvb3QsIHNvIHRyZWF0IGl0IGFzIHVuZGVmaW5lZFxuICAgICAgbmV3UGFyZW50SWQgPSBwYXJlbnRWYWx1ZSAhPT0gJ2FsbCcgJiYgcGFyZW50VmFsdWUgIT09ICcnID8gcGFyZW50VmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFBhcmVudCA9IHRyZWVDb21wb25lbnQuZ2V0UGFyZW50KG5vZGVJZCk7XG4gICAgY29uc3QgY3VycmVudFBhcmVudElkID0gY3VycmVudFBhcmVudCA/IFN0cmluZyhjdXJyZW50UGFyZW50WydpZCddID8/ICcnKSA6IHVuZGVmaW5lZDtcbiAgICAvLyBOb3JtYWxpemUgY3VycmVudCBwYXJlbnQ6ICdhbGwnIG1lYW5zIHJvb3QgKHVuZGVmaW5lZClcbiAgICBjb25zdCBub3JtYWxpemVkQ3VycmVudFBhcmVudElkID0gY3VycmVudFBhcmVudElkID09PSAnYWxsJyB8fCBjdXJyZW50UGFyZW50SWQgPT09ICcnID8gdW5kZWZpbmVkIDogY3VycmVudFBhcmVudElkO1xuXG4gICAgLy8gSGFuZGxlIHBhcmVudCBjaGFuZ2U6IG1vdmUgbm9kZSB0byBuZXcgcGFyZW50IGlmIHBhcmVudCBjaGFuZ2VkXG4gICAgaWYgKG5ld1BhcmVudElkICE9PSBub3JtYWxpemVkQ3VycmVudFBhcmVudElkKSB7XG4gICAgICAvLyBJZiBwYXJlbnQgY2hhbmdlZCwgbW92ZSB0aGUgbm9kZSBmaXJzdFxuICAgICAgY29uc3QgbW92ZWQgPSB0cmVlQ29tcG9uZW50Lm1vdmVOb2RlKG5vZGVJZCwgbmV3UGFyZW50SWQpO1xuXG4gICAgICBpZiAoIW1vdmVkKSB7XG4gICAgICAgIC8vIElmIG1vdmUgZmFpbGVkLCByZWZyZXNoIHRoZSB0cmVlIHRvIGVuc3VyZSBjb25zaXN0ZW5jeVxuICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hOb2RlUGFyZW50KGVudGl0eURhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFmdGVyIG1vdmluZywgd2UgbmVlZCB0byBlbnN1cmUgdGhlIG5ldyBwYXJlbnQgaXMgZXhwYW5kZWRcbiAgICAgIGlmIChuZXdQYXJlbnRJZCkge1xuICAgICAgICBpZiAoIXRyZWVDb21wb25lbnQuaXNOb2RlRXhwYW5kZWQobmV3UGFyZW50SWQpKSB7XG4gICAgICAgICAgYXdhaXQgdHJlZUNvbXBvbmVudC5leHBhbmROb2RlKG5ld1BhcmVudElkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTW92aW5nIHRvIHJvb3QgLSBlbnN1cmUgcm9vdCBpcyBleHBhbmRlZFxuICAgICAgICBpZiAoIXRyZWVDb21wb25lbnQuaXNOb2RlRXhwYW5kZWQoUk9PVF9OT0RFX0lEKSkge1xuICAgICAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQuZXhwYW5kTm9kZShST09UX05PREVfSUQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG5vZGUgcHJvcGVydGllcyAodGl0bGUsIGRhdGEsIGV0Yy4pXG4gICAgY29uc3QgdXBkYXRlZE5vZGUgPSB0aGlzLmNhdGVnb3J5VHJlZVNlcnZpY2UuY29udmVydFRvVHJlZU5vZGUoZW50aXR5RGF0YSwgdGhpcy50cmVlQ29uZmlnISk7XG4gICAgY29uc3QgdXBkYXRlczogUGFydGlhbDxBWFRyZWVWaWV3Tm9kZT4gPSB7XG4gICAgICBbJ3RpdGxlJ106IHVwZGF0ZWROb2RlWyd0aXRsZSddLFxuICAgICAgWydkYXRhJ106IHVwZGF0ZWROb2RlWydkYXRhJ10sXG4gICAgICBbJ2NoaWxkcmVuQ291bnQnXTogdXBkYXRlZE5vZGVbJ2NoaWxkcmVuQ291bnQnXSxcbiAgICAgIFsnaWNvbiddOiB1cGRhdGVkTm9kZVsnaWNvbiddLFxuICAgIH07XG5cbiAgICB0cmVlQ29tcG9uZW50LmVkaXROb2RlKG5vZGVJZCwgdXBkYXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgdHJlZSBhZnRlciBkZWxldGUgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlbW92ZU5vZGVGcm9tVHJlZShub2RlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRyZWVDb21wb25lbnQgPSB0aGlzLnRyZWUoKTtcbiAgICBpZiAoIXRyZWVDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlVG9EZWxldGUgPSB0cmVlQ29tcG9uZW50LmZpbmROb2RlKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlVG9EZWxldGUpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFmdGVyQ2hhbmdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJlZUNvbXBvbmVudC5yZW1vdmVOb2RlKG5vZGVJZCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFdvcmtmbG93IEV4ZWN1dGlvbiBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY3JlYXRlIGVudGl0eSB3b3JrZmxvd1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ3JlYXRlV29ya2Zsb3cocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q29udGV4dD4ge1xuICAgIGNvbnN0IGVudGl0eUtleSA9IHRoaXMuY2F0ZWdvcnlFbnRpdHlLZXkoKTtcbiAgICBjb25zdCB3b3JrZmxvd0RhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBpZiAocGFyZW50SWQgJiYgdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlEZWY/LnBhcmVudEtleSkge1xuICAgICAgd29ya2Zsb3dEYXRhW3RoaXMudHJlZURhdGEuY2F0ZWdvcnlFbnRpdHlEZWYucGFyZW50S2V5XSA9IHBhcmVudElkO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ2NyZWF0ZS1lbnRpdHknLCB7XG4gICAgICBlbnRpdHk6IGVudGl0eUtleSxcbiAgICAgIGRhdGE6IE9iamVjdC5rZXlzKHdvcmtmbG93RGF0YSkubGVuZ3RoID4gMCA/IHdvcmtmbG93RGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgIG9wdGlvbnM6IHsgcHJvY2VzczogeyByZWRpcmVjdDogZmFsc2UsIGNhbkNyZWF0ZU5ld09uZTogISFwYXJlbnRJZCB9IH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIG1vZGlmeSBlbnRpdHkgd29ya2Zsb3dcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZU1vZGlmeVdvcmtmbG93KG5vZGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8QVhQV29ya2Zsb3dDb250ZXh0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgncXVpY2stbW9kaWZ5LWVudGl0eScsIHtcbiAgICAgIGVudGl0eTogdGhpcy5jYXRlZ29yeUVudGl0eUtleSgpLFxuICAgICAgZGF0YTogbm9kZURhdGEsXG4gICAgICBvcHRpb25zOiB7IGxheW91dDogeyBzaXplOiAnbWQnIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgZGVsZXRlIGVudGl0eSB3b3JrZmxvd1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlRGVsZXRlV29ya2Zsb3cobm9kZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxBWFBXb3JrZmxvd0NvbnRleHQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy53b3JrZmxvdy5leGVjdXRlKCdkZWxldGUtZW50aXR5Jywge1xuICAgICAgZW50aXR5OiB0aGlzLmNhdGVnb3J5RW50aXR5S2V5KCksXG4gICAgICBkYXRhOiBub2RlRGF0YSxcbiAgICAgIG9wdGlvbnM6IHsgcHJvY2VzczogeyBzaG93UmVzdWx0OiB0cnVlIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSByZXN1bHQgb2YgYSBjcmVhdGUgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZUNyZWF0ZVJlc3VsdChjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQsIHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5nZXRPdXRwdXQ8Ym9vbGVhbj4oJ3Jlc3VsdCcpO1xuICAgIGlmICghcmVzdWx0IHx8ICF0aGlzLmlzVHJlZUluaXRpYWxpemVkKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFmdGVyQ2hhbmdlKHBhcmVudElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdFbnRpdHlEYXRhID0gY29udGV4dC5nZXRWYXJpYWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oJ2RhdGEnKTtcbiAgICBpZiAobmV3RW50aXR5RGF0YSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGROb2RlVG9UcmVlKG5ld0VudGl0eURhdGEsIHBhcmVudElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWZ0ZXJDaGFuZ2UocGFyZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSByZXN1bHQgb2YgYSBtb2RpZnkgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZU1vZGlmeVJlc3VsdChjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQsIG5vZGU6IEFYVHJlZVZpZXdOb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5nZXRPdXRwdXQ8Ym9vbGVhbj4oJ3Jlc3VsdCcpO1xuICAgIGlmICghcmVzdWx0IHx8ICF0aGlzLmlzVHJlZUluaXRpYWxpemVkKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaE5vZGVQYXJlbnQodGhpcy5leHRyYWN0Tm9kZURhdGEobm9kZSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRFbnRpdHlEYXRhID0gY29udGV4dC5nZXRWYXJpYWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oJ2RhdGEnKTtcbiAgICBpZiAodXBkYXRlZEVudGl0eURhdGEpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlTm9kZUluVHJlZSh0aGlzLmV4dHJhY3ROb2RlSWQobm9kZSksIHVwZGF0ZWRFbnRpdHlEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoTm9kZVBhcmVudCh0aGlzLmV4dHJhY3ROb2RlRGF0YShub2RlKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHJlc3VsdCBvZiBhIGRlbGV0ZSBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRGVsZXRlUmVzdWx0KGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCwgbm9kZTogQVhUcmVlVmlld05vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmdldE91dHB1dDxib29sZWFuPigncmVzdWx0Jyk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVOb2RlRnJvbVRyZWUodGhpcy5leHRyYWN0Tm9kZUlkKG5vZGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoTm9kZVBhcmVudCh0aGlzLmV4dHJhY3ROb2RlRGF0YShub2RlKSk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBVdGlsaXR5IE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0cmVlIGRhdGEgYW5kIGNvbmZpZyBhcmUgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHByaXZhdGUgaXNUcmVlSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMudHJlZURhdGEgJiYgdGhpcy50cmVlQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBub2RlIGRhdGEgZnJvbSBhIHRyZWUgbm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0Tm9kZURhdGEobm9kZTogQVhUcmVlVmlld05vZGUpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuICgobm9kZVsnZGF0YSddIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB8fCBub2RlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBub2RlIElEIGZyb20gYSB0cmVlIG5vZGVcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdE5vZGVJZChub2RlOiBBWFRyZWVWaWV3Tm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyhub2RlWydpZCddID8/ICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgY2F0ZWdvcnkgZmlsdGVycyBmcm9tIG5vZGUgZGF0YSBhbmQgYXBwbHkgY29uZGl0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZENhdGVnb3J5RmlsdGVycyhcbiAgICBub2RlRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgYXBwbHlDb25kaXRpb25zOiBBWFBRdWVyeUZpbHRlcltdLFxuICApOiBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIGFwcGx5Q29uZGl0aW9uc1xuICAgICAgLm1hcCgoY29uZGl0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbm9kZURhdGFbY29uZGl0aW9uLnZhbHVlXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnYWxsJyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmaWVsZDogY29uZGl0aW9uLm5hbWUsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbi5vcGVyYXRvcixcbiAgICAgICAgfSBhcyBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb247XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgTm9uTnVsbGFibGU8dHlwZW9mIGl0ZW0+ID0+IGl0ZW0gIT09IG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB2aWV3IGZpbHRlcnMgZnJvbSB2aWV3IGNvbmRpdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRWaWV3RmlsdGVycygpOiBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMudm0oKVxuICAgICAgLnZpZXcoKVxuICAgICAgLmNvbmRpdGlvbnMubWFwKChjb25kaXRpb24pID0+ICh7IC4uLmNvbmRpdGlvbiwgZmllbGQ6IGNvbmRpdGlvbi5uYW1lIH0pIGFzIEFYRGF0YVNvdXJjZUZpbHRlck9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSBwYXJlbnQgbm9kZSBvZiB0aGUgZ2l2ZW4gZW50aXR5IGRhdGFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaE5vZGVQYXJlbnQoZW50aXR5RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJlbnRLZXkgPSB0aGlzLnRyZWVEYXRhPy5jYXRlZ29yeUVudGl0eURlZj8ucGFyZW50S2V5O1xuICAgIGNvbnN0IHBhcmVudElkID0gcGFyZW50S2V5ICYmIGVudGl0eURhdGFbcGFyZW50S2V5XSA/IChlbnRpdHlEYXRhW3BhcmVudEtleV0gYXMgc3RyaW5nKSA6IHVuZGVmaW5lZDtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hBZnRlckNoYW5nZShwYXJlbnRJZCk7XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudHMgZGVmYXVsdCBiZWhhdmlvciBhbmQgc3RvcHMgZXZlbnQgcHJvcGFnYXRpb25cbiAgICovXG4gIHByaXZhdGUgcHJldmVudERlZmF1bHRBbmRTdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEFYQ2xpY2tFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIExvYWRpbmcgU3RhdGUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAvKipcbiAgICogU2V0cyBsb2FkaW5nIHN0YXRlIHdpdGggZGVsYXkgdG8gYXZvaWQgZmxpY2tlcmluZyBmb3IgZmFzdCByZXNwb25zZXNcbiAgICovXG4gIHByaXZhdGUgc2V0TG9hZGluZ1dpdGhEZWxheShsb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFsb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9hZGluZ1RpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgIH0sIExPQURJTkdfREVMQVlfTVMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBsb2FkaW5nIHN0YXRlIGFuZCBjYW5jZWxzIGFueSBwZW5kaW5nIHRpbWVvdXRcbiAgICovXG4gIHByaXZhdGUgY2xlYXJMb2FkaW5nU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1RpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXRJZCk7XG4gICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cbiIsIjxheHAtbGF5b3V0LWhlYWRlcj5cbiAgPGF4cC1sYXlvdXQtdGl0bGU+e3tcbiAgICB2bSgpLmVudGl0eURlZi5jYXRlZ29yeT8udGl0bGUgfHwgJ0BnZW5lcmFsOnRlcm1zLmNsYXNzaWZpY2F0aW9uLmNhdGVnb3J5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXG4gIH19PC9heHAtbGF5b3V0LXRpdGxlPlxuICA8YXhwLWxheW91dC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0xIGF4LXctZnVsbFwiPlxuICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImhhbmRsZUNhdGVnb3J5U2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGVsYXlUaW1lXT1cIjMwMFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInQGdlbmVyYWw6dGVybXMuaW50ZXJmYWNlLmNhdGVnb3J5LnNlYXJjaC5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICA+XG4gICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgICBAaWYgKGlzU2VhcmNoaW5nKCkgJiYgY3VycmVudFNlYXJjaFZhbHVlKCkudHJpbSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LXhzIGF4LXRleHQtbXV0ZWQgYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTFcIj5cbiAgICAgICAgICA8c3Bhbj57eyAnQGdlbmVyYWw6dGVybXMuaW50ZXJmYWNlLmNhdGVnb3J5LnNlYXJjaC5zZWFyY2hpbmcnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAoY3VycmVudFNlYXJjaFZhbHVlKCkudHJpbSgpICYmICFpc1NlYXJjaGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LXhzIGF4LXRleHQtbXV0ZWQgYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTFcIj5cbiAgICAgICAgICBAaWYgKHNlYXJjaFJlc3VsdENvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyByZXN1bHRzRm91bmRUZXh0KCkgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9heHAtbGF5b3V0LXRvb2xiYXI+XG48L2F4cC1sYXlvdXQtaGVhZGVyPlxuPGF4cC1sYXlvdXQtY29udGVudD5cbiAgQGlmIChpc0xvYWRpbmcoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJheC1wLTQgYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtM1wiPlxuICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtNiBheC1yb3VuZGVkLW1kXCI+PC9heC1za2VsZXRvbj5cbiAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTYgYXgtcm91bmRlZC1tZFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LWZ1bGwgYXgtaC02IGF4LXJvdW5kZWQtbWRcIj48L2F4LXNrZWxldG9uPlxuICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtNiBheC1yb3VuZGVkLW1kXCI+PC9heC1za2VsZXRvbj5cbiAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTYgYXgtcm91bmRlZC1tZFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LWZ1bGwgYXgtaC02IGF4LXJvdW5kZWQtbWRcIj48L2F4LXNrZWxldG9uPlxuICAgIDwvZGl2PlxuICB9IEBlbHNlIGlmIChzaG93Tm9TZWFyY2hSZXN1bHRzKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiX19lbXB0eS1zdGF0ZVwiPlxuICAgICAgPGF4cC1zdGF0ZS1tZXNzYWdlXG4gICAgICAgIGljb249XCJmYS1saWdodCBmYS1zZWFyY2hcIlxuICAgICAgICBbdGl0bGVdPVwiJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gubm8tcmVzdWx0cy1mb3VuZC50aXRsZSdcIlxuICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gubm8tcmVzdWx0cy1mb3VuZC5kZXNjcmlwdGlvbidcIlxuICAgICAgPlxuICAgICAgPC9heHAtc3RhdGUtbWVzc2FnZT5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSBpZiAodHJlZURhdGEpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtcHgtNCBheC1tYXgtaC1bY2FsYygxMDB2aC0yNTBweCldIGF4LW92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxheC10cmVlLXZpZXdcbiAgICAgICAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gICAgICAgIFtzZWxlY3RNb2RlXT1cInNlbGVjdE1vZGUoKVwiXG4gICAgICAgIFtzZWxlY3Rpb25CZWhhdmlvcl09XCJzZWxlY3Rpb25CZWhhdmlvcigpXCJcbiAgICAgICAgW2RyYWdBcmVhXT1cImRyYWdBcmVhKClcIlxuICAgICAgICBbZHJhZ0JlaGF2aW9yXT1cImRyYWdCZWhhdmlvcigpXCJcbiAgICAgICAgW3Nob3dJY29uc109XCJzaG93SWNvbnMoKVwiXG4gICAgICAgIFtzaG93Q2hpbGRyZW5CYWRnZV09XCJzaG93Q2hpbGRyZW5CYWRnZSgpXCJcbiAgICAgICAgW2V4cGFuZGVkSWNvbl09XCJleHBhbmRlZEljb24oKVwiXG4gICAgICAgIFtjb2xsYXBzZWRJY29uXT1cImNvbGxhcHNlZEljb24oKVwiXG4gICAgICAgIFtpbmRlbnRTaXplXT1cImluZGVudFNpemUoKVwiXG4gICAgICAgIFtsb29rXT1cImxvb2soKVwiXG4gICAgICAgIFt0aXRsZUZpZWxkXT1cInRleHRGaWVsZCgpXCJcbiAgICAgICAgW2lkRmllbGRdPVwidmFsdWVGaWVsZCgpXCJcbiAgICAgICAgW2V4cGFuZE9uRG91YmxlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgIFtub2RlVGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgKG9uTm9kZVRvZ2dsZSk9XCJvbk5vZGVUb2dnbGUoJGV2ZW50KVwiXG4gICAgICAgIChvbk5vZGVDbGljayk9XCJoYW5kbGVOb2RlQ2xpY2soJGV2ZW50Lm5vZGUpXCJcbiAgICAgICAgI3RyZWVcbiAgICAgID5cbiAgICAgIDwvYXgtdHJlZS12aWV3PlxuICAgIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwiX19lbXB0eS1zdGF0ZVwiPlxuICAgICAgPGF4cC1zdGF0ZS1tZXNzYWdlXG4gICAgICAgIGljb249XCJmYS1saWdodCBmYS1mb2xkZXItb3BlblwiXG4gICAgICAgIFt0aXRsZV09XCInQGdlbmVyYWw6dGVybXMuaW50ZXJmYWNlLmNhdGVnb3J5LnNlYXJjaC5uby1yZWNvcmRzLnRpdGxlJ1wiXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCInQGdlbmVyYWw6dGVybXMuaW50ZXJmYWNlLmNhdGVnb3J5LnNlYXJjaC5uby1yZWNvcmRzLmRlc2NyaXB0aW9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICBzbG90PVwiYWN0aW9uc1wiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlQ3JlYXRlUm9vdENsaWNrKCRldmVudClcIlxuICAgICAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICBbdGV4dF09XCInQGdlbmVyYWw6YWN0aW9ucy5hZGQtbmV3LnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgPC9heHAtc3RhdGUtbWVzc2FnZT5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1ub2RlPVwibm9kZVwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gICAgQGxldCBpdGVtID0gbm9kZS5kYXRhIHx8IG5vZGU7XG4gICAgQGxldCB0ZXh0RmllbGQgPSB2bSgpLmVudGl0eURlZi5jYXRlZ29yeT8udGV4dEZpZWxkIHx8ICd0aXRsZSc7XG4gICAgQGxldCB2YWx1ZUZpZWxkID0gdm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LnZhbHVlRmllbGQgfHwgJ2lkJztcbiAgICBAbGV0IGl0ZW1JZCA9IGl0ZW1bdmFsdWVGaWVsZF0gfHwgbm9kZS5pZDtcbiAgICBAbGV0IGl0ZW1UaXRsZSA9IGl0ZW1bdGV4dEZpZWxkXSB8fCBub2RlLnRpdGxlO1xuICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtdy1mdWxsIGF4LWdhcC0yIGF4LW92ZXJmbG93LWhpZGRlbiBheC1weS0xXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTIgYXgtbWluLXctMFwiPlxuICAgICAgICA8YXgtaWNvblxuICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZvbGRlclwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIml0ZW0uY29sb3IgPz8gJ3JnYmEodmFyKC0tYXgtc3lzLWNvbG9yLXdhcm5pbmctNTAwKSwgMSknXCJcbiAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cnVuY2F0ZVwiPnt7IGl0ZW1UaXRsZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChpdGVtSWQgJiYgaXRlbUlkICE9PSAnYWxsJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTFcIj5cbiAgICAgICAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXgteHNcIiBjb2xvcj1cImRlZmF1bHRcIiBsb29rPVwiYmxhbmtcIiAob25DbGljayk9XCIkZXZlbnQubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGZhLWVsbGlwc2lzLXZcIj48L2F4LWljb24+XG4gICAgICAgICAgICA8YXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlQ3JlYXRlQ2hpbGRDbGljayhub2RlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGxvb2s9XCJibGFua1wiXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgdGV4dD1cIkFkZCBOZXcgQ2hpbGRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKG9uQ2xpY2spPVwiaGFuZGxlRWRpdE5vZGVDbGljayhub2RlLCAkZXZlbnQpXCIgbG9vaz1cImJsYW5rXCIgdGV4dD1cIkVkaXRcIj5cbiAgICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGZhLXBlblwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlRGVsZXRlTm9kZUNsaWNrKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgbG9vaz1cImJsYW5rXCJcbiAgICAgICAgICAgICAgICAgIHRleHQ9XCJEZWxldGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAoaXRlbUlkID09PSAnYWxsJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTFcIj5cbiAgICAgICAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXgteHNcIiAob25DbGljayk9XCJoYW5kbGVDcmVhdGVSb290Q2xpY2soJGV2ZW50KVwiIGxvb2s9XCJibGFua1wiIGNvbG9yPVwiZGVmYXVsdFwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYXMgZmEtcGx1c1wiPjwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2F4cC1sYXlvdXQtY29udGVudD5cbiJdfQ==","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPDeviceService, } from '@acorex/platform/core';\nimport { AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, } from '@acorex/platform/layout/components';\nimport { AXPEntityListViewColumnViewModel, AXPEntityMasterListViewModel } from '@acorex/platform/layout/entity';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, Input, signal, ViewEncapsulation, } from '@angular/core';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { isEqual } from 'lodash-es';\nimport { AXPEntityMasterListViewComponent } from '../entity-master-list-view/entity-master-list-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/components/decorators\";\nimport * as i3 from \"@acorex/components/popover\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@acorex/core/translation\";\nexport class AXPEntityMasterToolbarViewComponent {\n constructor() {\n this.layoutService = inject(AXPLayoutThemeService);\n this.deviceService = inject(AXPDeviceService);\n this.parent = inject(AXPEntityMasterListViewComponent);\n this.router = inject(Router);\n this.activeRoute = inject(ActivatedRoute);\n this.settingsService = inject(AXPSettingsService);\n this.isInitializing = false;\n this.pendingInitialFilters = true;\n this.pendingInitialSorts = true;\n this.filterTriggerMode = 'manual';\n this.previousFilterQueries = signal([], ...(ngDevMode ? [{ debugName: \"previousFilterQueries\" }] : []));\n this.initialFilters = signal([], ...(ngDevMode ? [{ debugName: \"initialFilters\" }] : []));\n this.filtersDefinitions = signal([], ...(ngDevMode ? [{ debugName: \"filtersDefinitions\" }] : []));\n this.viewQueries = computed(() => this.vm.views().map((v) => ({\n name: v.name,\n fixed: false,\n title: v.title,\n columns: v.columns,\n conditions: v.conditions.map((c) => ({\n field: c.name,\n operator: c.operator,\n value: c.value,\n })),\n sorts: v.sorts,\n })), ...(ngDevMode ? [{ debugName: \"viewQueries\" }] : []));\n this.selectedViewQuery = computed(() => ({\n name: this.vm.view().name,\n fixed: false,\n title: this.vm.view().title,\n columns: this.vm.view().columns,\n conditions: this.vm.view().conditions.map((c) => ({\n field: c.name,\n operator: c.operator,\n value: c.value,\n })),\n sorts: this.vm.view().sorts,\n }), ...(ngDevMode ? [{ debugName: \"selectedViewQuery\" }] : []));\n this.isFiltersDirty = computed(() => !isEqual(this.vm.filterQueries(), this.previousFilterQueries()), ...(ngDevMode ? [{ debugName: \"isFiltersDirty\" }] : []));\n // Debounced apply to coalesce multiple UI changes (filters/sorts/columns)\n this.applyTimer = null;\n this.#effect = effect(() => {\n // Keep definitions up to date; initial filters are set explicitly from settings or view\n this.filtersDefinitions.set(this.vm.filtersDef);\n }, ...(ngDevMode ? [{ debugName: \"#effect\" }] : []));\n this.sortQueries = computed(() => this.vm\n .sortedFields()\n .filter((s) => !!s.dir)\n .map((s) => ({ name: s.name, dir: s.dir })), ...(ngDevMode ? [{ debugName: \"sortQueries\" }] : []));\n this.sortDefinitions = computed(() => this.vm.sortableFields().map((s) => ({\n name: s.name,\n title: s.title,\n dir: s.dir,\n })), ...(ngDevMode ? [{ debugName: \"sortDefinitions\" }] : []));\n }\n async ngOnInit() {\n // Prefer saved settings (view/columns/sorts/filters) if available, then apply\n await this.loadSettings();\n await this.vm.setView();\n this.filtersDefinitions.set(this.vm.filtersDef);\n this.isInitializing = true;\n // this.pendingInitialFilters = true;\n // this.pendingInitialSorts = true;\n this.setInitialFiltersFromSettingsOrView();\n // Ensure initial load even when filters/sorts are absent\n setTimeout(() => {\n this.isInitializing = false;\n this.scheduleApply();\n }, 0);\n }\n async loadSettings() {\n const filterTriggerMode = await this.settingsService.get(AXPCommonSettings.EntityFilterApplyMode);\n this.filterTriggerMode = (filterTriggerMode?.value ?? 'auto');\n }\n scheduleApply() {\n clearTimeout(this.applyTimer);\n this.applyTimer = setTimeout(() => {\n this.vm.applyFilterAndSort();\n }, 50);\n }\n async onViewChanged(view) {\n await this.vm.setView(view.name);\n // Sync query param immediately on tab change\n this.router.navigate([], {\n relativeTo: this.activeRoute,\n queryParams: { view: view.name },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n this.isInitializing = true;\n this.pendingInitialFilters = true;\n this.pendingInitialSorts = true;\n this.setInitialFiltersFromSettingsOrView();\n // Ensure initial load after view change\n setTimeout(() => {\n this.isInitializing = false;\n this.scheduleApply();\n }, 0);\n }\n #effect;\n setInitialFiltersFromSettingsOrView() {\n const saved = this.vm.filterQueries();\n this.previousFilterQueries.set(saved);\n const viewConditions = this.vm.view().conditions.map((c) => c.name);\n if (saved && saved.length) {\n this.initialFilters.set(saved.map((s) => ({ ...s, hidden: viewConditions.includes(s.field) })));\n return;\n }\n this.initialFilters.set(this.vm.view().conditions.map((c) => ({\n field: c.name,\n operator: c.operator,\n value: c.value,\n hidden: true,\n })));\n }\n onFiltersChanged(filters) {\n if (this.isInitializing || this.pendingInitialFilters) {\n this.pendingInitialFilters = false;\n return;\n }\n this.vm.filterQueries.set(filters);\n if (this.filterTriggerMode === 'auto') {\n this.applyFilters();\n }\n }\n applyFilters() {\n this.previousFilterQueries.set(this.vm.filterQueries());\n this.vm.saveSettings('filters', this.vm.filterQueries());\n this.scheduleApply();\n }\n onSortQueriesChange(e) {\n if (this.isInitializing || this.pendingInitialSorts) {\n this.pendingInitialSorts = false;\n return;\n }\n this.vm.sortedFields.set(e.map((s) => ({\n name: s.name,\n title: s.name,\n dir: s.dir,\n })));\n // Persist sorts per module/entity/view\n this.vm.saveSettings('sorts', e);\n this.scheduleApply();\n }\n onColumnsChange(columns) {\n const keyOf = (c) => c.column?.options?.dataPath ?? c.name;\n this.vm.columns.update((prev) => {\n const byKey = new Map(prev.map((c) => [keyOf(c), c]));\n return columns.map((newColumn) => {\n const existing = byKey.get(keyOf(newColumn));\n return new AXPEntityListViewColumnViewModel(existing.property, {\n ...existing.column,\n options: {\n ...existing.column.options,\n visible: newColumn.visible,\n },\n });\n });\n });\n // Persist column order/visibility\n this.vm.onColumnsChanged(this.vm.columns());\n // Use debounced apply to avoid triple refresh when combined with sorts/filters\n // this.scheduleApply();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXPEntityMasterToolbarViewComponent, isStandalone: true, selector: \"axp-entity-master-toolbar-view\", inputs: { vm: [\"viewModel\", \"vm\"] }, host: { classAttribute: \"ax-w-full\" }, ngImport: i0, template: \"<!-- <axp-entity-view-toolbar [viewModel]=\\\"vm\\\"></axp-entity-view-toolbar> -->\\n<axp-query-views\\n id=\\\"axp-toolbar-view-selector\\\"\\n [views]=\\\"viewQueries()\\\"\\n [selectedView]=\\\"selectedViewQuery()\\\"\\n (selectedViewChange)=\\\"onViewChanged($event)\\\"\\n></axp-query-views>\\n<div class=\\\"ax-flex ax-items-center ax-gap-2 ax-border-b ax-border-light w-full\\\">\\n <!-- <axp-entity-filter-toolbar [viewModel]=\\\"vm\\\"></axp-entity-filter-toolbar> -->\\n <axp-query-filters\\n id=\\\"axp-toolbar-filters\\\"\\n [filtersDefinitions]=\\\"filtersDefinitions()\\\"\\n [initialFilters]=\\\"initialFilters()\\\"\\n (onFiltersChanged)=\\\"onFiltersChanged($event)\\\"\\n ></axp-query-filters>\\n\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 md:ax-gap-2\\\">\\n @if (filterTriggerMode === 'manual' && isFiltersDirty()) {\\n <ax-button\\n id=\\\"axp-toolbar-btn-filter\\\"\\n [title]=\\\"'@general:actions.apply.title'\\\"\\n [iconOnly]=\\\"true\\\"\\n #filterButton\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"applyFilters()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-search\\\"></i>\\n </ax-prefix>\\n </ax-button>\\n }\\n <div>\\n <ax-button id=\\\"axp-toolbar-btn-columns\\\" [iconOnly]=\\\"true\\\" #columnButton [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-table-columns\\\"></i>\\n </ax-button>\\n <ax-popover\\n id=\\\"axp-popover-columns\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n [offsetY]=\\\"30\\\"\\n [target]=\\\"columnButton\\\"\\n [openOn]=\\\"'toggle'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n #popover\\n >\\n <div class=\\\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\\\">\\n <ax-header class=\\\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\\\">\\n {{ '@general:terms.common.columns' | translate | async }}\\n </ax-header>\\n <div class=\\\"ax-py-2 ax-px-4\\\">\\n <axp-query-columns [columns]=\\\"vm.columns()\\\" (columnsChange)=\\\"onColumnsChange($event)\\\"></axp-query-columns>\\n <!-- <axp-list-view-option-columns [viewModel]=\\\"vm\\\"></axp-list-view-option-columns> -->\\n </div>\\n </div>\\n </ax-popover>\\n </div>\\n\\n @if (vm.canSort()) {\\n <div>\\n <ax-button id=\\\"axp-toolbar-btn-sort\\\" [iconOnly]=\\\"true\\\" [text]=\\\"'Sorts'\\\" #sortButton [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-sort-amount-up\\\"></i>\\n </ax-button>\\n <ax-popover\\n id=\\\"axp-popover-sort\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n [offsetY]=\\\"10\\\"\\n [target]=\\\"sortButton\\\"\\n [openOn]=\\\"'toggle'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n #popover\\n >\\n <div class=\\\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\\\">\\n <ax-header class=\\\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\\\">\\n {{ '@general:terms.common.sorts' | translate | async }}\\n </ax-header>\\n <div class=\\\"ax-py-2 ax-px-4\\\">\\n <!-- <axp-list-view-option-sorting [viewModel]=\\\"vm\\\"></axp-list-view-option-sorting> -->\\n <axp-query-sorts\\n [sortDefinitions]=\\\"sortDefinitions()\\\"\\n (sortQueriesChange)=\\\"onSortQueriesChange($event)\\\"\\n [initialSortQueries]=\\\"sortQueries()\\\"\\n ></axp-query-sorts>\\n </div>\\n </div>\\n </ax-popover>\\n </div>\\n }\\n @if (deviceService.isSmall()) {\\n <ax-button\\n id=\\\"axp-toolbar-btn-category\\\"\\n (onClick)=\\\"parent.toggleCategoryDrawer()\\\"\\n [iconOnly]=\\\"true\\\"\\n [color]=\\\"'default'\\\"\\n >\\n <i class=\\\"fa-light fa-bars\\\"></i>\\n </ax-button>\\n }\\n </div>\\n</div>\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i2.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXPQueryFiltersComponent, selector: \"axp-query-filters\", inputs: [\"filtersDefinitions\", \"initialFilters\"], outputs: [\"onFiltersChanged\"] }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"component\", type: i3.AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXPQuerySortsComponent, selector: \"axp-query-sorts\", inputs: [\"sortDefinitions\", \"initialSortQueries\"], outputs: [\"sortDefinitionsChange\", \"sortQueriesChange\"] }, { kind: \"component\", type: AXPQueryViewsComponent, selector: \"axp-query-views\", inputs: [\"views\", \"selectedView\"], outputs: [\"viewsChange\", \"selectedViewChange\"] }, { kind: \"component\", type: AXPQueryColumnsComponent, selector: \"axp-query-columns\", inputs: [\"columns\"], outputs: [\"columnsChange\"] }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-entity-master-toolbar-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPQueryFiltersComponent,\n AXPopoverModule,\n AXPQuerySortsComponent,\n AXPQueryViewsComponent,\n AXPQueryColumnsComponent,\n ], host: {\n class: 'ax-w-full',\n }, template: \"<!-- <axp-entity-view-toolbar [viewModel]=\\\"vm\\\"></axp-entity-view-toolbar> -->\\n<axp-query-views\\n id=\\\"axp-toolbar-view-selector\\\"\\n [views]=\\\"viewQueries()\\\"\\n [selectedView]=\\\"selectedViewQuery()\\\"\\n (selectedViewChange)=\\\"onViewChanged($event)\\\"\\n></axp-query-views>\\n<div class=\\\"ax-flex ax-items-center ax-gap-2 ax-border-b ax-border-light w-full\\\">\\n <!-- <axp-entity-filter-toolbar [viewModel]=\\\"vm\\\"></axp-entity-filter-toolbar> -->\\n <axp-query-filters\\n id=\\\"axp-toolbar-filters\\\"\\n [filtersDefinitions]=\\\"filtersDefinitions()\\\"\\n [initialFilters]=\\\"initialFilters()\\\"\\n (onFiltersChanged)=\\\"onFiltersChanged($event)\\\"\\n ></axp-query-filters>\\n\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 md:ax-gap-2\\\">\\n @if (filterTriggerMode === 'manual' && isFiltersDirty()) {\\n <ax-button\\n id=\\\"axp-toolbar-btn-filter\\\"\\n [title]=\\\"'@general:actions.apply.title'\\\"\\n [iconOnly]=\\\"true\\\"\\n #filterButton\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"applyFilters()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-search\\\"></i>\\n </ax-prefix>\\n </ax-button>\\n }\\n <div>\\n <ax-button id=\\\"axp-toolbar-btn-columns\\\" [iconOnly]=\\\"true\\\" #columnButton [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-table-columns\\\"></i>\\n </ax-button>\\n <ax-popover\\n id=\\\"axp-popover-columns\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n [offsetY]=\\\"30\\\"\\n [target]=\\\"columnButton\\\"\\n [openOn]=\\\"'toggle'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n #popover\\n >\\n <div class=\\\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\\\">\\n <ax-header class=\\\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\\\">\\n {{ '@general:terms.common.columns' | translate | async }}\\n </ax-header>\\n <div class=\\\"ax-py-2 ax-px-4\\\">\\n <axp-query-columns [columns]=\\\"vm.columns()\\\" (columnsChange)=\\\"onColumnsChange($event)\\\"></axp-query-columns>\\n <!-- <axp-list-view-option-columns [viewModel]=\\\"vm\\\"></axp-list-view-option-columns> -->\\n </div>\\n </div>\\n </ax-popover>\\n </div>\\n\\n @if (vm.canSort()) {\\n <div>\\n <ax-button id=\\\"axp-toolbar-btn-sort\\\" [iconOnly]=\\\"true\\\" [text]=\\\"'Sorts'\\\" #sortButton [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-sort-amount-up\\\"></i>\\n </ax-button>\\n <ax-popover\\n id=\\\"axp-popover-sort\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n [offsetY]=\\\"10\\\"\\n [target]=\\\"sortButton\\\"\\n [openOn]=\\\"'toggle'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n #popover\\n >\\n <div class=\\\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\\\">\\n <ax-header class=\\\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\\\">\\n {{ '@general:terms.common.sorts' | translate | async }}\\n </ax-header>\\n <div class=\\\"ax-py-2 ax-px-4\\\">\\n <!-- <axp-list-view-option-sorting [viewModel]=\\\"vm\\\"></axp-list-view-option-sorting> -->\\n <axp-query-sorts\\n [sortDefinitions]=\\\"sortDefinitions()\\\"\\n (sortQueriesChange)=\\\"onSortQueriesChange($event)\\\"\\n [initialSortQueries]=\\\"sortQueries()\\\"\\n ></axp-query-sorts>\\n </div>\\n </div>\\n </ax-popover>\\n </div>\\n }\\n @if (deviceService.isSmall()) {\\n <ax-button\\n id=\\\"axp-toolbar-btn-category\\\"\\n (onClick)=\\\"parent.toggleCategoryDrawer()\\\"\\n [iconOnly]=\\\"true\\\"\\n [color]=\\\"'default'\\\"\\n >\\n <i class=\\\"fa-light fa-bars\\\"></i>\\n </ax-button>\\n }\\n </div>\\n</div>\\n\" }]\n }], propDecorators: { vm: [{\n type: Input,\n args: ['viewModel']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcvZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcvZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBRUwsZ0JBQWdCLEdBTWpCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixHQUN2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0ws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QUFRLENBQUMsUUFBUSxFQUFFO29CQUM3RCxHQUFHLFFBQVEsQ0FBQyxNQUFNO29CQUNsQixPQUFPLEVBQUU7d0JBQ1AsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU87d0JBQzFCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztxQkFDM0I7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILGtDQUFrQztRQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1QywrRUFBK0U7UUFDL0Usd0JBQXdCO0lBQzFCLENBQUM7K0dBdE1VLG1DQUFtQzttR0FBbkMsbUNBQW1DLHNLQzNEaEQsbXZIQWtHQSwyQ0RyREksWUFBWSw4QkFDWixjQUFjLDZYQUNkLGlCQUFpQixxUEFDakIsbUJBQW1CLCtCQUNuQix3QkFBd0IsOElBQ3hCLGVBQWUsd1ZBQ2Ysc0JBQXNCLHdLQUN0QixzQkFBc0IsK0lBQ3RCLHdCQUF3Qjs7NEZBTWYsbUNBQW1DO2tCQXJCL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsaUJBRTNCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLHNCQUFzQjt3QkFDdEIsc0JBQXNCO3dCQUN0Qix3QkFBd0I7cUJBQ3pCLFFBQ0s7d0JBQ0osS0FBSyxFQUFFLFdBQVc7cUJBQ25COztzQkF1Q0EsS0FBSzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQge1xuICBBWFBDb2x1bW5RdWVyeSxcbiAgQVhQRGV2aWNlU2VydmljZSxcbiAgQVhQRmlsdGVyRGVmaW5pdGlvbixcbiAgQVhQRmlsdGVyUXVlcnksXG4gIEFYUFNvcnREZWZpbml0aW9uLFxuICBBWFBTb3J0UXVlcnksXG4gIEFYUFZpZXdRdWVyeSxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7XG4gIEFYUFF1ZXJ5Q29sdW1uc0NvbXBvbmVudCxcbiAgQVhQUXVlcnlGaWx0ZXJzQ29tcG9uZW50LFxuICBBWFBRdWVyeVNvcnRzQ29tcG9uZW50LFxuICBBWFBRdWVyeVZpZXdzQ29tcG9uZW50LFxufSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYUEVudGl0eUxpc3RWaWV3Q29sdW1uVmlld01vZGVsLCBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUExheW91dFRoZW1lU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vdGhlbWVzL3NoYXJlZCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYUENvbW1vblNldHRpbmdzLCBBWFBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9lbnRpdHktbWFzdGVyLWxpc3Qtdmlldy9lbnRpdHktbWFzdGVyLWxpc3Qtdmlldy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheHAtZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYUFF1ZXJ5RmlsdGVyc0NvbXBvbmVudCxcbiAgICBBWFBvcG92ZXJNb2R1bGUsXG4gICAgQVhQUXVlcnlTb3J0c0NvbXBvbmVudCxcbiAgICBBWFBRdWVyeVZpZXdzQ29tcG9uZW50LFxuICAgIEFYUFF1ZXJ5Q29sdW1uc0NvbXBvbmVudCxcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYXgtdy1mdWxsJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TWFzdGVyVG9vbGJhclZpZXdDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgbGF5b3V0U2VydmljZSA9IGluamVjdChBWFBMYXlvdXRUaGVtZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgZGV2aWNlU2VydmljZSA9IGluamVjdChBWFBEZXZpY2VTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHBhcmVudCA9IGluamVjdChBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld0NvbXBvbmVudCk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgYWN0aXZlUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHNldHRpbmdzU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nc1NlcnZpY2UpO1xuXG4gIHByaXZhdGUgaXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBwZW5kaW5nSW5pdGlhbEZpbHRlcnMgPSB0cnVlO1xuICBwcml2YXRlIHBlbmRpbmdJbml0aWFsU29ydHMgPSB0cnVlO1xuXG4gIHByb3RlY3RlZCBmaWx0ZXJUcmlnZ2VyTW9kZTogJ2F1dG8nIHwgJ21hbnVhbCcgPSAnbWFudWFsJztcblxuICBwcm90ZWN0ZWQgcHJldmlvdXNGaWx0ZXJRdWVyaWVzID0gc2lnbmFsPEFYUEZpbHRlclF1ZXJ5W10+KFtdKTtcblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBQcmVmZXIgc2F2ZWQgc2V0dGluZ3MgKHZpZXcvY29sdW1ucy9zb3J0cy9maWx0ZXJzKSBpZiBhdmFpbGFibGUsIHRoZW4gYXBwbHlcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgIGF3YWl0IHRoaXMudm0uc2V0VmlldygpO1xuICAgIHRoaXMuZmlsdGVyc0RlZmluaXRpb25zLnNldCh0aGlzLnZtLmZpbHRlcnNEZWYpO1xuICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSB0cnVlO1xuICAgIC8vIHRoaXMucGVuZGluZ0luaXRpYWxGaWx0ZXJzID0gdHJ1ZTtcbiAgICAvLyB0aGlzLnBlbmRpbmdJbml0aWFsU29ydHMgPSB0cnVlO1xuICAgIHRoaXMuc2V0SW5pdGlhbEZpbHRlcnNGcm9tU2V0dGluZ3NPclZpZXcoKTtcbiAgICAvLyBFbnN1cmUgaW5pdGlhbCBsb2FkIGV2ZW4gd2hlbiBmaWx0ZXJzL3NvcnRzIGFyZSBhYnNlbnRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2NoZWR1bGVBcHBseSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgZmlsdGVyVHJpZ2dlck1vZGUgPSBhd2FpdCB0aGlzLnNldHRpbmdzU2VydmljZS5nZXQoQVhQQ29tbW9uU2V0dGluZ3MuRW50aXR5RmlsdGVyQXBwbHlNb2RlKTtcbiAgICB0aGlzLmZpbHRlclRyaWdnZXJNb2RlID0gKGZpbHRlclRyaWdnZXJNb2RlPy52YWx1ZSA/PyAnYXV0bycpIGFzICdhdXRvJyB8ICdtYW51YWwnO1xuICB9XG5cbiAgQElucHV0KCd2aWV3TW9kZWwnKVxuICBwdWJsaWMgdm0hOiBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsO1xuXG4gIHByb3RlY3RlZCBpbml0aWFsRmlsdGVycyA9IHNpZ25hbDxBWFBGaWx0ZXJRdWVyeVtdPihbXSk7XG4gIHByb3RlY3RlZCBmaWx0ZXJzRGVmaW5pdGlvbnMgPSBzaWduYWw8QVhQRmlsdGVyRGVmaW5pdGlvbltdPihbXSk7XG5cbiAgcHJvdGVjdGVkIHZpZXdRdWVyaWVzID0gY29tcHV0ZWQ8QVhQVmlld1F1ZXJ5W10+KCgpID0+XG4gICAgdGhpcy52bS52aWV3cygpLm1hcCgodikgPT4gKHtcbiAgICAgIG5hbWU6IHYubmFtZSxcbiAgICAgIGZpeGVkOiBmYWxzZSxcbiAgICAgIHRpdGxlOiB2LnRpdGxlLFxuICAgICAgY29sdW1uczogdi5jb2x1bW5zLFxuICAgICAgY29uZGl0aW9uczogdi5jb25kaXRpb25zLm1hcCgoYykgPT4gKHtcbiAgICAgICAgZmllbGQ6IGMubmFtZSxcbiAgICAgICAgb3BlcmF0b3I6IGMub3BlcmF0b3IsXG4gICAgICAgIHZhbHVlOiBjLnZhbHVlLFxuICAgICAgfSkpLFxuICAgICAgc29ydHM6IHYuc29ydHMsXG4gICAgfSkpLFxuICApO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWaWV3UXVlcnkgPSBjb21wdXRlZDxBWFBWaWV3UXVlcnk+KCgpID0+ICh7XG4gICAgbmFtZTogdGhpcy52bS52aWV3KCkubmFtZSxcbiAgICBmaXhlZDogZmFsc2UsXG4gICAgdGl0bGU6IHRoaXMudm0udmlldygpLnRpdGxlLFxuICAgIGNvbHVtbnM6IHRoaXMudm0udmlldygpLmNvbHVtbnMsXG4gICAgY29uZGl0aW9uczogdGhpcy52bS52aWV3KCkuY29uZGl0aW9ucy5tYXAoKGMpID0+ICh7XG4gICAgICBmaWVsZDogYy5uYW1lLFxuICAgICAgb3BlcmF0b3I6IGMub3BlcmF0b3IsXG4gICAgICB2YWx1ZTogYy52YWx1ZSxcbiAgICB9KSksXG4gICAgc29ydHM6IHRoaXMudm0udmlldygpLnNvcnRzLFxuICB9KSk7XG5cbiAgcHJvdGVjdGVkIGlzRmlsdGVyc0RpcnR5ID0gY29tcHV0ZWQoKCkgPT4gIWlzRXF1YWwodGhpcy52bS5maWx0ZXJRdWVyaWVzKCksIHRoaXMucHJldmlvdXNGaWx0ZXJRdWVyaWVzKCkpKTtcblxuICAvLyBEZWJvdW5jZWQgYXBwbHkgdG8gY29hbGVzY2UgbXVsdGlwbGUgVUkgY2hhbmdlcyAoZmlsdGVycy9zb3J0cy9jb2x1bW5zKVxuICBwcml2YXRlIGFwcGx5VGltZXI6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgc2NoZWR1bGVBcHBseSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hcHBseVRpbWVyKTtcbiAgICB0aGlzLmFwcGx5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudm0uYXBwbHlGaWx0ZXJBbmRTb3J0KCk7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgYXN5bmMgb25WaWV3Q2hhbmdlZCh2aWV3OiBBWFBWaWV3UXVlcnkpIHtcbiAgICBhd2FpdCB0aGlzLnZtLnNldFZpZXcodmlldy5uYW1lKTtcbiAgICAvLyBTeW5jIHF1ZXJ5IHBhcmFtIGltbWVkaWF0ZWx5IG9uIHRhYiBjaGFuZ2VcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHZpZXc6IHZpZXcubmFtZSB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5pc0luaXRpYWxpemluZyA9IHRydWU7XG4gICAgdGhpcy5wZW5kaW5nSW5pdGlhbEZpbHRlcnMgPSB0cnVlO1xuICAgIHRoaXMucGVuZGluZ0luaXRpYWxTb3J0cyA9IHRydWU7XG4gICAgdGhpcy5zZXRJbml0aWFsRmlsdGVyc0Zyb21TZXR0aW5nc09yVmlldygpO1xuICAgIC8vIEVuc3VyZSBpbml0aWFsIGxvYWQgYWZ0ZXIgdmlldyBjaGFuZ2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2NoZWR1bGVBcHBseSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgI2VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgLy8gS2VlcCBkZWZpbml0aW9ucyB1cCB0byBkYXRlOyBpbml0aWFsIGZpbHRlcnMgYXJlIHNldCBleHBsaWNpdGx5IGZyb20gc2V0dGluZ3Mgb3Igdmlld1xuICAgIHRoaXMuZmlsdGVyc0RlZmluaXRpb25zLnNldCh0aGlzLnZtLmZpbHRlcnNEZWYpO1xuICB9KTtcblxuICBwcml2YXRlIHNldEluaXRpYWxGaWx0ZXJzRnJvbVNldHRpbmdzT3JWaWV3KCkge1xuICAgIGNvbnN0IHNhdmVkID0gdGhpcy52bS5maWx0ZXJRdWVyaWVzKCk7XG4gICAgdGhpcy5wcmV2aW91c0ZpbHRlclF1ZXJpZXMuc2V0KHNhdmVkKTtcbiAgICBjb25zdCB2aWV3Q29uZGl0aW9ucyA9IHRoaXMudm0udmlldygpLmNvbmRpdGlvbnMubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgIGlmIChzYXZlZCAmJiBzYXZlZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaW5pdGlhbEZpbHRlcnMuc2V0KHNhdmVkLm1hcCgocykgPT4gKHsgLi4ucywgaGlkZGVuOiB2aWV3Q29uZGl0aW9ucy5pbmNsdWRlcyhzLmZpZWxkISkgfSkpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsRmlsdGVycy5zZXQoXG4gICAgICB0aGlzLnZtLnZpZXcoKS5jb25kaXRpb25zLm1hcChcbiAgICAgICAgKGMpID0+XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIGZpZWxkOiBjLm5hbWUsXG4gICAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBjLnZhbHVlLFxuICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIH0pIGFzIGFueSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIG9uRmlsdGVyc0NoYW5nZWQoZmlsdGVyczogQVhQRmlsdGVyUXVlcnlbXSkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6aW5nIHx8IHRoaXMucGVuZGluZ0luaXRpYWxGaWx0ZXJzKSB7XG4gICAgICB0aGlzLnBlbmRpbmdJbml0aWFsRmlsdGVycyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudm0uZmlsdGVyUXVlcmllcy5zZXQoZmlsdGVycyk7XG4gICAgaWYgKHRoaXMuZmlsdGVyVHJpZ2dlck1vZGUgPT09ICdhdXRvJykge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMucHJldmlvdXNGaWx0ZXJRdWVyaWVzLnNldCh0aGlzLnZtLmZpbHRlclF1ZXJpZXMoKSk7XG4gICAgdGhpcy52bS5zYXZlU2V0dGluZ3MoJ2ZpbHRlcnMnLCB0aGlzLnZtLmZpbHRlclF1ZXJpZXMoKSk7XG4gICAgdGhpcy5zY2hlZHVsZUFwcGx5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydFF1ZXJpZXMgPSBjb21wdXRlZDxBWFBTb3J0UXVlcnlbXT4oKCkgPT5cbiAgICB0aGlzLnZtXG4gICAgICAuc29ydGVkRmllbGRzKClcbiAgICAgIC5maWx0ZXIoKHMpID0+ICEhcy5kaXIpXG4gICAgICAubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRpcjogcy5kaXIgYXMgJ2FzYycgfCAnZGVzYycgfSkpLFxuICApO1xuXG4gIHByb3RlY3RlZCBzb3J0RGVmaW5pdGlvbnMgPSBjb21wdXRlZDxBWFBTb3J0RGVmaW5pdGlvbltdPigoKSA9PlxuICAgIHRoaXMudm0uc29ydGFibGVGaWVsZHMoKS5tYXAoKHMpID0+ICh7XG4gICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICB0aXRsZTogcy50aXRsZSxcbiAgICAgIGRpcjogcy5kaXIgYXMgJ2FzYycgfCAnZGVzYycgfCB1bmRlZmluZWQsXG4gICAgfSkpLFxuICApO1xuXG4gIHByb3RlY3RlZCBvblNvcnRRdWVyaWVzQ2hhbmdlKGU6IEFYUFNvcnRRdWVyeVtdKSB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcgfHwgdGhpcy5wZW5kaW5nSW5pdGlhbFNvcnRzKSB7XG4gICAgICB0aGlzLnBlbmRpbmdJbml0aWFsU29ydHMgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52bS5zb3J0ZWRGaWVsZHMuc2V0KFxuICAgICAgZS5tYXAoKHMpID0+ICh7XG4gICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgdGl0bGU6IHMubmFtZSxcbiAgICAgICAgZGlyOiBzLmRpcixcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIC8vIFBlcnNpc3Qgc29ydHMgcGVyIG1vZHVsZS9lbnRpdHkvdmlld1xuICAgIHRoaXMudm0uc2F2ZVNldHRpbmdzKCdzb3J0cycsIGUpO1xuICAgIHRoaXMuc2NoZWR1bGVBcHBseSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ29sdW1uc0NoYW5nZShjb2x1bW5zOiBBWFBDb2x1bW5RdWVyeVtdKSB7XG4gICAgY29uc3Qga2V5T2YgPSAoYzogeyBuYW1lOiBzdHJpbmc7IGNvbHVtbj86IGFueSB9KSA9PiBjLmNvbHVtbj8ub3B0aW9ucz8uZGF0YVBhdGggPz8gYy5uYW1lO1xuXG4gICAgdGhpcy52bS5jb2x1bW5zLnVwZGF0ZSgocHJldikgPT4ge1xuICAgICAgY29uc3QgYnlLZXkgPSBuZXcgTWFwKHByZXYubWFwKChjKSA9PiBba2V5T2YoYyBhcyBhbnkpLCBjXSkpO1xuXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKG5ld0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGJ5S2V5LmdldChrZXlPZihuZXdDb2x1bW4pKSE7XG4gICAgICAgIHJldHVybiBuZXcgQVhQRW50aXR5TGlzdFZpZXdDb2x1bW5WaWV3TW9kZWwoZXhpc3RpbmcucHJvcGVydHksIHtcbiAgICAgICAgICAuLi5leGlzdGluZy5jb2x1bW4sXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgLi4uZXhpc3RpbmcuY29sdW1uLm9wdGlvbnMsXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXdDb2x1bW4udmlzaWJsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFBlcnNpc3QgY29sdW1uIG9yZGVyL3Zpc2liaWxpdHlcbiAgICB0aGlzLnZtLm9uQ29sdW1uc0NoYW5nZWQodGhpcy52bS5jb2x1bW5zKCkpO1xuICAgIC8vIFVzZSBkZWJvdW5jZWQgYXBwbHkgdG8gYXZvaWQgdHJpcGxlIHJlZnJlc2ggd2hlbiBjb21iaW5lZCB3aXRoIHNvcnRzL2ZpbHRlcnNcbiAgICAvLyB0aGlzLnNjaGVkdWxlQXBwbHkoKTtcbiAgfVxufVxuIiwiPCEtLSA8YXhwLWVudGl0eS12aWV3LXRvb2xiYXIgW3ZpZXdNb2RlbF09XCJ2bVwiPjwvYXhwLWVudGl0eS12aWV3LXRvb2xiYXI+IC0tPlxuPGF4cC1xdWVyeS12aWV3c1xuICBpZD1cImF4cC10b29sYmFyLXZpZXctc2VsZWN0b3JcIlxuICBbdmlld3NdPVwidmlld1F1ZXJpZXMoKVwiXG4gIFtzZWxlY3RlZFZpZXddPVwic2VsZWN0ZWRWaWV3UXVlcnkoKVwiXG4gIChzZWxlY3RlZFZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlZCgkZXZlbnQpXCJcbj48L2F4cC1xdWVyeS12aWV3cz5cbjxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMiBheC1ib3JkZXItYiBheC1ib3JkZXItbGlnaHQgdy1mdWxsXCI+XG4gIDwhLS0gPGF4cC1lbnRpdHktZmlsdGVyLXRvb2xiYXIgW3ZpZXdNb2RlbF09XCJ2bVwiPjwvYXhwLWVudGl0eS1maWx0ZXItdG9vbGJhcj4gLS0+XG4gIDxheHAtcXVlcnktZmlsdGVyc1xuICAgIGlkPVwiYXhwLXRvb2xiYXItZmlsdGVyc1wiXG4gICAgW2ZpbHRlcnNEZWZpbml0aW9uc109XCJmaWx0ZXJzRGVmaW5pdGlvbnMoKVwiXG4gICAgW2luaXRpYWxGaWx0ZXJzXT1cImluaXRpYWxGaWx0ZXJzKClcIlxuICAgIChvbkZpbHRlcnNDaGFuZ2VkKT1cIm9uRmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiXG4gID48L2F4cC1xdWVyeS1maWx0ZXJzPlxuXG4gIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMiBtZDpheC1nYXAtMlwiPlxuICAgIEBpZiAoZmlsdGVyVHJpZ2dlck1vZGUgPT09ICdtYW51YWwnICYmIGlzRmlsdGVyc0RpcnR5KCkpIHtcbiAgICAgIDxheC1idXR0b25cbiAgICAgICAgaWQ9XCJheHAtdG9vbGJhci1idG4tZmlsdGVyXCJcbiAgICAgICAgW3RpdGxlXT1cIidAZ2VuZXJhbDphY3Rpb25zLmFwcGx5LnRpdGxlJ1wiXG4gICAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgICAgI2ZpbHRlckJ1dHRvblxuICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgPlxuICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgIDwvYXgtYnV0dG9uPlxuICAgIH1cbiAgICA8ZGl2PlxuICAgICAgPGF4LWJ1dHRvbiBpZD1cImF4cC10b29sYmFyLWJ0bi1jb2x1bW5zXCIgW2ljb25Pbmx5XT1cInRydWVcIiAjY29sdW1uQnV0dG9uIFtjb2xvcl09XCInZGVmYXVsdCdcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10YWJsZS1jb2x1bW5zXCI+PC9pPlxuICAgICAgPC9heC1idXR0b24+XG4gICAgICA8YXgtcG9wb3ZlclxuICAgICAgICBpZD1cImF4cC1wb3BvdmVyLWNvbHVtbnNcIlxuICAgICAgICBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtvZmZzZXRZXT1cIjMwXCJcbiAgICAgICAgW3RhcmdldF09XCJjb2x1bW5CdXR0b25cIlxuICAgICAgICBbb3Blbk9uXT1cIid0b2dnbGUnXCJcbiAgICAgICAgW2Nsb3NlT25dPVwiJ2NsaWNrT3V0J1wiXG4gICAgICAgICNwb3BvdmVyXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1saWdodGVzdC1zdXJmYWNlIGF4LXNoYWRvdy1tZCBheC1ib3JkZXIgbWQ6YXgtdy03MiBheC13LWZ1bGwgYXgtcm91bmRlZC1tZFwiPlxuICAgICAgICAgIDxheC1oZWFkZXIgY2xhc3M9XCJheC1ib3JkZXItYiBheC1saWdodGVyLXN1cmZhY2UgYXgtcm91bmRlZC10LW1kIGF4LXAtNCBheC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgIHt7ICdAZ2VuZXJhbDp0ZXJtcy5jb21tb24uY29sdW1ucycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtaGVhZGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1weS0yIGF4LXB4LTRcIj5cbiAgICAgICAgICAgIDxheHAtcXVlcnktY29sdW1ucyBbY29sdW1uc109XCJ2bS5jb2x1bW5zKClcIiAoY29sdW1uc0NoYW5nZSk9XCJvbkNvbHVtbnNDaGFuZ2UoJGV2ZW50KVwiPjwvYXhwLXF1ZXJ5LWNvbHVtbnM+XG4gICAgICAgICAgICA8IS0tIDxheHAtbGlzdC12aWV3LW9wdGlvbi1jb2x1bW5zIFt2aWV3TW9kZWxdPVwidm1cIj48L2F4cC1saXN0LXZpZXctb3B0aW9uLWNvbHVtbnM+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAodm0uY2FuU29ydCgpKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8YXgtYnV0dG9uIGlkPVwiYXhwLXRvb2xiYXItYnRuLXNvcnRcIiBbaWNvbk9ubHldPVwidHJ1ZVwiIFt0ZXh0XT1cIidTb3J0cydcIiAjc29ydEJ1dHRvbiBbY29sb3JdPVwiJ2RlZmF1bHQnXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1zb3J0LWFtb3VudC11cFwiPjwvaT5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxheC1wb3BvdmVyXG4gICAgICAgICAgaWQ9XCJheHAtcG9wb3Zlci1zb3J0XCJcbiAgICAgICAgICBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW29mZnNldFldPVwiMTBcIlxuICAgICAgICAgIFt0YXJnZXRdPVwic29ydEJ1dHRvblwiXG4gICAgICAgICAgW29wZW5Pbl09XCIndG9nZ2xlJ1wiXG4gICAgICAgICAgW2Nsb3NlT25dPVwiJ2NsaWNrT3V0J1wiXG4gICAgICAgICAgI3BvcG92ZXJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1saWdodGVzdC1zdXJmYWNlIGF4LXNoYWRvdy1tZCBheC1ib3JkZXIgbWQ6YXgtdy03MiBheC13LWZ1bGwgYXgtcm91bmRlZC1tZFwiPlxuICAgICAgICAgICAgPGF4LWhlYWRlciBjbGFzcz1cImF4LWJvcmRlci1iIGF4LWxpZ2h0ZXItc3VyZmFjZSBheC1yb3VuZGVkLXQtbWQgYXgtcC00IGF4LWZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICB7eyAnQGdlbmVyYWw6dGVybXMuY29tbW9uLnNvcnRzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L2F4LWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1weS0yIGF4LXB4LTRcIj5cbiAgICAgICAgICAgICAgPCEtLSA8YXhwLWxpc3Qtdmlldy1vcHRpb24tc29ydGluZyBbdmlld01vZGVsXT1cInZtXCI+PC9heHAtbGlzdC12aWV3LW9wdGlvbi1zb3J0aW5nPiAtLT5cbiAgICAgICAgICAgICAgPGF4cC1xdWVyeS1zb3J0c1xuICAgICAgICAgICAgICAgIFtzb3J0RGVmaW5pdGlvbnNdPVwic29ydERlZmluaXRpb25zKClcIlxuICAgICAgICAgICAgICAgIChzb3J0UXVlcmllc0NoYW5nZSk9XCJvblNvcnRRdWVyaWVzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtpbml0aWFsU29ydFF1ZXJpZXNdPVwic29ydFF1ZXJpZXMoKVwiXG4gICAgICAgICAgICAgID48L2F4cC1xdWVyeS1zb3J0cz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChkZXZpY2VTZXJ2aWNlLmlzU21hbGwoKSkge1xuICAgICAgPGF4LWJ1dHRvblxuICAgICAgICBpZD1cImF4cC10b29sYmFyLWJ0bi1jYXRlZ29yeVwiXG4gICAgICAgIChvbkNsaWNrKT1cInBhcmVudC50b2dnbGVDYXRlZ29yeURyYXdlcigpXCJcbiAgICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgICBbY29sb3JdPVwiJ2RlZmF1bHQnXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1iYXJzXCI+PC9pPlxuICAgICAgPC9heC1idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXActionSheetModule } from '@acorex/components/action-sheet';\nimport { AXDataTableModule, } from '@acorex/components/data-table';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, effect, inject, signal, viewChild, } from '@angular/core';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogModule } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule, translateSync } from '@acorex/core/translation';\nimport { AXPAuthModule } from '@acorex/platform/auth';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPWidgetsModule } from '@acorex/platform/layout/widgets';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPEntityCategoryComponent } from '../entity-category/entity-category.component';\nimport { AXPEntityMasterToolbarViewComponent } from '../entity-master-toolbar-view/entity-master-toolbar-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/core/platform\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/components/data-table\";\nimport * as i4 from \"@acorex/core/translation\";\nimport * as i5 from \"@acorex/platform/layout/widget-core\";\nimport * as i6 from \"@angular/common\";\nexport class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {\n constructor(platform) {\n super();\n this.platform = platform;\n this.activeRoute = inject(ActivatedRoute);\n this.router = inject(Router);\n this.vm = this.activeRoute.snapshot.data['vm'];\n //\n this.store = inject(AXPLayoutThemeService);\n //\n this.searchBarShown = signal(true, ...(ngDevMode ? [{ debugName: \"searchBarShown\" }] : []));\n this.activeEndSideView = signal('column', ...(ngDevMode ? [{ debugName: \"activeEndSideView\" }] : []));\n this.categorySearchValue = signal('', ...(ngDevMode ? [{ debugName: \"categorySearchValue\" }] : []));\n // @ViewChild('grid', { static: true}) grid: AXDataTableComponent;\n this.grid = viewChild('grid', ...(ngDevMode ? [{ debugName: \"grid\" }] : []));\n this.initializedFromRoute = false;\n this.commandRowItems = computed(() => {\n return this.vm.primaryRowActions().map((c) => {\n return {\n icon: c.icon,\n name: c.name,\n text: translateSync(c.title),\n color: c.color,\n disabled: c.disabled,\n default: c.default,\n };\n });\n }, ...(ngDevMode ? [{ debugName: \"commandRowItems\" }] : []));\n this.getDropdownRowItems = (rowData) => {\n return Promise.resolve(this.dropdownRowItems(rowData));\n };\n this.getCommandRowItems = () => {\n return this.commandRowItems();\n };\n effect(() => {\n if (this.grid()) {\n this.grid().selectedRows = this.vm.selectedItems();\n }\n });\n //\n this.vm.events$.subscribe(async (e) => {\n const refreshTargetId = e.meta?.refreshTargetId;\n if (e.action == 'refresh') {\n if (refreshTargetId) {\n this.grid()?.refreshItemChildren(refreshTargetId);\n }\n else {\n this.grid()?.refresh({\n reset: false,\n });\n }\n }\n });\n // Keep URL query param `view` in sync with current vm view\n effect(() => {\n if (!this.initializedFromRoute) {\n return;\n }\n const currentViewName = this.vm.view().name;\n const urlView = this.activeRoute.snapshot.queryParamMap.get('view');\n if (currentViewName && currentViewName !== urlView) {\n this.router.navigate([], {\n relativeTo: this.activeRoute,\n queryParams: { view: currentViewName },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n });\n }\n async ngOnInit() {\n // React to external URL changes (back/forward navigation or deep links)\n this.queryParamSub = this.activeRoute.queryParamMap.subscribe(async (qp) => {\n const viewFromUrl = qp.get('view');\n await this.vm.setView(viewFromUrl);\n });\n }\n async ngAfterViewInit() {\n const viewFromUrl = this.activeRoute.snapshot.queryParamMap.get('view');\n await this.vm.setView(viewFromUrl);\n const resolvedView = this.vm.view().name;\n const currentUrlView = this.activeRoute.snapshot.queryParamMap.get('view');\n if (currentUrlView !== resolvedView) {\n this.router.navigate([], {\n relativeTo: this.activeRoute,\n queryParams: { view: resolvedView },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n this.initializedFromRoute = true;\n }\n onColumnSizeChanged(e) {\n if (e.isUserInteraction && e.type === 'end') {\n this.vm.saveSettings('columnSizes', e.data);\n }\n }\n onPageChanged(e) {\n if (e.isUserInteraction) {\n const pageSizeChanged = e.take != this.vm.dataSource.pageSize;\n if (pageSizeChanged) {\n this.vm.saveSettings('pageSize', e.take);\n }\n }\n }\n onColumnsOrderChanged(e) {\n if (e.isUserInteraction) {\n this.vm.onColumnsOrderChanged(e.data.event);\n }\n }\n async dropdownRowItems(rowData) {\n return (await this.vm.secondaryRowActions(rowData)).map((c) => ({\n icon: c.icon,\n name: c.name,\n text: c.title,\n color: c.color,\n disabled: c.disabled,\n default: c.default,\n divided: c.separated,\n }));\n }\n async handleRowDbClick(e) {\n if (this.grid()?.dataSource.isLoading) {\n return;\n }\n const allItems = [...this.commandRowItems(), ...(await this.dropdownRowItems(e.data))];\n // const defaultAction = allItems.find((c) => (c as any).default) || allItems[0];\n const defaultAction = allItems.find((c) => {\n const commandName = c.name.split('&')[0];\n return (c.default || commandName === 'open-entity') && !c.disabled;\n });\n if (!defaultAction) {\n return;\n }\n const d = {\n component: e.component,\n name: defaultAction.name,\n data: e.data,\n };\n this.handleRowCommandClick(d);\n }\n async handleRowCommandClick(e) {\n if (this.grid()?.dataSource.isLoading) {\n return;\n }\n if (e.setLoading) {\n e.setLoading(true);\n }\n await this.vm.executeCommand(e.name, e.data);\n if (e.setLoading) {\n e.setLoading(false);\n }\n }\n async handleSelectedRowsChange(rows) {\n this.vm.selectedItems.set(rows);\n }\n makeResponsive(value) {\n if (this.platform.is('Mobile') || this.platform.is('SM')) {\n return '';\n }\n else {\n return value;\n }\n }\n toggleSideBar(sideBar) {\n this.toggleEndSide();\n if (sideBar) {\n this.activeEndSideView.set(sideBar);\n }\n }\n toggleSearchBar() {\n this.searchBarShown.update((v) => !v);\n }\n handleResetClick(sideBar) {\n switch (sideBar) {\n case 'filter': {\n this.vm.resetFilters();\n break;\n }\n case 'sort': {\n this.vm.resetSorts();\n break;\n }\n case 'column': {\n this.vm.resetColumns();\n break;\n }\n }\n }\n // protected handleDiscardClick(sideBar: 'filter' | 'sort' | 'column') {\n // switch (sideBar) {\n // case 'filter': {\n // this.vm.discardFilters();\n // break;\n // }\n // case 'sort': {\n // this.vm.resetSorts();\n // break;\n // }\n // case 'column': {\n // this.vm.resetColumns();\n // break;\n // }\n // }\n // }\n handleApplyClick(sideBar) {\n this.vm.applyFilterAndSort();\n this.toggleEndSide();\n }\n ngOnDestroy() {\n this.queryParamSub?.unsubscribe();\n this.vm.destroy();\n }\n toggleCategoryDrawer() {\n this.toggleStartSide();\n }\n getPageTitle() {\n return this.vm.title();\n }\n async getPageDescription() {\n const description = this.vm.description();\n if (description) {\n return this.translateService.translateAsync(description);\n }\n return '';\n }\n getPageBreadcrumbs() {\n return this.vm.beardcrumbs();\n }\n async getPrimaryMenuItems() {\n return (await this.vm.getPrimaryActions()).map((tr) => ({\n name: tr.name,\n title: tr.title,\n icon: tr.icon,\n color: tr.color,\n disabled: tr.disabled,\n command: {\n name: tr.name,\n options: tr.options,\n metadata: tr.metadata,\n },\n }));\n }\n async getSecondaryMenuItems() {\n return (await this.vm.getSecondaryActions()).map((tr) => ({\n name: tr.name,\n title: tr.title,\n icon: tr.icon,\n color: tr.color,\n disabled: tr.disabled,\n separated: tr.separated,\n command: {\n name: tr.name,\n options: tr.options,\n metadata: tr.metadata,\n },\n }));\n }\n async execute(command) {\n if (command) {\n this.vm.execute(command);\n }\n }\n handleUnselectAll() {\n this.vm.selectedItems.set([]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityMasterListViewComponent, deps: [{ token: i1.AXPlatform }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXPEntityMasterListViewComponent, isStandalone: true, selector: \"axp-entity-master-list\", providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPEntityMasterListViewComponent,\n },\n ], viewQueries: [{ propertyName: \"grid\", first: true, predicate: [\"grid\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n @if (vm.entityDef.category) {\\n <axp-layout-start-side id=\\\"axp-entity-category-drawer\\\">\\n <axp-entity-category\\n id=\\\"axp-entity-category\\\"\\n class=\\\"ax-w-80\\\"\\n [vm]=\\\"vm\\\"\\n [searchValue]=\\\"categorySearchValue()\\\"\\n ></axp-entity-category>\\n </axp-layout-start-side>\\n }\\n <axp-page-toolbar id=\\\"axp-entity-toolbar\\\">\\n <axp-entity-master-toolbar-view [viewModel]=\\\"vm\\\"></axp-entity-master-toolbar-view>\\n </axp-page-toolbar>\\n <axp-page-content class=\\\"ax-overflow-auto ax-pt-0\\\">\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-1 ax-pb-1\\\"\\n [class.ax-invisible]=\\\"!grid.selectedRows.length\\\"\\n >\\n <span\\n >{{ grid.selectedRows.length }}\\n <span>{{ '@general:terms.interface.items-selected' | translate | async }}</span>\\n </span>\\n <ax-button text=\\\"@general:terms.interface.unselect-all\\\" class=\\\"ax-xs\\\" (onClick)=\\\"handleUnselectAll()\\\"></ax-button>\\n </div>\\n <ax-data-table\\n id=\\\"axp-entity-table\\\"\\n [allowReordering]=\\\"true\\\"\\n (onColumnsOrderChanged)=\\\"onColumnsOrderChanged($event)\\\"\\n #grid\\n [showFooter]=\\\"false\\\"\\n class=\\\"ax-flex-1\\\"\\n [paging]=\\\"true\\\"\\n [fetchDataMode]=\\\"'manual'\\\"\\n [parentField]=\\\"vm.parentKey()\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\"\\n [dataSource]=\\\"vm.dataSource\\\"\\n (selectedRowsChange)=\\\"handleSelectedRowsChange($event)\\\"\\n (onRowDbClick)=\\\"handleRowDbClick($event)\\\"\\n (onColumnSizeChanged)=\\\"onColumnSizeChanged($event)\\\"\\n (onPageChanged)=\\\"onPageChanged($event)\\\"\\n >\\n @if (vm.view().indexCol === true) {\\n <ax-index-column id=\\\"axp-table-col-index\\\" fixed=\\\"start\\\" [width]=\\\"'80px'\\\" [padZero]=\\\"true\\\"></ax-index-column>\\n }\\n @if (vm.selectedScopeActionsCount()) {\\n <ax-select-column id=\\\"axp-table-col-select\\\" fixed=\\\"start\\\" [width]=\\\"'60px'\\\"></ax-select-column>\\n }\\n @for (col of vm.columns(); track col.name) {\\n @if (col.visible) {\\n <axp-widget-column-renderer\\n [attr.id]=\\\"'axp-table-col-' + col.name\\\"\\n [expandHandler]=\\\"$index === 0 && vm.parentKey() ? true : false\\\"\\n [caption]=\\\"(col.title | translate | async)!\\\"\\n [node]=\\\"col.node()\\\"\\n [customWidth]=\\\"col.width\\\"\\n ></axp-widget-column-renderer>\\n }\\n }\\n @if (getCommandRowItems().length) {\\n <ax-command-column\\n id=\\\"axp-table-col-commands\\\"\\n fixed=\\\"end\\\"\\n [width]=\\\"getCommandRowItems().length * 70 + 'px'\\\"\\n [items]=\\\"getCommandRowItems()\\\"\\n (onItemClick)=\\\"handleRowCommandClick($event)\\\"\\n ></ax-command-column>\\n }\\n <ax-dropdown-command-column\\n id=\\\"axp-table-col-dropdown-commands\\\"\\n fixed=\\\"end\\\"\\n [width]=\\\"'60px'\\\"\\n [items]=\\\"getDropdownRowItems\\\"\\n (onItemClick)=\\\"handleRowCommandClick($event)\\\"\\n ></ax-dropdown-command-column>\\n </ax-data-table>\\n </axp-page-content>\\n</axp-page-layout>\\n\", styles: [\"axp-entity-master-list axp-layout-start-side{min-width:20rem!important;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-entity-master-list axp-layout-header{padding-bottom:.25rem!important}.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}.view-drawer{width:85vw}@media (min-width: 768px){.view-drawer{width:45vw}}@media (min-width: 1024px){.view-drawer{width:35vw}}@media (min-width: 1536px){.view-drawer{width:20vw}}.view-drawer{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));border-inline-start-width:1px;border-inline-start-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));border-top-width:1px;--tw-border-opacity: 1;border-top-color:rgba(var(--ax-sys-color-primary-600),var(--tw-border-opacity, 1))}.view-drawer ax-header{display:flex;align-items:center;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1));padding:.5rem 1rem}.view-drawer ax-header h2{font-size:1.25rem;line-height:1.75rem;font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lighter-surface),var(--tw-text-opacity, 1))}.view-drawer ax-footer{position:absolute!important;bottom:0!important;width:100%!important;justify-content:flex-start!important;border-top-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1))!important;padding:.5rem 1rem!important}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXActionSheetModule }, { kind: \"ngmodule\", type: AXDrawerModule }, { kind: \"ngmodule\", type: AXDialogModule }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"ngmodule\", type: AXTabsModule }, { kind: \"ngmodule\", type: AXTooltipModule }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXSearchBoxModule }, { kind: \"ngmodule\", type: AXDataTableModule }, { kind: \"component\", type: i3.AXDataTableComponent, selector: \"ax-data-table\", inputs: [\"dataSource\", \"selectedRows\", \"parentField\", \"rowDetailsTemplate\", \"rowTemplate\", \"emptyTemplate\", \"noDataTemplate\", \"alternative\", \"showHeader\", \"fixedHeader\", \"showFooter\", \"fixedFooter\", \"itemHeight\", \"allowReordering\", \"paging\", \"fetchDataMode\", \"loading\", \"focusedRow\"], outputs: [\"selectedRowsChange\", \"focusedRowChange\", \"onRowClick\", \"onRowDbClick\", \"onColumnsOrderChanged\", \"onColumnSizeChanged\", \"onPageChanged\"] }, { kind: \"component\", type: i3.AXRowIndexColumnComponent, selector: \"ax-index-column\", inputs: [\"width\", \"caption\", \"fixed\", \"footerTemplate\", \"padZero\"] }, { kind: \"component\", type: i3.AXRowSelectColumnComponent, selector: \"ax-select-column\", inputs: [\"width\", \"caption\", \"fixed\"] }, { kind: \"component\", type: i3.AXRowCommandColumnComponent, selector: \"ax-command-column\", inputs: [\"width\", \"caption\", \"fixed\", \"footerTemplate\", \"items\"], outputs: [\"onItemClick\"] }, { kind: \"component\", type: i3.AXRowDropdownCommandColumnComponent, selector: \"ax-dropdown-command-column\", inputs: [\"width\", \"caption\", \"fixed\", \"footerTemplate\", \"emptyStateTemplate\", \"emptyStateText\", \"items\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i4.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: DragDropModule }, { kind: \"ngmodule\", type: \n //\n AXPWidgetCoreModule }, { kind: \"component\", type: i5.AXPWidgetColumnRendererComponent, selector: \"axp-widget-column-renderer\", inputs: [\"caption\", \"customExpandIcon\", \"customCollapseIcon\", \"customWidth\", \"node\", \"footerTemplate\", \"expandHandler\", \"cellTemplate\", \"headerTemplate\"] }, { kind: \"ngmodule\", type: AXPWidgetsModule }, { kind: \"ngmodule\", type: AXPAuthModule }, { kind: \"component\", type: \n //\n AXPEntityMasterToolbarViewComponent, selector: \"axp-entity-master-toolbar-view\", inputs: [\"viewModel\"] }, { kind: \"component\", type: \n //\n AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPThemeLayoutStartSideComponent, selector: \"axp-layout-page-start-side, axp-layout-start-side\" }, { kind: \"component\", type: AXPEntityCategoryComponent, selector: \"axp-entity-category\", inputs: [\"vm\", \"searchValue\", \"selectMode\", \"selectionBehavior\", \"dragArea\", \"dragBehavior\", \"showIcons\", \"showChildrenBadge\", \"expandedIcon\", \"collapsedIcon\", \"indentSize\", \"look\", \"searchWithChildren\"] }, { kind: \"pipe\", type: i6.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityMasterListViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-entity-master-list', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n AXButtonModule,\n AXDecoratorModule,\n AXBadgeModule,\n AXDropdownModule,\n AXPopoverModule,\n AXFormModule,\n AXActionSheetModule,\n AXDrawerModule,\n AXDialogModule,\n AXLoadingModule,\n AXTabsModule,\n AXTooltipModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXSearchBoxModule,\n AXDataTableModule,\n AXTranslationModule,\n DragDropModule,\n //\n AXPWidgetCoreModule,\n AXPWidgetsModule,\n AXPAuthModule,\n //\n AXPEntityMasterToolbarViewComponent,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXDropdownButtonModule,\n AXPThemeLayoutStartSideComponent,\n AXPEntityCategoryComponent,\n ], providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPEntityMasterListViewComponent,\n },\n ], template: \"<axp-page-layout *translate=\\\"let t\\\">\\n @if (vm.entityDef.category) {\\n <axp-layout-start-side id=\\\"axp-entity-category-drawer\\\">\\n <axp-entity-category\\n id=\\\"axp-entity-category\\\"\\n class=\\\"ax-w-80\\\"\\n [vm]=\\\"vm\\\"\\n [searchValue]=\\\"categorySearchValue()\\\"\\n ></axp-entity-category>\\n </axp-layout-start-side>\\n }\\n <axp-page-toolbar id=\\\"axp-entity-toolbar\\\">\\n <axp-entity-master-toolbar-view [viewModel]=\\\"vm\\\"></axp-entity-master-toolbar-view>\\n </axp-page-toolbar>\\n <axp-page-content class=\\\"ax-overflow-auto ax-pt-0\\\">\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-1 ax-pb-1\\\"\\n [class.ax-invisible]=\\\"!grid.selectedRows.length\\\"\\n >\\n <span\\n >{{ grid.selectedRows.length }}\\n <span>{{ '@general:terms.interface.items-selected' | translate | async }}</span>\\n </span>\\n <ax-button text=\\\"@general:terms.interface.unselect-all\\\" class=\\\"ax-xs\\\" (onClick)=\\\"handleUnselectAll()\\\"></ax-button>\\n </div>\\n <ax-data-table\\n id=\\\"axp-entity-table\\\"\\n [allowReordering]=\\\"true\\\"\\n (onColumnsOrderChanged)=\\\"onColumnsOrderChanged($event)\\\"\\n #grid\\n [showFooter]=\\\"false\\\"\\n class=\\\"ax-flex-1\\\"\\n [paging]=\\\"true\\\"\\n [fetchDataMode]=\\\"'manual'\\\"\\n [parentField]=\\\"vm.parentKey()\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\"\\n [dataSource]=\\\"vm.dataSource\\\"\\n (selectedRowsChange)=\\\"handleSelectedRowsChange($event)\\\"\\n (onRowDbClick)=\\\"handleRowDbClick($event)\\\"\\n (onColumnSizeChanged)=\\\"onColumnSizeChanged($event)\\\"\\n (onPageChanged)=\\\"onPageChanged($event)\\\"\\n >\\n @if (vm.view().indexCol === true) {\\n <ax-index-column id=\\\"axp-table-col-index\\\" fixed=\\\"start\\\" [width]=\\\"'80px'\\\" [padZero]=\\\"true\\\"></ax-index-column>\\n }\\n @if (vm.selectedScopeActionsCount()) {\\n <ax-select-column id=\\\"axp-table-col-select\\\" fixed=\\\"start\\\" [width]=\\\"'60px'\\\"></ax-select-column>\\n }\\n @for (col of vm.columns(); track col.name) {\\n @if (col.visible) {\\n <axp-widget-column-renderer\\n [attr.id]=\\\"'axp-table-col-' + col.name\\\"\\n [expandHandler]=\\\"$index === 0 && vm.parentKey() ? true : false\\\"\\n [caption]=\\\"(col.title | translate | async)!\\\"\\n [node]=\\\"col.node()\\\"\\n [customWidth]=\\\"col.width\\\"\\n ></axp-widget-column-renderer>\\n }\\n }\\n @if (getCommandRowItems().length) {\\n <ax-command-column\\n id=\\\"axp-table-col-commands\\\"\\n fixed=\\\"end\\\"\\n [width]=\\\"getCommandRowItems().length * 70 + 'px'\\\"\\n [items]=\\\"getCommandRowItems()\\\"\\n (onItemClick)=\\\"handleRowCommandClick($event)\\\"\\n ></ax-command-column>\\n }\\n <ax-dropdown-command-column\\n id=\\\"axp-table-col-dropdown-commands\\\"\\n fixed=\\\"end\\\"\\n [width]=\\\"'60px'\\\"\\n [items]=\\\"getDropdownRowItems\\\"\\n (onItemClick)=\\\"handleRowCommandClick($event)\\\"\\n ></ax-dropdown-command-column>\\n </ax-data-table>\\n </axp-page-content>\\n</axp-page-layout>\\n\", styles: [\"axp-entity-master-list axp-layout-start-side{min-width:20rem!important;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-entity-master-list axp-layout-header{padding-bottom:.25rem!important}.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}.view-drawer{width:85vw}@media (min-width: 768px){.view-drawer{width:45vw}}@media (min-width: 1024px){.view-drawer{width:35vw}}@media (min-width: 1536px){.view-drawer{width:20vw}}.view-drawer{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));border-inline-start-width:1px;border-inline-start-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));border-top-width:1px;--tw-border-opacity: 1;border-top-color:rgba(var(--ax-sys-color-primary-600),var(--tw-border-opacity, 1))}.view-drawer ax-header{display:flex;align-items:center;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1));padding:.5rem 1rem}.view-drawer ax-header h2{font-size:1.25rem;line-height:1.75rem;font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lighter-surface),var(--tw-text-opacity, 1))}.view-drawer ax-footer{position:absolute!important;bottom:0!important;width:100%!important;justify-content:flex-start!important;border-top-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1))!important;padding:.5rem 1rem!important}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.AXPlatform }], propDecorators: { grid: [{ type: i0.ViewChild, args: ['grid', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hc3Rlci1saXN0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci1saXN0LXZpZXcvZW50aXR5LW1hc3Rlci1saXN0LXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci1saXN0LXZpZXcvZW50aXR5LW1hc3Rlci1saXN0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUdMLGlCQUFpQixHQUtsQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIs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LG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLEVBQUU7d0JBQ0YsbUNBQW1DO3dCQUNuQyxFQUFFO3dCQUNGLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3dCQUM1QixzQkFBc0I7d0JBQ3RCLGdDQUFnQzt3QkFDaEMsMEJBQTBCO3FCQUMzQixhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsa0NBQWtDO3lCQUM5QztxQkFDRjttSEFpQmdELE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEFjdGlvblNoZWV0TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2FjdGlvbi1zaGVldCc7XG5pbXBvcnQge1xuICBBWENvbHVtbnNPcmRlckNoYW5nZWRFdmVudCxcbiAgQVhEYXRhVGFibGVDb21wb25lbnQsXG4gIEFYRGF0YVRhYmxlTW9kdWxlLFxuICBBWERhdGFUYWJsZVJvd0RiQ2xpY2ssXG4gIEFYUm93Q29tbWFuZEl0ZW0sXG4gIEFYUm93Q29tbWFuZEl0ZW1DbGlja0V2ZW50LFxuICBvbkNvbHVtblNpemVDaGFuZ2VkRXZlbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcbmltcG9ydCB7IEFYRHJhd2VyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RyYXdlcic7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCcmVhZGNydW1ic01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9icmVhZGNydW1icyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEYXRhUGFnZXJDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGF0YS1wYWdlcic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYRm9ybU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCB7IEFYTG9hZGluZ01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sb2FkaW5nJztcbmltcG9ydCB7IEFYUG9wb3Zlck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYU2VhcmNoQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQVhUYWJzTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RhYnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgdHJhbnNsYXRlU3luYyB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBBdXRoTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFdpZGdldENvcmVNb2R1bGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBBWFBXaWRnZXRzTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0cyc7XG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWFBBY3Rpb25NZW51SXRlbSwgQVhQQnJlYWRjcnVtYkl0ZW0sIEFYUEV4ZWN1dGVDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFBhZ2VMYXlvdXRCYXNlLCBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCwgQVhQUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3ZpZXdzJztcbmltcG9ydCB7IEFYUExheW91dFRoZW1lU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vdGhlbWVzL3NoYXJlZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUEVudGl0eUNhdGVnb3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vZW50aXR5LWNhdGVnb3J5L2VudGl0eS1jYXRlZ29yeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhQRW50aXR5TWFzdGVyVG9vbGJhclZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldy9lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdlbnRpdHktbWFzdGVyLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydlbnRpdHktbWFzdGVyLWxpc3Qtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICBzZWxlY3RvcjogJ2F4cC1lbnRpdHktbWFzdGVyLWxpc3QnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWERyb3Bkb3duTW9kdWxlLFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgICBBWEZvcm1Nb2R1bGUsXG4gICAgQVhBY3Rpb25TaGVldE1vZHVsZSxcbiAgICBBWERyYXdlck1vZHVsZSxcbiAgICBBWERpYWxvZ01vZHVsZSxcbiAgICBBWExvYWRpbmdNb2R1bGUsXG4gICAgQVhUYWJzTW9kdWxlLFxuICAgIEFYVG9vbHRpcE1vZHVsZSxcbiAgICBBWEJyZWFkY3J1bWJzTW9kdWxlLFxuICAgIEFYRHJvcGRvd25CdXR0b25Nb2R1bGUsXG4gICAgQVhTZWFyY2hCb3hNb2R1bGUsXG4gICAgQVhEYXRhVGFibGVNb2R1bGUsXG4gICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICAvL1xuICAgIEFYUFdpZGdldENvcmVNb2R1bGUsXG4gICAgQVhQV2lkZ2V0c01vZHVsZSxcbiAgICBBWFBBdXRoTW9kdWxlLFxuICAgIC8vXG4gICAgQVhQRW50aXR5TWFzdGVyVG9vbGJhclZpZXdDb21wb25lbnQsXG4gICAgLy9cbiAgICBBWFBQYWdlTGF5b3V0Q29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSxcbiAgICBBWFBUaGVtZUxheW91dFN0YXJ0U2lkZUNvbXBvbmVudCxcbiAgICBBWFBFbnRpdHlDYXRlZ29yeUNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQUGFnZUxheW91dEJhc2UsXG4gICAgICB1c2VFeGlzdGluZzogQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdDb21wb25lbnQgZXh0ZW5kcyBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgYWN0aXZlUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB2bSA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QuZGF0YVsndm0nXSBhcyBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsO1xuXG4gIC8vXG4gIHByb3RlY3RlZCBzdG9yZSA9IGluamVjdChBWFBMYXlvdXRUaGVtZVNlcnZpY2UpO1xuICAvL1xuICBwcm90ZWN0ZWQgc2VhcmNoQmFyU2hvd24gPSBzaWduYWwodHJ1ZSk7XG4gIHByb3RlY3RlZCBhY3RpdmVFbmRTaWRlVmlldyA9IHNpZ25hbDwnY29sdW1uJyB8ICdmaWx0ZXInIHwgJ3NvcnQnPignY29sdW1uJyk7XG5cbiAgcHJvdGVjdGVkIGNhdGVnb3J5U2VhcmNoVmFsdWUgPSBzaWduYWwoJycpO1xuXG4gIC8vIEBWaWV3Q2hpbGQoJ2dyaWQnLCB7IHN0YXRpYzogdHJ1ZX0pIGdyaWQ6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgZ3JpZCA9IHZpZXdDaGlsZDxBWERhdGFUYWJsZUNvbXBvbmVudD4oJ2dyaWQnKTtcbiAgcHJpdmF0ZSBxdWVyeVBhcmFtU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGluaXRpYWxpemVkRnJvbVJvdXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBsYXRmb3JtOiBBWFBsYXRmb3JtKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JpZCgpIS5zZWxlY3RlZFJvd3MgPSB0aGlzLnZtLnNlbGVjdGVkSXRlbXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMudm0uZXZlbnRzJC5zdWJzY3JpYmUoYXN5bmMgKGUpID0+IHtcbiAgICAgIGNvbnN0IHJlZnJlc2hUYXJnZXRJZCA9IGUubWV0YT8ucmVmcmVzaFRhcmdldElkO1xuICAgICAgaWYgKGUuYWN0aW9uID09ICdyZWZyZXNoJykge1xuICAgICAgICBpZiAocmVmcmVzaFRhcmdldElkKSB7XG4gICAgICAgICAgdGhpcy5ncmlkKCk/LnJlZnJlc2hJdGVtQ2hpbGRyZW4ocmVmcmVzaFRhcmdldElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdyaWQoKT8ucmVmcmVzaCh7XG4gICAgICAgICAgICByZXNldDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEtlZXAgVVJMIHF1ZXJ5IHBhcmFtIGB2aWV3YCBpbiBzeW5jIHdpdGggY3VycmVudCB2bSB2aWV3XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZEZyb21Sb3V0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50Vmlld05hbWUgPSB0aGlzLnZtLnZpZXcoKS5uYW1lO1xuICAgICAgY29uc3QgdXJsVmlldyA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3ZpZXcnKTtcbiAgICAgIGlmIChjdXJyZW50Vmlld05hbWUgJiYgY3VycmVudFZpZXdOYW1lICE9PSB1cmxWaWV3KSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogeyB2aWV3OiBjdXJyZW50Vmlld05hbWUgfSxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmVhY3QgdG8gZXh0ZXJuYWwgVVJMIGNoYW5nZXMgKGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uIG9yIGRlZXAgbGlua3MpXG4gICAgdGhpcy5xdWVyeVBhcmFtU3ViID0gdGhpcy5hY3RpdmVSb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShhc3luYyAocXApID0+IHtcbiAgICAgIGNvbnN0IHZpZXdGcm9tVXJsID0gcXAuZ2V0KCd2aWV3Jyk7XG4gICAgICBhd2FpdCB0aGlzLnZtLnNldFZpZXcodmlld0Zyb21VcmwpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHZpZXdGcm9tVXJsID0gdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgndmlldycpO1xuICAgIGF3YWl0IHRoaXMudm0uc2V0Vmlldyh2aWV3RnJvbVVybCk7XG5cbiAgICBjb25zdCByZXNvbHZlZFZpZXcgPSB0aGlzLnZtLnZpZXcoKS5uYW1lO1xuICAgIGNvbnN0IGN1cnJlbnRVcmxWaWV3ID0gdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgndmlldycpO1xuICAgIGlmIChjdXJyZW50VXJsVmlldyAhPT0gcmVzb2x2ZWRWaWV3KSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2ZVJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogeyB2aWV3OiByZXNvbHZlZFZpZXcgfSxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVkRnJvbVJvdXRlID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbHVtblNpemVDaGFuZ2VkKGU6IG9uQ29sdW1uU2l6ZUNoYW5nZWRFdmVudCkge1xuICAgIGlmIChlLmlzVXNlckludGVyYWN0aW9uICYmIGUudHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgIHRoaXMudm0uc2F2ZVNldHRpbmdzKCdjb2x1bW5TaXplcycsIGUuZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uUGFnZUNoYW5nZWQoZTogQVhEYXRhUGFnZXJDaGFuZ2VkRXZlbnQpIHtcbiAgICBpZiAoZS5pc1VzZXJJbnRlcmFjdGlvbikge1xuICAgICAgY29uc3QgcGFnZVNpemVDaGFuZ2VkID0gZS50YWtlICE9IHRoaXMudm0uZGF0YVNvdXJjZS5wYWdlU2l6ZTtcbiAgICAgIGlmIChwYWdlU2l6ZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy52bS5zYXZlU2V0dGluZ3MoJ3BhZ2VTaXplJywgZS50YWtlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Db2x1bW5zT3JkZXJDaGFuZ2VkKGU6IEFYQ29sdW1uc09yZGVyQ2hhbmdlZEV2ZW50KSB7XG4gICAgaWYgKGUuaXNVc2VySW50ZXJhY3Rpb24pIHtcbiAgICAgIHRoaXMudm0ub25Db2x1bW5zT3JkZXJDaGFuZ2VkKGUuZGF0YS5ldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRyb3Bkb3duUm93SXRlbXMocm93RGF0YTogYW55KTogUHJvbWlzZTxBWFJvd0NvbW1hbmRJdGVtW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudm0uc2Vjb25kYXJ5Um93QWN0aW9ucyhyb3dEYXRhKSkubWFwKChjKSA9PiAoe1xuICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgdGV4dDogYy50aXRsZSxcbiAgICAgIGNvbG9yOiBjLmNvbG9yLFxuICAgICAgZGlzYWJsZWQ6IGMuZGlzYWJsZWQsXG4gICAgICBkZWZhdWx0OiBjLmRlZmF1bHQsXG4gICAgICBkaXZpZGVkOiBjLnNlcGFyYXRlZCxcbiAgICB9KSkgYXMgQVhSb3dDb21tYW5kSXRlbVtdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21tYW5kUm93SXRlbXMgPSBjb21wdXRlZDxBWFJvd0NvbW1hbmRJdGVtW10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy52bS5wcmltYXJ5Um93QWN0aW9ucygpLm1hcCgoYykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgICBuYW1lOiBjLm5hbWUsXG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZVN5bmMoYy50aXRsZSksXG4gICAgICAgIGNvbG9yOiBjLmNvbG9yLFxuICAgICAgICBkaXNhYmxlZDogYy5kaXNhYmxlZCxcbiAgICAgICAgZGVmYXVsdDogYy5kZWZhdWx0LFxuICAgICAgfSBhcyBBWFJvd0NvbW1hbmRJdGVtO1xuICAgIH0pO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlUm93RGJDbGljayhlOiBBWERhdGFUYWJsZVJvd0RiQ2xpY2spIHtcbiAgICBpZiAodGhpcy5ncmlkKCk/LmRhdGFTb3VyY2UuaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFsbEl0ZW1zID0gWy4uLnRoaXMuY29tbWFuZFJvd0l0ZW1zKCksIC4uLihhd2FpdCB0aGlzLmRyb3Bkb3duUm93SXRlbXMoZS5kYXRhKSldO1xuICAgIC8vIGNvbnN0IGRlZmF1bHRBY3Rpb24gPSBhbGxJdGVtcy5maW5kKChjKSA9PiAoYyBhcyBhbnkpLmRlZmF1bHQpIHx8IGFsbEl0ZW1zWzBdO1xuXG4gICAgY29uc3QgZGVmYXVsdEFjdGlvbiA9IGFsbEl0ZW1zLmZpbmQoKGMpID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gYy5uYW1lLnNwbGl0KCcmJylbMF07XG4gICAgICByZXR1cm4gKChjIGFzIGFueSkuZGVmYXVsdCB8fCBjb21tYW5kTmFtZSA9PT0gJ29wZW4tZW50aXR5JykgJiYgIWMuZGlzYWJsZWQ7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRlZmF1bHRBY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogZS5jb21wb25lbnQsXG4gICAgICBuYW1lOiBkZWZhdWx0QWN0aW9uLm5hbWUsXG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZVJvd0NvbW1hbmRDbGljayhkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREcm9wZG93blJvd0l0ZW1zID0gKHJvd0RhdGE6IHVua25vd24pOiBQcm9taXNlPEFYUm93Q29tbWFuZEl0ZW1bXT4gPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5kcm9wZG93blJvd0l0ZW1zKHJvd0RhdGEpKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0Q29tbWFuZFJvd0l0ZW1zID0gKCk6IEFYUm93Q29tbWFuZEl0ZW1bXSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZFJvd0l0ZW1zKCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVJvd0NvbW1hbmRDbGljayhlOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCkge1xuICAgIGlmICh0aGlzLmdyaWQoKT8uZGF0YVNvdXJjZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGUuc2V0TG9hZGluZykge1xuICAgICAgZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnZtLmV4ZWN1dGVDb21tYW5kKGUubmFtZSwgZS5kYXRhKTtcbiAgICBpZiAoZS5zZXRMb2FkaW5nKSB7XG4gICAgICBlLnNldExvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVTZWxlY3RlZFJvd3NDaGFuZ2Uocm93czogdW5rbm93bltdKSB7XG4gICAgdGhpcy52bS5zZWxlY3RlZEl0ZW1zLnNldChyb3dzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYWtlUmVzcG9uc2l2ZTx0Pih2YWx1ZTogdCk6IHQgfCBzdHJpbmcge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdNb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdTTScpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2lkZUJhcihzaWRlQmFyPzogJ2NvbHVtbicgfCAnZmlsdGVyJyB8ICdzb3J0Jykge1xuICAgIHRoaXMudG9nZ2xlRW5kU2lkZSgpO1xuICAgIGlmIChzaWRlQmFyKSB7XG4gICAgICB0aGlzLmFjdGl2ZUVuZFNpZGVWaWV3LnNldChzaWRlQmFyKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2VhcmNoQmFyKCkge1xuICAgIHRoaXMuc2VhcmNoQmFyU2hvd24udXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUmVzZXRDbGljayhzaWRlQmFyOiAnZmlsdGVyJyB8ICdzb3J0JyB8ICdjb2x1bW4nKSB7XG4gICAgc3dpdGNoIChzaWRlQmFyKSB7XG4gICAgICBjYXNlICdmaWx0ZXInOiB7XG4gICAgICAgIHRoaXMudm0ucmVzZXRGaWx0ZXJzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc29ydCc6IHtcbiAgICAgICAgdGhpcy52bS5yZXNldFNvcnRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICB0aGlzLnZtLnJlc2V0Q29sdW1ucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBwcm90ZWN0ZWQgaGFuZGxlRGlzY2FyZENsaWNrKHNpZGVCYXI6ICdmaWx0ZXInIHwgJ3NvcnQnIHwgJ2NvbHVtbicpIHtcbiAgLy8gICBzd2l0Y2ggKHNpZGVCYXIpIHtcbiAgLy8gICAgIGNhc2UgJ2ZpbHRlcic6IHtcbiAgLy8gICAgICAgdGhpcy52bS5kaXNjYXJkRmlsdGVycygpO1xuICAvLyAgICAgICBicmVhaztcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNhc2UgJ3NvcnQnOiB7XG4gIC8vICAgICAgIHRoaXMudm0ucmVzZXRTb3J0cygpO1xuICAvLyAgICAgICBicmVhaztcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgLy8gICAgICAgdGhpcy52bS5yZXNldENvbHVtbnMoKTtcbiAgLy8gICAgICAgYnJlYWs7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUFwcGx5Q2xpY2soc2lkZUJhcjogJ2ZpbHRlcicgfCAnc29ydCcgfCAnY29sdW1uJykge1xuICAgIHRoaXMudm0uYXBwbHlGaWx0ZXJBbmRTb3J0KCk7XG4gICAgdGhpcy50b2dnbGVFbmRTaWRlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy52bS5kZXN0cm95KCk7XG4gIH1cblxuICB0b2dnbGVDYXRlZ29yeURyYXdlcigpIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXJ0U2lkZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UGFnZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudm0udGl0bGUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy52bS5kZXNjcmlwdGlvbigpO1xuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYyhkZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFBhZ2VCcmVhZGNydW1icygpOiBBWFBCcmVhZGNydW1iSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy52bS5iZWFyZGNydW1icygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UHJpbWFyeU1lbnVJdGVtcygpOiBQcm9taXNlPEFYUEFjdGlvbk1lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudm0uZ2V0UHJpbWFyeUFjdGlvbnMoKSkubWFwKFxuICAgICAgKHRyKSA9PlxuICAgICAgICAoe1xuICAgICAgICAgIG5hbWU6IHRyLm5hbWUsXG4gICAgICAgICAgdGl0bGU6IHRyLnRpdGxlLFxuICAgICAgICAgIGljb246IHRyLmljb24sXG4gICAgICAgICAgY29sb3I6IHRyLmNvbG9yLFxuICAgICAgICAgIGRpc2FibGVkOiB0ci5kaXNhYmxlZCxcbiAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgICAgICAgb3B0aW9uczogdHIub3B0aW9ucyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0ci5tZXRhZGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSBhcyBBWFBBY3Rpb25NZW51SXRlbSxcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy52bS5nZXRTZWNvbmRhcnlBY3Rpb25zKCkpLm1hcCgodHIpID0+ICh7XG4gICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgdGl0bGU6IHRyLnRpdGxlLFxuICAgICAgaWNvbjogdHIuaWNvbixcbiAgICAgIGNvbG9yOiB0ci5jb2xvcixcbiAgICAgIGRpc2FibGVkOiB0ci5kaXNhYmxlZCxcbiAgICAgIHNlcGFyYXRlZDogdHIuc2VwYXJhdGVkLFxuICAgICAgY29tbWFuZDoge1xuICAgICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgICBvcHRpb25zOiB0ci5vcHRpb25zLFxuICAgICAgICBtZXRhZGF0YTogdHIubWV0YWRhdGEsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGV4ZWN1dGUoY29tbWFuZDogQVhQRXhlY3V0ZUNvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY29tbWFuZCkge1xuICAgICAgdGhpcy52bS5leGVjdXRlKGNvbW1hbmQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVVbnNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnZtLnNlbGVjdGVkSXRlbXMuc2V0KFtdKTtcbiAgfVxufVxuIiwiPGF4cC1wYWdlLWxheW91dCAqdHJhbnNsYXRlPVwibGV0IHRcIj5cbiAgQGlmICh2bS5lbnRpdHlEZWYuY2F0ZWdvcnkpIHtcbiAgICA8YXhwLWxheW91dC1zdGFydC1zaWRlIGlkPVwiYXhwLWVudGl0eS1jYXRlZ29yeS1kcmF3ZXJcIj5cbiAgICAgIDxheHAtZW50aXR5LWNhdGVnb3J5XG4gICAgICAgIGlkPVwiYXhwLWVudGl0eS1jYXRlZ29yeVwiXG4gICAgICAgIGNsYXNzPVwiYXgtdy04MFwiXG4gICAgICAgIFt2bV09XCJ2bVwiXG4gICAgICAgIFtzZWFyY2hWYWx1ZV09XCJjYXRlZ29yeVNlYXJjaFZhbHVlKClcIlxuICAgICAgPjwvYXhwLWVudGl0eS1jYXRlZ29yeT5cbiAgICA8L2F4cC1sYXlvdXQtc3RhcnQtc2lkZT5cbiAgfVxuICA8YXhwLXBhZ2UtdG9vbGJhciBpZD1cImF4cC1lbnRpdHktdG9vbGJhclwiPlxuICAgIDxheHAtZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcgW3ZpZXdNb2RlbF09XCJ2bVwiPjwvYXhwLWVudGl0eS1tYXN0ZXItdG9vbGJhci12aWV3PlxuICA8L2F4cC1wYWdlLXRvb2xiYXI+XG4gIDxheHAtcGFnZS1jb250ZW50IGNsYXNzPVwiYXgtb3ZlcmZsb3ctYXV0byBheC1wdC0wXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTEgYXgtcGItMVwiXG4gICAgICBbY2xhc3MuYXgtaW52aXNpYmxlXT1cIiFncmlkLnNlbGVjdGVkUm93cy5sZW5ndGhcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgID57eyBncmlkLnNlbGVjdGVkUm93cy5sZW5ndGggfX1cbiAgICAgICAgPHNwYW4+e3sgJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5pdGVtcy1zZWxlY3RlZCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxheC1idXR0b24gdGV4dD1cIkBnZW5lcmFsOnRlcm1zLmludGVyZmFjZS51bnNlbGVjdC1hbGxcIiBjbGFzcz1cImF4LXhzXCIgKG9uQ2xpY2spPVwiaGFuZGxlVW5zZWxlY3RBbGwoKVwiPjwvYXgtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxheC1kYXRhLXRhYmxlXG4gICAgICBpZD1cImF4cC1lbnRpdHktdGFibGVcIlxuICAgICAgW2FsbG93UmVvcmRlcmluZ109XCJ0cnVlXCJcbiAgICAgIChvbkNvbHVtbnNPcmRlckNoYW5nZWQpPVwib25Db2x1bW5zT3JkZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgI2dyaWRcbiAgICAgIFtzaG93Rm9vdGVyXT1cImZhbHNlXCJcbiAgICAgIGNsYXNzPVwiYXgtZmxleC0xXCJcbiAgICAgIFtwYWdpbmddPVwidHJ1ZVwiXG4gICAgICBbZmV0Y2hEYXRhTW9kZV09XCInbWFudWFsJ1wiXG4gICAgICBbcGFyZW50RmllbGRdPVwidm0ucGFyZW50S2V5KClcIlxuICAgICAgW2xvYWRpbmddPVwieyBlbmFibGVkOiB0cnVlLCBhbmltYXRpb246IHRydWUgfVwiXG4gICAgICBbZGF0YVNvdXJjZV09XCJ2bS5kYXRhU291cmNlXCJcbiAgICAgIChzZWxlY3RlZFJvd3NDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0ZWRSb3dzQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG9uUm93RGJDbGljayk9XCJoYW5kbGVSb3dEYkNsaWNrKCRldmVudClcIlxuICAgICAgKG9uQ29sdW1uU2l6ZUNoYW5nZWQpPVwib25Db2x1bW5TaXplQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChvblBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgQGlmICh2bS52aWV3KCkuaW5kZXhDb2wgPT09IHRydWUpIHtcbiAgICAgICAgPGF4LWluZGV4LWNvbHVtbiBpZD1cImF4cC10YWJsZS1jb2wtaW5kZXhcIiBmaXhlZD1cInN0YXJ0XCIgW3dpZHRoXT1cIic4MHB4J1wiIFtwYWRaZXJvXT1cInRydWVcIj48L2F4LWluZGV4LWNvbHVtbj5cbiAgICAgIH1cbiAgICAgIEBpZiAodm0uc2VsZWN0ZWRTY29wZUFjdGlvbnNDb3VudCgpKSB7XG4gICAgICAgIDxheC1zZWxlY3QtY29sdW1uIGlkPVwiYXhwLXRhYmxlLWNvbC1zZWxlY3RcIiBmaXhlZD1cInN0YXJ0XCIgW3dpZHRoXT1cIic2MHB4J1wiPjwvYXgtc2VsZWN0LWNvbHVtbj5cbiAgICAgIH1cbiAgICAgIEBmb3IgKGNvbCBvZiB2bS5jb2x1bW5zKCk7IHRyYWNrIGNvbC5uYW1lKSB7XG4gICAgICAgIEBpZiAoY29sLnZpc2libGUpIHtcbiAgICAgICAgICA8YXhwLXdpZGdldC1jb2x1bW4tcmVuZGVyZXJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIidheHAtdGFibGUtY29sLScgKyBjb2wubmFtZVwiXG4gICAgICAgICAgICBbZXhwYW5kSGFuZGxlcl09XCIkaW5kZXggPT09IDAgJiYgdm0ucGFyZW50S2V5KCkgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgW2NhcHRpb25dPVwiKGNvbC50aXRsZSB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICAgICAgW25vZGVdPVwiY29sLm5vZGUoKVwiXG4gICAgICAgICAgICBbY3VzdG9tV2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICA+PC9heHAtd2lkZ2V0LWNvbHVtbi1yZW5kZXJlcj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmIChnZXRDb21tYW5kUm93SXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGF4LWNvbW1hbmQtY29sdW1uXG4gICAgICAgICAgaWQ9XCJheHAtdGFibGUtY29sLWNvbW1hbmRzXCJcbiAgICAgICAgICBmaXhlZD1cImVuZFwiXG4gICAgICAgICAgW3dpZHRoXT1cImdldENvbW1hbmRSb3dJdGVtcygpLmxlbmd0aCAqIDcwICsgJ3B4J1wiXG4gICAgICAgICAgW2l0ZW1zXT1cImdldENvbW1hbmRSb3dJdGVtcygpXCJcbiAgICAgICAgICAob25JdGVtQ2xpY2spPVwiaGFuZGxlUm93Q29tbWFuZENsaWNrKCRldmVudClcIlxuICAgICAgICA+PC9heC1jb21tYW5kLWNvbHVtbj5cbiAgICAgIH1cbiAgICAgIDxheC1kcm9wZG93bi1jb21tYW5kLWNvbHVtblxuICAgICAgICBpZD1cImF4cC10YWJsZS1jb2wtZHJvcGRvd24tY29tbWFuZHNcIlxuICAgICAgICBmaXhlZD1cImVuZFwiXG4gICAgICAgIFt3aWR0aF09XCInNjBweCdcIlxuICAgICAgICBbaXRlbXNdPVwiZ2V0RHJvcGRvd25Sb3dJdGVtc1wiXG4gICAgICAgIChvbkl0ZW1DbGljayk9XCJoYW5kbGVSb3dDb21tYW5kQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9heC1kcm9wZG93bi1jb21tYW5kLWNvbHVtbj5cbiAgICA8L2F4LWRhdGEtdGFibGU+XG4gIDwvYXhwLXBhZ2UtY29udGVudD5cbjwvYXhwLXBhZ2UtbGF5b3V0PlxuIl19"],"names":["i1","i2","i3","i4","i6","i7","i5"],"mappings":"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"}