@syncfusion/ej2-filemanager 22.2.12 → 23.1.36

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 (58) hide show
  1. package/CHANGELOG.md +4 -77
  2. package/dist/ej2-filemanager.min.js +2 -2
  3. package/dist/ej2-filemanager.umd.min.js +2 -2
  4. package/dist/ej2-filemanager.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-filemanager.es2015.js +183 -26
  6. package/dist/es6/ej2-filemanager.es2015.js.map +1 -1
  7. package/dist/es6/ej2-filemanager.es5.js +197 -24
  8. package/dist/es6/ej2-filemanager.es5.js.map +1 -1
  9. package/dist/global/ej2-filemanager.min.js +2 -2
  10. package/dist/global/ej2-filemanager.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +16 -16
  13. package/src/file-manager/actions/toolbar.d.ts +1 -0
  14. package/src/file-manager/actions/toolbar.js +117 -8
  15. package/src/file-manager/base/file-manager-model.d.ts +12 -1
  16. package/src/file-manager/base/file-manager.d.ts +11 -0
  17. package/src/file-manager/base/file-manager.js +9 -4
  18. package/src/file-manager/base/interface.d.ts +2 -1
  19. package/src/file-manager/layout/details-view.d.ts +1 -0
  20. package/src/file-manager/layout/details-view.js +8 -3
  21. package/src/file-manager/layout/navigation-pane.js +0 -1
  22. package/src/file-manager/models/details-view-settings-model.d.ts +1 -1
  23. package/src/file-manager/models/toolbar-settings-model.d.ts +177 -2
  24. package/src/file-manager/models/toolbar-settings.d.ts +157 -2
  25. package/src/file-manager/models/toolbar-settings.js +64 -2
  26. package/src/file-manager/pop-up/dialog.js +0 -5
  27. package/styles/file-manager/_material3-definition.scss +1 -1
  28. package/styles/file-manager/bootstrap-dark.scss +1 -1
  29. package/styles/file-manager/bootstrap.scss +1 -1
  30. package/styles/file-manager/bootstrap4.scss +1 -1
  31. package/styles/file-manager/bootstrap5-dark.scss +1 -1
  32. package/styles/file-manager/bootstrap5.scss +1 -1
  33. package/styles/file-manager/fabric-dark.scss +1 -1
  34. package/styles/file-manager/fabric.scss +1 -1
  35. package/styles/file-manager/fluent-dark.scss +1 -1
  36. package/styles/file-manager/fluent.scss +1 -1
  37. package/styles/file-manager/highcontrast-light.scss +1 -1
  38. package/styles/file-manager/highcontrast.scss +1 -1
  39. package/styles/file-manager/material-dark.css +0 -1
  40. package/styles/file-manager/material-dark.scss +1 -1
  41. package/styles/file-manager/material.css +0 -1
  42. package/styles/file-manager/material.scss +1 -1
  43. package/styles/file-manager/material3-dark.css +1 -2
  44. package/styles/file-manager/material3-dark.scss +1 -1
  45. package/styles/file-manager/material3.css +1 -2
  46. package/styles/file-manager/material3.scss +1 -1
  47. package/styles/file-manager/tailwind-dark.css +0 -1
  48. package/styles/file-manager/tailwind-dark.scss +1 -1
  49. package/styles/file-manager/tailwind.css +0 -1
  50. package/styles/file-manager/tailwind.scss +1 -1
  51. package/styles/material-dark.css +0 -1
  52. package/styles/material.css +0 -1
  53. package/styles/material3-dark.css +1 -2
  54. package/styles/material3-dark.scss +1 -1
  55. package/styles/material3.css +1 -2
  56. package/styles/material3.scss +1 -1
  57. package/styles/tailwind-dark.css +0 -1
  58. package/styles/tailwind.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility file for common actions\n *\n * @param {HTMLLIElement} node - specifies the node.\n * @param {Object} data - specifies the data.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function updatePath(node, data, instance) {\n var text = getValue('name', data);\n var id = node.getAttribute('data-id');\n var newText = isNOU(id) ? text : id;\n instance.setProperties({ path: getPath(node, newText, instance.hasId) }, true);\n instance.pathId = getPathId(node);\n instance.pathNames = getPathNames(node, text);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId) {\n var matched = getParents(element, text, false, hasId);\n var path = hasId ? '' : '/';\n var len = matched.length - (hasId ? 1 : 2);\n for (var i = len; i >= 0; i--) {\n path += matched[i] + '/';\n }\n return path;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} node - specifies the node element.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node) {\n var matched = getParents(node, node.getAttribute('data-uid'), true);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text) {\n var matched = getParents(element, text, false);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') :\n select('.' + CLS.LIST_TEXT, el).textContent);\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = parent.hasId ? '' : '/';\n var i = parent.hasId ? 0 : 1;\n for (i; i < parent.pathId.length; i++) {\n // eslint-disable-next-line\n var data = getValue(parent.pathId[i], parent.feParent);\n newPath += getValue(key, data) + '/';\n }\n parent.setProperties({ path: newPath }, true);\n}\n/**\n * Functions for remove active element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function removeActive(parent) {\n if (parent.isCut) {\n removeBlur(parent);\n parent.selectedNodes = [];\n parent.actionRecords = [];\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n }\n}\n/**\n * Selects active element in File Manager\n *\n * @param {string} action - specifies the action.\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns active element.\n * @private\n */\nexport function activeElement(action, parent) {\n parent.isSearchCut = false;\n parent.actionRecords = [];\n parent.activeElements = [];\n parent.notify(events.cutCopyInit, {});\n if (parent.activeElements.length === 0) {\n return false;\n }\n removeBlur(parent);\n var blurEle = parent.activeElements;\n if (parent.activeModule !== 'navigationpane') {\n parent.targetPath = parent.path;\n }\n else {\n parent.targetPath = getParentPath(parent.path);\n }\n var i = 0;\n if (blurEle) {\n getModule(parent, blurEle[0]);\n if (action === 'cut') {\n while (i < blurEle.length) {\n addBlur(blurEle[i]);\n i++;\n }\n }\n }\n i = 0;\n parent.selectedNodes = [];\n parent.enablePaste = true;\n parent.notify(events.showPaste, {});\n while (i < parent.activeRecords.length) {\n parent.actionRecords.push(parent.activeRecords[i]);\n parent.selectedNodes.push(getValue('name', parent.activeRecords[i]));\n i++;\n }\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) &&\n parent.activeModule !== 'navigationpane') {\n parent.selectedNodes = [];\n parent.isSearchCut = true;\n var i_1 = 0;\n while (i_1 < parent.selectedItems.length) {\n parent.selectedNodes.push(parent.selectedItems[i_1]);\n i_1++;\n }\n }\n return true;\n}\n/**\n * Adds blur to the elements\n *\n * @param {Element} nodes - specifies the nodes.\n * @returns {void}\n * @private\n */\nexport function addBlur(nodes) {\n nodes.classList.add(CLS.BLUR);\n}\n/**\n * Removes blur from elements\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} hover - specifies the hover string.\n * @returns {void}\n * @private\n */\nexport function removeBlur(parent, hover) {\n var blurEle = (!hover) ? parent.element.querySelectorAll('.' + CLS.BLUR) :\n parent.element.querySelectorAll('.' + CLS.HOVER);\n var i = 0;\n while (i < blurEle.length) {\n blurEle[i].classList.remove((!hover) ? CLS.BLUR : CLS.HOVER);\n i++;\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getModule(parent, element) {\n if (element) {\n if (element.classList.contains(CLS.ROW)) {\n parent.activeModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICON)) {\n parent.activeModule = 'largeiconsview';\n }\n else {\n parent.activeModule = 'navigationpane';\n }\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\n// eslint-disable-next-line\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\n// eslint-disable-next-line\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {string} - returns the image url.\n * @private\n */\n// eslint-disable-next-line\nexport function getImageUrl(parent, item) {\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var imgUrl;\n var fileName = encodeURIComponent(getValue('name', item));\n var fPath = getValue('filterPath', item);\n if (parent.hasId) {\n var imgId = getValue('id', item);\n imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\\\/g, '/')) + fileName;\n }\n else {\n imgUrl = baseUrl + pathUrl + parent.path + fileName;\n }\n imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs.imageUrl;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\n// eslint-disable-next-line\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\n// eslint-disable-next-line\nexport function getName(parent, data) {\n var name = getValue('name', data);\n var fPath = getValue('filterPath', data);\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) && !isNOU(fPath)) {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(parent.path, '') + name;\n }\n return name;\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object[]} items - specifies the item elements.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None') {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n // eslint-disable-next-line\n var lists = new DataManager(items).executeLocal(query);\n return getValue('records', lists);\n}\n/**\n * Gets the data object\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} key - specifies the key.\n * @param {string} value - specifies the value.\n * @returns {Object} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getObject(parent, key, value) {\n // eslint-disable-next-line\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var query = new Query().where(key, 'equal', value);\n // eslint-disable-next-line\n var lists = new DataManager(currFiles).executeLocal(query);\n return lists[0];\n}\n/**\n * Creates empty element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLElement} element - specifies the element.\n * @param {ReadArgs | SearchArgs} args - specifies the args.\n * @returns {void}\n * @private\n */\nexport function createEmptyElement(parent, element, args) {\n var top;\n var layoutElement = select('#' + parent.element.id + CLS.LAYOUT_ID, parent.element);\n var addressBarHeight = select('#' + parent.element.id + CLS.BREADCRUMBBAR_ID, layoutElement).offsetHeight;\n top = layoutElement.offsetHeight - addressBarHeight;\n if (parent.view === 'Details') {\n top = top - select('.' + CLS.GRID_HEADER, layoutElement).offsetHeight;\n }\n if (isNOU(element.querySelector('.' + CLS.EMPTY))) {\n var emptyDiv = createElement('div', { className: CLS.EMPTY });\n var emptyFolder = createElement('div', { className: CLS.LARGE_EMPTY_FOLDER });\n var emptyEle = createElement('div', { className: CLS.EMPTY_CONTENT });\n var dragFile = createElement('div', { className: CLS.EMPTY_INNER_CONTENT });\n if (parent.view === 'Details') {\n element.querySelector('.' + CLS.GRID_VIEW).appendChild(emptyDiv);\n }\n else {\n element.appendChild(emptyDiv);\n }\n emptyDiv.appendChild(emptyFolder);\n emptyDiv.appendChild(emptyEle);\n emptyDiv.appendChild(dragFile);\n }\n if (element.querySelector('.' + CLS.EMPTY)) {\n if (!isNOU(args.error)) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Access-Denied');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Access-Details');\n }\n else if (parent.isFiltered) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Key');\n }\n else if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Search-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Search-Key');\n }\n else {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Folder-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getDirectories(files) {\n return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));\n}\n/**\n * set the Node ID\n *\n * @param {ReadArgs} result - specifies the result.\n * @param {string} rootId - specifies the rootId.\n * @returns {void}\n * @private\n */\nexport function setNodeId(result, rootId) {\n // eslint-disable-next-line\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function setDateObject(args, localeString, dateFormat) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n if (isNOU(dateFormat)) {\n dateFormat = \"MM/dd/yyyy\";\n }\n setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);\n setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n // eslint-disable-next-line\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n // eslint-disable-next-line\n var data = getObject(parent, key, folders[i]);\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n parent.pathId.push(id);\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n read(parent, eventName, parent.path);\n break;\n }\n}\n/**\n * Opens the searched folder\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function openSearchFolder(parent, data) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n parent.originalPath = getFullPath(parent, data, parent.path);\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n // eslint-disable-next-line\n var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);\n if (!subFolder) {\n if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {\n parent.notify(events.pasteInit, {});\n paste(parent, parent.targetPath, parent.selectedNodes, path, parent.fileAction, [], parent.actionRecords);\n }\n else {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n removeBlur(parent);\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n }\n }\n }\n}\n/**\n * Validates the sub folders\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {'{ [key: string]: Object; }[]'} data - specifies the data.\n * @param {string} dropPath - specifies the drop path.\n * @param {string} dragPath - specifies the drag path.\n * @returns {boolean} - returns the validated sub folder.\n * @private\n */\n// eslint-disable-next-line\nexport function validateSubFolder(parent, data, dropPath, dragPath) {\n var subFolder = false;\n for (var i = 0; i < data.length; i++) {\n if (!getValue('isFile', data[i])) {\n var tempTarget = getFullPath(parent, data[i], dragPath);\n if (dropPath.indexOf(tempTarget) === 0) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Sub-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n else {\n var srcData = parent.dragNodes[i];\n var len = 0;\n if (srcData) {\n len = srcData.lastIndexOf('/');\n }\n var path = '';\n if (len > 0) {\n path = dragPath + srcData.substring(0, len + 1);\n }\n if (path === dropPath) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n }\n return subFolder;\n}\n/**\n * Validates the drop handler\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function dropHandler(parent) {\n parent.isDragDrop = true;\n if (parent.dragData.length !== 0) {\n parent.dragPath = parent.dragPath.replace(/\\\\/g, '/');\n parent.dropPath = parent.dropPath.replace(/\\\\/g, '/');\n var subFolder = validateSubFolder(parent, parent.dragData, parent.dropPath, parent.dragPath);\n if (!subFolder && (parent.dragPath !== parent.dropPath)) {\n parent.itemData = [parent.dropData];\n paste(parent, parent.dragPath, parent.dragNodes, parent.dropPath, 'move', [], parent.dragData);\n parent.notify(events.pasteInit, {});\n }\n }\n}\n/**\n * Gets the parent path\n *\n * @param {string} oldPath - specifies the old path.\n * @returns {string} - returns the parent path.\n * @private\n */\nexport function getParentPath(oldPath) {\n var path = oldPath.split('/');\n var newPath = path[0] + '/';\n for (var i = 1; i < path.length - 2; i++) {\n newPath += path[i] + '/';\n }\n return newPath;\n}\n/**\n * Gets the directory path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {ReadArgs} args - returns the read arguements.\n * @returns {string} - returns the directory path\n * @private\n */\nexport function getDirectoryPath(parent, args) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return parent.hasId ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n if (!parent.isDragDrop || (parent.path === parent.dragPath) || (parent.path === parent.dropPath)\n || parent.isSearchDrag) {\n parent.isPathDrag = false;\n read(parent, events.pasteEnd, parent.path);\n }\n else {\n readDropPath(parent);\n }\n parent.trigger('success', { action: operation, result: result });\n}\n/**\n * Reads the drop path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function readDropPath(parent) {\n var pathId = getValue('_fm_id', parent.dropData);\n parent.expandedId = pathId;\n parent.itemData = [parent.dropData];\n if (parent.isPathDrag) {\n parent.notify(events.pathDrag, parent.itemData);\n }\n else {\n if (parent.navigationpaneModule) {\n var node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n if (!node) {\n var liElement = document.querySelector('[data-id = \"' + getValue('id', parent.dropData) + '\"]');\n pathId = liElement.getAttribute(\"data-uid\");\n node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n }\n updatePath(node, parent.dropData, parent);\n }\n read(parent, events.dropPath, parent.dropPath);\n }\n}\n/**\n * Gets the duplicated path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} name - specifies the name.\n * @returns {object} - returns the duplicated path.\n * @private\n */\n// eslint-disable-next-line\nexport function getDuplicateData(parent, name) {\n // eslint-disable-next-line\n var data = null;\n // eslint-disable-next-line\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\n// eslint-disable-next-line\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\n// eslint-disable-next-line\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n // eslint-disable-next-line\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function createDeniedDialog(parent, data, action) {\n var message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\n// eslint-disable-next-line\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasReadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasEditAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasContentAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasUploadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasDownloadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n // eslint-disable-next-line\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n // eslint-disable-next-line\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n","import { Ajax, createElement, select, extend, Internationalization } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath } from '../common/utility';\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n // eslint-disable-next-line\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n // eslint-disable-next-line\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n // eslint-disable-next-line\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n // eslint-disable-next-line\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n // eslint-disable-next-line\n var filterData;\n // eslint-disable-next-line\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n // eslint-disable-next-line\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, \n// eslint-disable-next-line\nrenameItems, actionRecords) {\n // eslint-disable-next-line\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n // eslint-disable-next-line\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n // eslint-disable-next-line\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Function for createAjax in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {Function} fn - specifies the fn.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the target path.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === '_fm_modified') {\n if (!isNOU(columns[i].format)) {\n dateFormat = columns[i].format.toString();\n }\n break;\n }\n }\n return dateFormat;\n}\nfunction createAjax(\n// eslint-disable-next-line\nparent, data, fn, event, operation, targetPath) {\n // eslint-disable-next-line\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n // eslint-disable-next-line\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n var intl = new Internationalization(parent.locale);\n if (!isNOU(result.files)) {\n setDateObject(result.files, intl, getDateFormat(parent));\n for (var i = 0, len = result.files.length; i < len; i++) {\n // eslint-disable-next-line\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(\n// eslint-disable-next-line\nparent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: action, result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, action);\n }\n}\n/* istanbul ignore next */\n/**\n * Function for create success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction createSuccess(parent, result, itemName) {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var args = { action: 'create', result: result };\n parent.trigger('success', args);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.createEnd, parent.path);\n }\n else {\n if (result.error.code === '400') {\n if (parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#newname', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n else {\n var result_2 = {\n files: null,\n error: {\n code: '400',\n message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + itemName + '\"'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result_2);\n }\n var args = { action: 'create', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'create');\n }\n }\n}\n/* istanbul ignore next */\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result, path) {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n if (getValue('filterPath', parent.renamedItem) === getValue('filterPath', parent.itemData[0]) && parent.pathNames.length > 1) {\n parent.pathNames[parent.pathNames.length - 1] = parent.renameText;\n }\n if (parent.activeModule === 'navigationpane') {\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/'));\n parent.itemData[0] = parent.renamedItem;\n read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/') + parent.renamedItem.name + '/');\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(\n// eslint:disable-next-line\nparent, event, path, searchString, showHiddenItems, caseSensitive) {\n // eslint-disable-next-line\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n // eslint-disable-next-line\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var eventArgs = { data: data, cancel: false };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n });\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n// eslint:disable-next-line\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @param {string[]} replaceItems - specifies the replacement.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details, replaceItems) {\n var options = getOptions(parent, text, e, details, replaceItems);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n// eslint:disable-next-line\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/* istanbul ignore next */\n// eslint:disable-next-line\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details, replaceItems) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function (e) {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n var index_1;\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index_1 = val.name.indexOf('.') + 1;\n return (index_1 === 0 && (!val.isFile)) ? 'Folder' : ((index_1 !== 0) ? val.name.substr(index_1).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] == undefined) {\n strArr = details.name.split(',').map(function (val) {\n index_1 = val.indexOf('.') + 1;\n return (index_1 === 0) ? 'Folder' : val.substr(index_1).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {SelectedEventArgs} data - specifies the data.\n * @returns {HTMLElement} - returns the HTML element.\n * @private\n */\nfunction getFilesName(data) {\n var parent = createElement('div', { id: 'uploadDialog' });\n var ulElement = createElement('ul');\n var filesData = data.isModified ? data.modifiedFilesData : data.filesData;\n for (var fileCount = 0; fileCount < filesData.length; fileCount++) {\n var liElement = createElement('li', { className: 'dialogFiles' });\n liElement.innerHTML = filesData[fileCount].name;\n ulElement.appendChild(liElement);\n }\n parent.appendChild(ulElement);\n var errorTag = createElement('div', { className: 'e-fe-error' });\n parent.appendChild(errorTag);\n return parent;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = (parent.activeModule === 'navigationpane') ? getValue('filterPath', parent.itemData[0]).replace(/\\\\/g, '/') : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var toolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(toolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120, isPrimaryKey: true,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-text\\\">\" + data.name + \"</span>\";\n }),\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n this.items = [];\n this.items = this.renderList(args);\n this.items = this.allItems = getSortedData(this.parent, this.items);\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n if (!this.element.style.height) {\n this.adjustHeight();\n }\n this.parent.virtualizationModule.setUIVirtualization();\n }\n // eslint-disable-next-line\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.adjustHeight();\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (!this.parent.isMobile && this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: true,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n // eslint-disable-next-line\n this.parent.dragData.push(this.getItemObject(activeEle[i]));\n this.parent.activeElements.push(activeEle[i]);\n }\n getModule(this.parent, dragLi);\n this.parent.dragPath = this.parent.path;\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n LargeIconsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, '.e-list-item');\n // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n // eslint-disable-next-line\n var info = this.getItemObject(dropLi);\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n else {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n LargeIconsView.prototype.getModuleName = function () {\n return 'largeiconsview';\n };\n LargeIconsView.prototype.adjustHeight = function () {\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n this.element.style.height = (pane.offsetHeight - bar.offsetHeight) + 'px';\n };\n LargeIconsView.prototype.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n this.renderCheckbox(args);\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n // eslint-disable-next-line\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imgUrl = getImageUrl(this.parent, items[i]);\n setValue('_fm_imageUrl', imgUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem) {\n this.clearSelect();\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n }\n };\n LargeIconsView.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'largeiconsview') {\n this.doOpenAction(args.target);\n }\n };\n LargeIconsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'LargeIcons' && this.element) {\n this.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n LargeIconsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.startItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n var eveArgs = { ctrlKey: true, shiftKey: true };\n this.doSelection(lastItem, eveArgs);\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.clearSelection();\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n LargeIconsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onSearch = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n this.parent.searchedItems = args.files;\n this.onLayoutChange(args);\n }\n };\n LargeIconsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.adjustHeight();\n };\n LargeIconsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.updateSelectedData();\n };\n LargeIconsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'LargeIcons' && !isNOU(this.listObj) &&\n this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered\n && this.parent.sortBy === 'filterPath') {\n this.parent.sortBy = 'name';\n this.parent.notify(events.sortByChange, {});\n }\n };\n LargeIconsView.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.search, this.onSearch);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.splitterResize, this.splitterResizeHandler);\n this.parent.off(events.resizeEnd, this.resizeHandler);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n this.parent.off(events.filterEnd, this.onPathChanged);\n };\n LargeIconsView.prototype.addEventListener = function () {\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.search, this.onSearch, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.splitterResize, this.splitterResizeHandler, this);\n this.parent.on(events.resizeEnd, this.resizeHandler, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n };\n LargeIconsView.prototype.onActionFailure = function () { this.isInteraction = true; this.isInteracted = true; };\n // eslint-disable-next-line\n LargeIconsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var ele = closest(args.target, 'li');\n this.parent.itemData = [this.getItemObject(ele)];\n }\n };\n LargeIconsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.updateSelectedData();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n LargeIconsView.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath === '') ? [getPathObject(this.parent)] :\n [this.getItemObject(select('.e-active', this.element))];\n }\n };\n LargeIconsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeRecords = [];\n this.parent.activeElements = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.activeElements.push(activeEle[i]);\n this.parent.activeRecords.push(this.getItemObject(activeEle[i]));\n }\n }\n };\n LargeIconsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {\n this.onPathChanged(args);\n }\n }\n };\n LargeIconsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n LargeIconsView.prototype.onPropertyChanged = function (e) {\n var currentSelected;\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'selectedItems':\n this.isInteraction = false;\n this.isInteracted = false;\n currentSelected = isNOU(this.parent.selectedItems) ? [] : this.parent.selectedItems.slice(0);\n currentSelected = this.parent.allowMultiSelection ? currentSelected :\n currentSelected.slice(currentSelected.length - 1);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onClearAllInit();\n if (currentSelected.length) {\n this.selectItems(currentSelected);\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n this.isInteraction = true;\n this.isInteracted = true;\n break;\n case 'showThumbnail':\n refresh(this.parent);\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n eve.originalEvent.preventDefault();\n if (proxy_1.parent.isDevice) {\n proxy_1.tapCount = eve.tapCount;\n proxy_1.tapEvent = eve;\n setTimeout(function () {\n if (proxy_1.tapCount > 0) {\n proxy_1.doTapAction(proxy_1.tapEvent);\n }\n proxy_1.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n proxy_1.dblClickHandler(eve);\n }\n else {\n proxy_1.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n proxy_1.multiSelect = proxy_1.parent.allowMultiSelection ? true : false;\n if (proxy_1.parent.allowMultiSelection) {\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n proxy_1.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if (e.which === 3 && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (e.ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (e.ctrlKey && e.shiftKey) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !e.ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey) {\n if (!(e && e.ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n // eslint-disable-next-line\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imgUrl);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n // eslint-disable-next-line\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n // eslint-disable-next-line\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n LargeIconsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.FOCUS, this.element);\n };\n LargeIconsView.prototype.getActiveItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n };\n LargeIconsView.prototype.getFirstItem = function () {\n return this.itemList[0];\n };\n LargeIconsView.prototype.getLastItem = function () {\n return this.itemList[this.itemList.length - 1];\n };\n LargeIconsView.prototype.navigateItem = function (item) {\n this.setFocus(item);\n };\n LargeIconsView.prototype.navigateDown = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards, this.perRow);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.navigateRight = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.getNextItem = function (li, isTowards, perRow) {\n if (isNOU(li)) {\n return this.getFocusedItem() || this.getActiveItem() || this.getFirstItem();\n }\n var index = this.itemList.indexOf(li);\n var nextItem;\n do {\n if (isTowards) {\n index = perRow ? index + perRow : index + 1;\n }\n else {\n index = perRow ? index - perRow : index - 1;\n }\n nextItem = this.itemList[index];\n if (this.parent.enableVirtualization && isNOU(nextItem)) {\n var marginValue = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-bottom'), 10);\n var scrollHeight = this.itemList[0].getBoundingClientRect().height + marginValue;\n this.element.firstElementChild.scrollTo(this.element.firstElementChild.scrollTop, this.element.firstElementChild.scrollTop + scrollHeight);\n }\n if (isNOU(nextItem)) {\n return li;\n }\n } while (!isVisible(nextItem));\n return nextItem;\n };\n LargeIconsView.prototype.setFocus = function (nextItem) {\n if (!isNOU(nextItem)) {\n var fileSelectionArgs = this.triggerSelection('select', nextItem);\n if (fileSelectionArgs.cancel !== true) {\n this.startItem = nextItem;\n this.clearSelect();\n this.addActive(nextItem);\n this.addFocus(nextItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', nextItem);\n }\n }\n };\n LargeIconsView.prototype.spaceKey = function (fItem) {\n if (!isNOU(fItem) && !fItem.classList.contains(CLS.ACTIVE)) {\n var fileSelectionArgs = this.triggerSelection('select', fItem);\n if (fileSelectionArgs.cancel !== true) {\n this.addActive(fItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', fItem);\n }\n }\n };\n LargeIconsView.prototype.ctrlAKey = function (firstItem, lastItem) {\n if (this.parent.allowMultiSelection && !isNOU(firstItem)) {\n this.startItem = firstItem;\n var eveArgs = { ctrlKey: true, shiftKey: true };\n var liParent = this.element.querySelector('.' + CLS.LIST_PARENT);\n var liScrPos = liParent.scrollTop;\n var getCurFocusedItem = this.getFocusedItem();\n this.doSelection(lastItem, eveArgs);\n liParent.scrollTop = liScrPos;\n if (!isNOU(getCurFocusedItem)) {\n this.addFocus(getCurFocusedItem);\n }\n }\n };\n LargeIconsView.prototype.csEndKey = function (lastItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(lastItem);\n }\n else if (!isNOU(lastItem)) {\n if (e.action === 'ctrlEnd') {\n this.addFocus(lastItem);\n }\n else {\n this.doSelection(lastItem, e);\n }\n }\n };\n LargeIconsView.prototype.csHomeKey = function (firstItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(firstItem);\n }\n else if (!isNOU(firstItem)) {\n if (e.action === 'ctrlHome') {\n this.addFocus(firstItem);\n }\n else {\n this.doSelection(firstItem, e);\n }\n }\n };\n LargeIconsView.prototype.csDownKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, true);\n }\n else {\n var dItem = this.getNextItem(fItem, true, this.perRow);\n if (!isNOU(dItem)) {\n if (e.action === 'ctrlDown') {\n this.addFocus(dItem);\n }\n else {\n this.doSelection(dItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csLeftKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, false);\n }\n else {\n var lItem = this.getNextItem(fItem, false);\n if (!isNOU(lItem)) {\n if (e.action === 'ctrlLeft') {\n this.addFocus(lItem);\n }\n else {\n this.doSelection(lItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csRightKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, true);\n }\n else {\n var rItem = this.getNextItem(fItem, true);\n if (!isNOU(rItem)) {\n if (e.action === 'ctrlRight') {\n this.addFocus(rItem);\n }\n else {\n this.doSelection(rItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csUpKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, false);\n }\n else {\n var uItem = this.getNextItem(fItem, false, this.perRow);\n if (!isNOU(uItem)) {\n if (e.action === 'ctrlUp') {\n this.addFocus(uItem);\n }\n else {\n this.doSelection(uItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.addActive = function (nextItem) {\n if (!isNOU(nextItem)) {\n if (!nextItem.classList.contains(CLS.ACTIVE)) {\n this.parent.selectedItems.push(this.getDataName(nextItem));\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n addClass([nextItem], [CLS.ACTIVE]);\n nextItem.setAttribute('aria-selected', 'true');\n this.checkState(nextItem, true);\n }\n this.parent.visitedItem = nextItem;\n }\n };\n LargeIconsView.prototype.removeActive = function (preItem) {\n if (!isNOU(preItem)) {\n removeClass([preItem], [CLS.ACTIVE]);\n if (this.parent.allowMultiSelection) {\n preItem.setAttribute('aria-selected', 'false');\n }\n else {\n preItem.removeAttribute('aria-selected');\n }\n this.checkState(preItem, false);\n var index = this.parent.selectedItems.indexOf(this.getDataName(preItem));\n if (index > -1) {\n this.parent.selectedItems.splice(index, 1);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n this.parent.visitedItem = null;\n }\n };\n LargeIconsView.prototype.getDataName = function (item) {\n // eslint-disable-next-line\n var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n if (!isNOU(this.listObj)) {\n this.adjustHeight();\n }\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n // eslint-disable-next-line\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = {\n action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n // eslint-disable-next-line\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n // eslint-disable-next-line\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n // eslint-disable-next-line\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n // eslint-disable-next-line\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n // eslint-disable-next-line\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n // eslint-disable-next-line\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n };\n ContextMenu.prototype.onBeforeClose = function () {\n this.menuTarget = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n this.disabledItems = [];\n var selected = false;\n var uid;\n // eslint-disable-next-line\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest(\"div\");\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n // eslint:disable-next-line\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n // eslint:disable-next-line\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n // eslint:disable-next-line\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n // eslint-disable-next-line\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n // eslint-disable-next-line\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('data-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n /* istanbul ignore next */\n // eslint:disable-next-line\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n this.disabledItems.push('Paste');\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n }\n else if (this.parent.selectedItems.length !== 1 && this.parent.activeModule !== 'navigationpane') {\n this.disabledItems.push('Rename', 'Paste');\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length !== 1) {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n if (this.parent.selectedNodes.length === 0) {\n this.disabledItems.push('Paste');\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n else {\n return -1;\n }\n };\n // eslint-disable-next-line\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n // eslint-disable-next-line\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n // eslint-disable-next-line\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n // eslint:disable-next-line\n switch (itemText) {\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'paste':\n if (_this.menuType === 'folder') {\n if ((_this.parent.activeModule === 'largeiconsview') || (_this.parent.activeModule === 'detailsview')) {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n else {\n _this.parent.folderPath = '';\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n /* istanbul ignore next */\n case 'name':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'size':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'date':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'ascending':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\n// eslint-disable-next-line\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n // eslint-disable-next-line\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n // eslint-disable-next-line\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n // eslint-disable-next-line\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n // eslint-disable-next-line\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n // eslint-disable-next-line\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not \n _this.isMac = false;\n FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);\n return _this;\n }\n FileManager_1 = FileManager;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n FileManager.prototype.getModuleName = function () {\n return 'filemanager';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n FileManager.prototype.preRender = function () {\n if (isNOU(this.element.id) || this.element.id === '') {\n this.element.setAttribute('id', getUniqueID('filemanager'));\n }\n this.ensurePath();\n this.feParent = [];\n this.feFiles = [];\n setAttr(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.isDevice = Browser.isDevice;\n this.isMobile = this.checkMobile();\n if (this.isMobile) {\n this.setProperties({ navigationPaneSettings: { visible: false } }, true);\n }\n var ele = closest(this.element, '.e-bigger');\n this.isBigger = ele ? true : false;\n this.activeModule = (this.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n createSpinner({ target: this.element }, createElement);\n this.addWrapper();\n this.keyConfigs = {\n altN: 'alt+n',\n f5: 'f5',\n ctrlShift1: 'ctrl+shift+1',\n ctrlShift2: 'ctrl+shift+2',\n ctrlU: 'ctrl+u'\n };\n this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale);\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string} - returns the persisted data.\n * @hidden\n */\n FileManager.prototype.getPersistData = function () {\n var keyEntity = ['view', 'path', 'selectedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n FileManager.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'breadcrumbbar',\n args: [this]\n });\n modules.push({\n member: 'largeiconsview',\n args: [this]\n });\n if (this.toolbarSettings.visible) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this]\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this]\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n FileManager.prototype.render = function () {\n this.initialize();\n var slItems = isNOU(this.selectedItems) ? [] :\n this.allowMultiSelection ? this.selectedItems : this.selectedItems.slice(this.selectedItems.length - 1);\n this.setProperties({ selectedItems: slItems }, true);\n this.fileView = this.view;\n this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n this.setRtl(this.enableRtl);\n this.addEventListeners();\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n this.adjustHeight();\n if (isNOU(this.navigationpaneModule)) {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n this.wireEvents();\n this.renderComplete();\n };\n FileManager.prototype.ensurePath = function () {\n var currentPath = this.path;\n if (isNOU(currentPath)) {\n currentPath = '/';\n }\n if (currentPath.lastIndexOf('/') !== (currentPath.length - 1)) {\n currentPath = currentPath + '/';\n }\n this.originalPath = currentPath;\n var paths = currentPath.split('/');\n this.setProperties({ path: paths[0] + '/' }, true);\n this.pathNames = [];\n this.pathId = ['fe_tree'];\n this.itemData = [];\n };\n FileManager.prototype.initialize = function () {\n if (this.isMobile) {\n addClass([this.element], CLS.MOBILE);\n }\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n this.addCssClass(null, this.cssClass);\n this.renderFileUpload();\n };\n FileManager.prototype.addWrapper = function () {\n var headerWrap = this.createElement('div', { id: this.element.id + CLS.TOOLBAR_ID });\n this.element.appendChild(headerWrap);\n var layoutWrap = this.createElement('div', {\n id: this.element.id + CLS.LAYOUT_ID, className: CLS.LAYOUT\n });\n this.element.appendChild(layoutWrap);\n var navigationWrap = this.createElement('div', {\n id: this.element.id + CLS.NAVIGATION_ID, className: CLS.NAVIGATION\n });\n var treeWrap = this.createElement('div', {\n id: this.element.id + CLS.TREE_ID\n });\n navigationWrap.appendChild(treeWrap);\n var contentWrap = this.createElement('div', {\n id: this.element.id + CLS.CONTENT_ID, className: CLS.LAYOUT_CONTENT\n });\n this.breadCrumbBarNavigation = this.createElement('div', {\n id: this.element.id + CLS.BREADCRUMBBAR_ID,\n className: CLS.BREADCRUMBS\n });\n contentWrap.appendChild(this.breadCrumbBarNavigation);\n var gridWrap = this.createElement('div', {\n id: this.element.id + CLS.GRID_ID\n });\n contentWrap.appendChild(gridWrap);\n var largeiconWrap = this.createElement('div', {\n id: this.element.id + CLS.LARGEICON_ID,\n className: CLS.LARGE_ICONS, attrs: { 'role': 'group' }\n });\n contentWrap.appendChild(largeiconWrap);\n var overlay = this.createElement('span', { className: CLS.OVERLAY });\n contentWrap.appendChild(overlay);\n var paneSettings;\n if (!this.enableRtl) {\n layoutWrap.appendChild(navigationWrap);\n layoutWrap.appendChild(contentWrap);\n paneSettings = [\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n },\n { size: '75%', min: '270px' }\n ];\n }\n else {\n layoutWrap.appendChild(contentWrap);\n layoutWrap.appendChild(navigationWrap);\n paneSettings = [\n { size: '75%', min: '270px' },\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n }\n ];\n }\n this.splitterObj = new Splitter({\n paneSettings: paneSettings,\n width: '100%',\n enableRtl: false,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n resizing: this.splitterResize.bind(this)\n });\n this.splitterObj.isStringTemplate = true;\n this.splitterObj.appendTo(layoutWrap);\n var dialogWrap = this.createElement('div', { id: this.element.id + CLS.DIALOG_ID });\n this.element.appendChild(dialogWrap);\n var menuWrap = this.createElement('ul', { id: this.element.id + CLS.CONTEXT_MENU_ID });\n this.element.appendChild(menuWrap);\n var dialogImgWrap = this.createElement('div', { id: this.element.id + CLS.IMG_DIALOG_ID });\n this.element.appendChild(dialogImgWrap);\n var extnDialogWrap = this.createElement('div', { id: this.element.id + CLS.EXTN_DIALOG_ID });\n this.element.appendChild(extnDialogWrap);\n var uploadDialogWrap = this.createElement('div', { id: this.element.id + CLS.UPLOAD_DIALOG_ID });\n this.element.appendChild(uploadDialogWrap);\n };\n FileManager.prototype.adjustHeight = function () {\n var toolbar = select('#' + this.element.id + CLS.TOOLBAR_ID, this.element);\n var toolBarHeight = toolbar ? toolbar.offsetHeight : 0;\n if (this.splitterObj) {\n this.splitterObj.height = (this.element.clientHeight - toolBarHeight).toString();\n this.splitterObj.dataBind();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.splitterResize = function () {\n this.notify(events.splitterResize, {});\n };\n FileManager.prototype.splitterAdjust = function () {\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n if (this.navigationPaneSettings.visible) {\n this.splitterObj.expand(this.enableRtl ? 1 : 0);\n bar.classList.remove(CLS.DISPLAY_NONE);\n }\n else {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n };\n FileManager.prototype.addCssClass = function (oldOne, newOne) {\n if (!isNOU(oldOne) && oldOne !== '') {\n removeClass([this.element], oldOne.split(' '));\n }\n if (!isNOU(newOne) && newOne !== '') {\n addClass([this.element], newOne.split(' '));\n }\n };\n FileManager.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n FileManager.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n FileManager.prototype.onContextMenu = function (e) {\n e.preventDefault();\n };\n FileManager.prototype.checkMobile = function () {\n return (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(Browser.userAgent.toLowerCase())\n && /mobile/i.test(Browser.userAgent.toLowerCase()));\n };\n FileManager.prototype.renderFileUpload = function () {\n var id = this.element.id + CLS.UPLOAD_ID;\n var uploadEle = this.createElement('input', { id: id, attrs: { name: 'uploadFiles', type: 'file' } });\n this.element.appendChild(uploadEle);\n this.uploadDialogObj = new Dialog({\n header: getLocaleText(this, 'Header-Upload'),\n content: uploadEle,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: false,\n isModal: true,\n width: '350px',\n target: this.popupTarget ? this.popupTarget : '#' + this.element.id,\n cssClass: getCssClass(this, this.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: this.locale,\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n enableRtl: this.enableRtl,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n open: this.onOpen.bind(this),\n close: this.onClose.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n this.uploadDialogObj.appendTo('#' + this.element.id + CLS.UPLOAD_DIALOG_ID);\n this.renderUploadBox();\n };\n FileManager.prototype.renderUploadBox = function () {\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n this.uploadObj = new Uploader({\n dropArea: select('#' + this.element.id + CLS.CONTENT_ID, this.element),\n asyncSettings: {\n saveUrl: uploadUrl,\n removeUrl: uploadUrl\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n // eslint-disable-next-line\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n // eslint-disable-next-line\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n // eslint-disable-next-line\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n // eslint-disable-next-line\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n FileManager.prototype.onUploadSuccess = function (files) {\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n FileManager.prototype.onUploadFailure = function (files) {\n // eslint-disable-next-line\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') != -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n FileManager.prototype.unWireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeHandler);\n this.keyboardModule.destroy();\n };\n FileManager.prototype.setPath = function () {\n this.setProperties({ selectedItems: [] }, true);\n this.ensurePath();\n this.notify(events.clearPathInit, { selectedNode: this.pathId[0] });\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {FileManager} newProp\n * @param {FileManager} oldProp\n * @returns void\n * @private\n */\n /* istanbul ignore next */\n // eslint:disable-next-line\n FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var height;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'ajaxSettings':\n this.ajaxSettingSetModel(newProp);\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'allowMultiSelection':\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n else {\n if (this.selectedItems.length > 1) {\n this.setProperties({ selectedItems: this.selectedItems.slice(this.selectedItems.length - 1) }, true);\n }\n removeClass([this.element], CLS.CHECK_SELECT);\n }\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'cssClass':\n this.addCssClass(oldProp.cssClass, newProp.cssClass);\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'detailsViewSettings':\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableRtl':\n this.enableRtl = newProp.enableRtl;\n this.refresh();\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n this.refresh();\n break;\n case 'height':\n height = !isNOU(newProp.height) ? formatUnit(newProp.height) : newProp.height;\n setAttr(this.element, { 'height': height });\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'locale':\n if (!isNOU(newProp.enableRtl)) {\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n }\n this.localeSetModelOption(newProp);\n break;\n case 'navigationPaneSettings':\n this.splitterAdjust();\n this.notify(events.modelChanged, { module: 'navigationpane', newProp: newProp, oldProp: oldProp });\n break;\n case 'path':\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n refresh(this);\n this.notify(events.sortByChange, {});\n if (this.view === 'Details') {\n this.notify(events.sortColumn, {});\n }\n break;\n case 'popupTarget':\n if (this.uploadDialogObj) {\n this.uploadDialogObj.target = newProp.popupTarget;\n }\n if (this.dialogObj) {\n this.dialogObj.target = newProp.popupTarget;\n }\n if (this.extDialogObj) {\n this.extDialogObj.target = newProp.popupTarget;\n }\n if (this.viewerObj) {\n this.viewerObj.target = newProp.popupTarget;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualizationModule = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items)) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items)) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n // eslint-disable-next-line\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n // eslint-disable-next-line\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","import { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n // eslint-disable-next-line\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: largeIconSpan + getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: gridSpan + getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>'\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy':\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n getLocaleText(this.parent, 'View') + '></button>'\n };\n break;\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip };\n break;\n }\n items.push(item);\n }\n return items;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n if (e.newProp.toolbarSettings.items !== undefined) {\n this.items = this.toolbarItemData(this.getItems(e.newProp.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add(\"e-virtual-top\");\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add(\"e-virtual-bottom\");\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n * @param dataSourceLength The length of the data source.\n * @returns The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount = Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) / (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount * (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n * @param destroy - Set `true` to unwire the scroll event.\n */\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n // Wire the scroll event\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n // Unwire the scroll event\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n /**\n * Handles the scroll event for the list element.\n * This method updates the top and bottom elements and the displayed items based on the scroll position.\n */\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n // Set the starting height to 0\n var startingHeight = 0;\n // Get the current scroll position\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n // Calculate the height of the top element\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n // Calculate the height of the bottom element\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n // If the scroll position is less than or equal to the total height, set the top and bottom element heights.\n // Otherwise, set the top element height to the total height and the bottom element height to 0.\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n // If the top element height has changed, update the top and bottom element heights and re-render the items.\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n // Check whether the scroll direction is upward or downward\n if (scroll > this.scrollPosition) {\n // Scrolling is upward\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n // Scrolling is downward\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n // Update the list difference and scroll position variables\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\n // Update the list of items and the items property of the largeIconInstance\n this.largeIconInstance.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.largeIconInstance.element));\n this.largeIconInstance.items = this.largeIconInstance.allItems.slice(this.renderedCount -\n this.itemCount, this.renderedCount);\n };\n /**\n * Calculates the current scroll position of the list element.\n * @param startingHeight The starting height from which to calculate the scroll position.\n * @returns The current scroll position.\n */\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n // If the scroll position is less than or equal to the starting height, return 0.\n // Otherwise, return the scroll position minus the starting height.\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n /**\n * This method updates the displayed items and the selection based on the scroll direction.\n * @param listDiff The number of rows to update.\n * @param isScrollingDown If set to true, the scroll direction is downward.\n */\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n // Update the displayed items\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n };\n /**\n * Updates the items in the large icons view.\n * @param isScrollingDown If set to true, the scroll direction is downward.\n */\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n // Get the next batch of items to be displayed\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n // If there are items to be displayed, create list elements for them and append them to the list\n if (this.items.length > 0) {\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n // Update the rendered count variable\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n // Remove the first batch of items from the list\n for (var i = 0; i < this.rowItemCount; i++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n // Scrolling up\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount === this.largeIconInstance.allItems.length) {\n // Set lastItemIndex to the last item in the last row\n lastItemIndex = this.renderedCount - (this.itemCount - this.rowItemCount + this.lastRowCount);\n // Set renderedCount to the total number of items that have been rendered, except for the items in the last row\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.lastRowCount);\n // Set isAllRendered to true to indicate that all items have been rendered\n isAllRendered = true;\n }\n else {\n // Set lastItemIndex to the last item in the current row\n lastItemIndex = this.renderedCount - this.itemCount;\n // Set renderedCount to the total number of items that have been rendered, except for the items in the current row\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.rowItemCount);\n }\n // Set startItemIndex to the first item in the current or previous row\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n // Set the items array to the items in the current or previous row\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n // Create a list of elements from the items array\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n // Set the itemList array to the list items in the list elements\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Add the items to the beginning of the list\n for (var len = this.itemList.length; len > 0; len--) {\n this.largeIconInstance.element.firstElementChild.insertBefore(this.itemList[len - 1], this.topElement.nextElementSibling);\n }\n // Remove the last row of items from the list\n for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n /**\n * Destroys the component.\n */\n Virtualization.prototype.destroy = function () {\n // If the file manager has already been destroyed, return immediately\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\n // If the large icon element has a child element, unwire the scroll event\n if (!isNullOrUndefined(this.largeIconInstance.element.firstElementChild)) {\n this.wireScrollEvent(true);\n }\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { createDialog } from '../pop-up/dialog';\nimport { updatePath, getPath, getDirectories } from '../common/utility';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';\nimport { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';\nimport { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';\n/**\n * NavigationPane module\n */\nvar NavigationPane = /** @class */ (function () {\n /**\n * Constructor for the TreeView module\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n /* istanbul ignore next */\n function NavigationPane(parent) {\n this.removeNodes = [];\n this.moveNames = [];\n this.expandTree = false;\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n // eslint-disable-next-line\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n // eslint-disable-next-line\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: true,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n // eslint-disable-next-line\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n // eslint-disable-next-line\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n // eslint-disable-next-line\n var directories = getDirectories(files);\n if (directories.length > 0 &&\n (directories[0].filterPath == null || this.getTreeData(target)[0].filterPath == null || directories[0].filterPath !== this.getTreeData(target)[0].filterPath)) {\n var length_1 = 0;\n // eslint-disable-next-line\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line\n folders[length_1]._fm_icon = 'e-fe-folder';\n // eslint-disable-next-line\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n // eslint-disable-next-line\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n // eslint-disable-next-line\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.selectedNodes = [args.node.getAttribute(\"data-uid\")];\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n // eslint-disable-next-line\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.selectedNodes = [node.getAttribute('data-uid')];\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\n // eslint-disable-next-line\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.selectedItems = [];\n this.parent.itemData = nodeData;\n var previousPath = this.parent.path;\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n if (!this.isRightClick && this.isSameNodeClicked && sNode.querySelector('.e-list-text').innerHTML !== this.parent.pathNames[this.parent.pathNames.length - 1]) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node);\n this.parent.visitedItem = args.node;\n }\n this.expandNodeTarget = null;\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.isNodeClickCalled = true;\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n NavigationPane.prototype.onPathDrag = function (args) {\n this.isPathDragged = true;\n this.selectResultNode(args[0]);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpand = function (args) {\n if (!args.isInteracted && !this.isDrag) {\n return;\n }\n if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n var text = getValue('text', args.nodeData);\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? text : id;\n var path = getPath(args.node, newText, isId);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n this.isNodeExpandCalled = true;\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n // eslint-disable-next-line\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], !this.expandTree);\n }\n this.expandNodeTarget = '';\n }\n this.expandTree = false;\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.selectedNodes = [sleId];\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.removeChildNodes(id);\n this.addChild(args.files, id, false);\n this.treeObj.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.expandTree = this.treeObj.expandedNodes.indexOf(this.treeObj.selectedNodes[0]) !== -1;\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEnd = function (args) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.updateTree(args);\n }\n else {\n // eslint-disable-next-line\n var data = this.treeObj.getTreeData();\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(data).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(data).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);\n this.parent.expandedId = this.renameParent;\n this.parent.itemData = this.getTreeData(this.renameParent);\n read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\\\/g, '/'));\n }\n }\n };\n NavigationPane.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.addDragDrop();\n break;\n case 'navigationPaneSettings':\n read(this.parent, events.finalizeEnd, '/');\n if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {\n this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDownLoadInit = function () {\n this.doDownload();\n };\n NavigationPane.prototype.onSelectionChanged = function (e) {\n this.treeObj.selectedNodes = [e.selectedNode];\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n // eslint-disable-next-line\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n // eslint-disable-next-line\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n // eslint-disable-next-line\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n // eslint-disable-next-line\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (this.parent.hasId) {\n this.parent.isDropEnd = !this.parent.isPasteError;\n readDropPath(this.parent);\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n // eslint-disable-next-line\n var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n // eslint-disable-next-line\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n // eslint-disable-next-line\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n // eslint-disable-next-line\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n // eslint-disable-next-line\n NavigationPane.prototype.getTreeData = function (args) {\n // eslint-disable-next-line\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n // eslint-disable-next-line\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\nimport { removeBlur, openAction, getImageUrl, fileType, getSortedData, getLocaleText, updateLayout } from '../common/utility';\nimport { createEmptyElement } from '../common/utility';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { cutFiles, addBlur, openSearchFolder, copyFiles, removeActive, pasteHandler, getPathObject, getName } from '../common/index';\nimport { hasReadAccess, hasEditAccess, hasDownloadAccess, doRename, getAccessClass, createDeniedDialog, rename } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule, getFullPath } from '../common/index';\nimport { getDirectoryPath, updateRenamingData, getItemName, doDeleteFiles, doDownloadFiles } from '../common/index';\n/**\n * DetailsView module\n */\nvar DetailsView = /** @class */ (function () {\n /**\n * Constructor for the GridView module\n *\n * @param {FileManager} parent - specifies the parent.\n * @hidden\n */\n function DetailsView(parent) {\n this.isInteracted = true;\n this.interaction = true;\n this.isPasteOperation = false;\n this.isColumnRefresh = false;\n this.dragObj = null;\n this.startIndex = null;\n this.firstItemIndex = null;\n this.isSelectionUpdate = false;\n this.currentSelectedItem = [];\n this.count = 0;\n this.isRendered = true;\n this.isLoaded = false;\n this.isNameWidth = false;\n this.pasteOperation = false;\n this.uploadOperation = false;\n /* istanbul ignore next */\n // eslint:disable-next-line\n this.actionDivert = false;\n Grid.Inject(Resize, ContextMenu, Sort, VirtualScroll);\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.GRID_ID, this.parent.element);\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n tab: 'tab',\n moveDown: 'downarrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n ctrlUp: 'ctrl+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n end: 'end',\n home: 'home',\n moveUp: 'uparrow',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n if (this.parent.isMobile) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick',\n persistSelection: (this.parent.enableVirtualization) ? true : false\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n // eslint-disable-next-line\n load: function (args) {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent[\"portals\"] = args;\n this.parent.notify('renderReactTemplate', this.parent[\"portals\"]);\n this.parent[\"renderReactTemplates\"]();\n };\n /**\n * Gets the grid height.\n * @returns The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n return \"<div class=\\\"e-fe-text\\\">\" + data.name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div>' +\\n '<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].headerText = getLocaleText(this.parent, columns[i].headerText);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return \"<span class=\\\"e-fe-icon e-fe-folder\\\"></span>\";\n }),\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var textEle = args.row.querySelector('.e-fe-text');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n // eslint-disable-next-line\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n // eslint-disable-next-line\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n showSpinner(this.parent.element);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, (this.parent.enableVirtualization) ? args.result : this.gridObj.dataSource);\n args.result = items;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) ||\n ((this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization &&\n this.element.querySelector('.e-content').scrollTop == 0))) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.parent.createdItem) {\n this.selectRecords([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n }\n if (this.parent.layoutSelectedItems.length) {\n this.selectRecords(this.parent.layoutSelectedItems);\n }\n if (this.parent.renamedItem) {\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var items = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n // eslint-disable-next-line\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n // eslint-disable-next-line\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n // eslint-disable-next-line\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imgUrl);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath')) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n // eslint-disable-next-line\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n // eslint-disable-next-line\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName(\"e-rowcell e-templatecell\")[0].nextElementSibling) {\n name = dragLi.getElementsByClassName(\"e-rowcell e-templatecell\")[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n // eslint-disable-next-line\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 180px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 180px');\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (!this.parent.isMobile && this.gridObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: true,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n // eslint-disable-next-line\n var info = null;\n // eslint-disable-next-line\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n // eslint-disable-next-line\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n // eslint-disable-next-line\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n this.gridObj.getRowByIndex(args.rowIndex).removeAttribute('tabindex');\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n this.gridObj.getRowByIndex(lastItemIndex).querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n proxy_1.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (proxy_1.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', proxy_1.parent.allowMultiSelection, proxy_1.gridObj.selectionModule);\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = proxy_1.gridObj.getRows().indexOf(row);\n proxy_1.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('data-rowindex'), 10) : null;\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n // eslint-disable-next-line\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focItem = this.getFocusedItem();\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n // eslint-disable-next-line\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1) {\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n // eslint-disable-next-line\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else if (!this.actionDivert) {\n this.addHeaderFocus();\n this.actionDivert = true;\n }\n else {\n this.addFocus(0);\n this.actionDivert = false;\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n // eslint-disable-next-line\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n // eslint-disable-next-line\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n // eslint-disable-next-line\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n // eslint-disable-next-line\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n // eslint-disable-next-line\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function () {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus = select('th.e-fe-grid-name', this.element);\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n // eslint-disable-next-line\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.getRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n // eslint-disable-next-line\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","length","ids","push","names","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","searchSettings","filterType","itemData","getPathObject","caseSensitive","ignoreCase","hiddenItems","showHiddenItems","Search","events.layoutChange","events.search","filter","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","read","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","toLowerCase","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","replace","eventArgs","fileDetails","imageUrl","Date","getTime","toString","trigger","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","Query","sortBy","group","lists","DataManager","executeLocal","getObject","currFiles","feFiles","where","createEmptyElement","top","layoutElement","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","srcData","dragNodes","tempTarget","dropHandler","dragData","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","navigationpaneModule","treeObj","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","uploadObj","dropArea","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","draggingHandler","canDrop","setTimeout","events.dragging","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","parentElement","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","Array","isArray","renameText","events.renameEndParent","events.pathChanged","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","replaceItems","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","index","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","splice","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","showFileExtension","placeholder","Input","properties","formattedString","strArr","location","multipleFiles","onDeleteSubmit","modified","CLS.VALUE","size","index_1","undefined","map","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","position","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","toolbarItems","ToolbarSettings","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","template","initializeCSPTemplate","customAttributes","class","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","CLS.DISPLAY_NONE","enableVirtualization","adjustHeight","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","ondragstart","_this","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","pane","bar","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","firstElementChild","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","name_1","selected","showThumbnail","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","CLS.CHECK","triggerSelection","startIndex","endIndex","addActive","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","parseInt","getPropertyValue","getBoundingClientRect","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","isNullOrUndefined","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","link","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","clientHeight","splitterAdjust","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","uploading","onUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","fileData","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Event","NotifyPropertyChanges","Component","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","updateSortByButton","itemCount","itemTooltip","spanElement","tooltipText","prefixIcon","showTextOn","suffixIcon","overflow","align","onSelectionChanged","reRenderToolbar","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","firstChild","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","Math","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","forEach","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getTreeData","getDragPath","getDropPath","nodeData","addChild","prevent","directories","_fm_icon","addNodes","selecEventArgs","sNode","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","obj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","actionDivert","Grid","Resize","Sort","VirtualScroll","checkNameWidth","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","persistSelection","pageSettings","pageSize","enablePersistence","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","portals","reactTemplateRender","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","_fm_modified","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","includes","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","tabIndex","check","getRecords","hasFilter","name_4","dRecords","index.FileManager","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"oFAiBA,SAAgBA,GAAWC,EAAMC,EAAMC,GACnC,GAAIC,GAAOC,WAAS,OAAQH,GACxBI,EAAKL,EAAKM,aAAa,WACvBC,EAAUC,oBAAMH,GAAMF,EAAOE,CACjCH,GAASO,eAAgBC,KAAMC,EAAQX,EAAMO,EAASL,EAASU,SAAU,GACzEV,EAASW,OAASC,EAAUd,GAC5BE,EAASa,UAAYC,EAAahB,EAAMG,GAW5C,QAAgBQ,GAAQM,EAASd,EAAMS,GAInC,IAAK,GAHDM,GAAUC,EAAWF,EAASd,GAAM,EAAOS,GAC3CF,EAAOE,EAAQ,GAAK,IAEfQ,EADCF,EAAQG,QAAUT,EAAQ,EAAI,GACtBQ,GAAK,EAAGA,IACtBV,GAAQQ,EAAQE,GAAK,GAEzB,OAAOV,GASX,QAAgBI,GAAUd,GAGtB,IAAK,GAFDkB,GAAUC,EAAWnB,EAAMA,EAAKM,aAAa,aAAa,GAC1DgB,KACKF,EAAIF,EAAQG,OAAS,EAAGD,GAAK,EAAGA,IACrCE,EAAIC,KAAKL,EAAQE,GAErB,OAAOE,GAUX,QAAgBN,GAAaC,EAASd,GAGlC,IAAK,GAFDe,GAAUC,EAAWF,EAASd,GAAM,GACpCqB,KACKJ,EAAIF,EAAQG,OAAS,EAAGD,GAAK,EAAGA,IACrCI,EAAMD,KAAKL,EAAQE,GAEvB,OAAOI,GAYX,QAAgBL,GAAWF,EAASd,EAAMsB,EAAMb,GAG5C,IAFA,GAAIM,IAAWf,GACXuB,EAAKT,EAAQU,YACTnB,oBAAMkB,IAAK,CACf,GAAIE,UAAQF,EAAI,IAAMG,IAAgB,CAClC,GAAIC,GAAaL,EAAOC,EAAGpB,aAAa,YAAeM,EAAQc,EAAGpB,aAAa,WAC3EyB,SAAO,IAAMC,GAAeN,GAAIO,WACpCf,GAAQK,KAAKO,GAGjB,IADAJ,EAAKA,EAAGC,YACDO,UAAUC,SAASC,IACtB,MAGR,MAAOlB,GASX,QAAgBmB,GAAaC,GACzB,GAAIC,GAAMD,EAAO1B,MAAQ,KAAO,OAC5B4B,EAAUF,EAAO1B,MAAQ,GAAK,IAC9BQ,EAAIkB,EAAO1B,MAAQ,EAAI,CAC3B,KAAKQ,EAAGA,EAAIkB,EAAOzB,OAAOQ,OAAQD,IAAK,CAEnC,GAAInB,GAAOG,WAASkC,EAAOzB,OAAOO,GAAIkB,EAAOG,SAC7CD,IAAWpC,WAASmC,EAAKtC,GAAQ,IAErCqC,EAAO7B,eAAgBC,KAAM8B,IAAW,GAS5C,QAAgBE,GAAaJ,GACrBA,EAAOK,QACPC,EAAWN,GACXA,EAAOO,iBACPP,EAAOQ,iBACPR,EAAOS,aAAc,EACrBT,EAAOU,OAAOC,QAWtB,QAAgBC,GAAcC,EAAQb,GAKlC,GAJAA,EAAOc,aAAc,EACrBd,EAAOQ,iBACPR,EAAOe,kBACPf,EAAOU,OAAOM,OACuB,IAAjChB,EAAOe,eAAehC,OACtB,OAAO,CAEXuB,GAAWN,EACX,IAAIiB,GAAUjB,EAAOe,cACO,oBAAxBf,EAAOkB,aACPlB,EAAOmB,WAAanB,EAAO5B,KAG3B4B,EAAOmB,WAAaC,EAAcpB,EAAO5B,KAE7C,IAAIU,GAAI,CACR,IAAImC,IACAI,EAAUrB,EAAQiB,EAAQ,IACX,QAAXJ,GACA,KAAO/B,EAAImC,EAAQlC,QACfuC,EAAQL,EAAQnC,IAChBA,GAQZ,KAJAA,EAAI,EACJkB,EAAOO,iBACPP,EAAOS,aAAc,EACrBT,EAAOU,OAAOa,OACPzC,EAAIkB,EAAOwB,cAAczC,QAC5BiB,EAAOQ,cAAcvB,KAAKe,EAAOwB,cAAc1C,IAC/CkB,EAAOO,cAActB,KAAKnB,WAAS,OAAQkC,EAAOwB,cAAc1C,KAChEA,GAEJ,KAA4D,KAAvDkB,EAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAAgB3B,EAAO4B,aAC7C,mBAAxB5B,EAAOkB,aAAmC,CAC1ClB,EAAOO,iBACPP,EAAOc,aAAc,CAErB,KADA,GAAIe,GAAM,EACHA,EAAM7B,EAAO8B,cAAc/C,QAC9BiB,EAAOO,cAActB,KAAKe,EAAO8B,cAAcD,IAC/CA,IAGR,OAAO,EASX,QAAgBP,GAAQS,GACpBA,EAAMnC,UAAUoC,IAAIC,IAUxB,QAAgB3B,GAAWN,EAAQkC,GAI/B,IAHA,GAAIjB,GAAYiB,EACZlC,EAAOrB,QAAQwD,iBAAiB,IAAMC,IADjBpC,EAAOrB,QAAQwD,iBAAiB,IAAMF,IAE3DnD,EAAI,EACDA,EAAImC,EAAQlC,QACfkC,EAAQnC,GAAGc,UAAUyC,OAASH,EAAoBE,GAAXH,IACvCnD,IAWR,QAAgBuC,GAAUrB,EAAQrB,GAC1BA,IACIA,EAAQiB,UAAUC,SAASyC,IAC3BtC,EAAOkB,aAAe,cAEjBqB,UAAQ5D,EAAS,IAAM6D,IAC5BxC,EAAOkB,aAAe,iBAGtBlB,EAAOkB,aAAe,kBAalC,QAAgBuB,GAAkBzC,EAAQ2B,EAAOe,GAC7C,GAAIC,EAeJ,IAdqB,IAAjBhB,EAAM5C,QAAiBiB,EAAO4B,YAC9B5B,EAAOU,OAAOkC,IAAqBC,KAAM7C,IAGzC2C,EADqC,eAArC3C,EAAO8C,eAAeC,WACTpB,EAAQ,IAEqB,aAArC3B,EAAO8C,eAAeC,WACd,IAAMpB,EAGN,IAAMA,EAAQ,IAE/B3B,EAAO2C,WAAaA,EACpB3C,EAAOgD,UAAYC,EAAcjD,IAC7B2B,EAAM5C,OAAS,EAAG,CAClB,GAAImE,GAAgBlD,EAAO8C,eAAeK,WACtCC,EAAcpD,EAAOqD,eACzBC,IAAOtD,EAAQ0C,EAAiBa,GAAsBC,GAAexD,EAAO5B,KAAMuE,EAAYS,GAAcF,OAGvGlD,GAAO4B,WAUR6B,GAAOzD,EAAQuD,IATXvD,EAAO0D,iBACP1D,EAAOU,OAAO6C,IAAuBI,MAA2B,YAAnB3D,EAAO4D,QAAyB5D,EAAO6D,kBAAkBC,QAAQC,WAAa/D,EAAOgE,qBAAqBC,WACvJjE,EAAO0D,iBAAkB,GAGzBQ,GAAKlE,EAAQ0C,EAAiBa,GAAsBC,GAAexD,EAAO5B,MAgB1F,QAAgB+F,GAAanE,EAAQoE,GACjCpE,EAAO4D,QAAU5D,EAAOoE,KACxBpE,EAAO7B,eAAgBiG,KAAMA,IAAQ,IACsB,KAAvDpE,EAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAAgB3B,EAAO4B,cACpE5B,EAAOqE,oBAAsBrE,EAAO8B,cAExC,IAAIa,GAAa,EACb3C,GAAOyB,oBAAoBC,UAAU/C,QAAQgD,QAC7CgB,EAAa3C,EAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAE9D3B,EAAO0C,gBAAiB,EACxBD,EAAkBzC,EAAQ2C,GAAY,GAW1C,QAAgB2B,GAAgBtE,EAAQrB,GACpC,GAAI4F,GAAgB,EAChB5F,KAEI4F,EADAhC,UAAQ5D,EAAS,IAAM6F,GAAW,IAAMC,GAAc,KAAOC,IAC7C,cAEXnC,UAAQ5D,EAAS,IAAMgG,IACZ,iBAEXhG,EAAQiB,UAAUC,SAAS,cAChClB,EAAQiB,UAAUC,SAAS,qBACX,iBAEX0C,UAAQ5D,EAAS,wBACN,gBAGA,IAGxBqB,EAAO4E,aAAeL,EAU1B,QAAgBM,GAAQ7E,GACpBA,EAAOgD,UAAYC,EAAcjD,IAC5B8E,GAAc9E,EAAOgD,SAAS,IAI/BkB,GAAKlE,EAAQ+E,GAAmB/E,EAAO5B,MAHvC4G,GAAmBhF,EAAQA,EAAOgD,SAAS,GAAIiC,IAavD,QAAgBC,GAAWlF,GACvBkE,GAAKlE,EAAQmF,GAAgBnF,EAAO5B,MAUxC,QAAgB6E,GAAcjD,GAC1B,MAAOlC,YAASkC,EAAOzB,OAAOyB,EAAOzB,OAAOQ,OAAS,GAAIiB,EAAOG,UASpE,QAAgBiF,GAAUpF,GACjBY,EAAc,OAAQZ,KAIvBA,EAAOqF,WAAa,QAU5B,QAAgBC,GAAStF,GAChBY,EAAc,MAAOZ,KAItBA,EAAOK,OAAQ,EACfL,EAAOqF,WAAa,QAW5B,QAAgBE,GAASC,GAErB,IADa1H,WAAS,SAAU0H,GAE5B,MAAOC,GAEX,IAAIC,IAAe,MAAO,MAAO,MAAO,OAAQ,MAAO,OAAQ,MAAO,MAAO,OAAQ,MAAO,OACxFC,GAAe,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAChEC,GAAe,OAAQ,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC/EC,GAAe,MAAO,MAAO,OAAQ,KAAM,MAAO,MAAO,OAAQ,MAAO,MAAO,MAAO,MAAO,OAAQ,MACrG,OAAQ,MAAO,MAAO,MAAO,OAC7BC,EAAWhI,WAAS,OAAQ0H,IAED,KAD/BM,EAAWA,EAASC,eACPC,QAAQ,OACjBF,EAAWA,EAASG,MAAM,KAAKC,KAAK,IAkBxC,QAfuC,IAAnCR,EAAYM,QAAQF,GACTK,IAE6B,IAAnCR,EAAYK,QAAQF,GACdM,IAE6B,IAAnCR,EAAYI,QAAQF,GACdO,IAE6B,IAAnCR,EAAYG,QAAQF,GACd,QAAUA,EAGV,qBAAuBA,EAc1C,QAAgBQ,GAAYtG,EAAQuG,GAChC,GAEIC,GAFAC,EAAUzG,EAAO0G,aAAaJ,YAActG,EAAO0G,aAAaJ,YAActG,EAAO0G,aAAaC,IAClGC,GAAqC,IAA1BH,EAAQT,QAAQ,KAAe,SAAW,SAErDa,EAAWC,mBAAmBhJ,WAAS,OAAQyI,IAC/CQ,EAAQjJ,WAAS,aAAcyI,EACnC,IAAIvG,EAAO1B,MAAO,CACd,GAAI0I,GAAQlJ,WAAS,KAAMyI,EAC3BC,GAASC,EAAUG,EAAU5G,EAAO5B,KAAO,OAAS4I,MAMpDR,GAJMtI,oBAAM6I,GAIHN,EAAUG,EAAU5G,EAAO5B,KAAOyI,EAHlCJ,EAAUG,EAAUE,mBAAmBC,EAAME,QAAQ,MAAO,MAAQJ,CAMjF,IAAIK,IACAC,aAAcZ,GACda,SAHJZ,EAASA,EAAS,UAAY,GAAIa,OAAOC,UAAWC,WAMpD,OADAvH,GAAOwH,QAAQ,kBAAmBN,GAC3BA,EAAUE,SAarB,QAAgBK,GAAYzH,EAAQrC,EAAMS,GACtC,GAAIsJ,GAAW5J,WAASkC,EAAO1B,MAAQ,KAAO,OAAQX,GAAQ,IAC1DoJ,EAAQjJ,WAASkC,EAAO1B,MAAQ,WAAa,aAAcX,EAC/D,OAAKO,qBAAM6I,GAIA3I,EAAOsJ,EAHPX,EAAME,QAAQ,MAAO,KAAOS,EAe3C,QAAgBC,GAAQ3H,EAAQrC,GAC5B,GAAIiK,GAAO9J,WAAS,OAAQH,GACxBoJ,EAAQjJ,WAAS,aAAcH,EAKnC,OAJ4D,KAAvDqC,EAAOyB,oBAAoBC,UAAU/C,QAAQgD,QAAgB3B,EAAO4B,YAAgB1D,oBAAM6I,KAE3Fa,GADAb,EAAQA,EAAME,QAAQ,MAAO,MAChBA,QAAQjH,EAAO5B,KAAM,IAAMwJ,GAErCA,EAWX,QAAgBC,GAAc7H,EAAQ8H,GAClC,GAAqB,IAAjBA,EAAM/I,OACN,MAAO+I,EAEX,IAAIC,EAEAA,GADqB,SAArB/H,EAAOgI,WACC,GAAIC,UAAQC,OAAOlI,EAAOkI,OAAQlI,EAAOgI,UAAUjC,eAAe,GAAMoC,MAAM,WAG9E,GAAIF,UAAQE,MAAM,SAG9B,IAAIC,GAAQ,GAAIC,eAAYP,GAAOQ,aAAaP,EAChD,OAAOjK,YAAS,UAAWsK,GAY/B,QAAgBG,GAAUvI,EAAQC,EAAK0B,GAEnC,GAAI6G,GAAY1K,WAASkC,EAAOzB,OAAOyB,EAAOzB,OAAOQ,OAAS,GAAIiB,EAAOyI,SACrEV,GAAQ,GAAIE,UAAQS,MAAMzI,EAAK,QAAS0B,EAG5C,OADY,IAAI0G,eAAYG,GAAWF,aAAaP,GACvC,GAWjB,QAAgBY,GAAmB3I,EAAQrB,EAASkE,GAChD,GAAI+F,GACAC,EAAgBpJ,SAAO,IAAMO,EAAOrB,QAAQZ,GAAK+K,GAAe9I,EAAOrB,SACvEoK,EAAmBtJ,SAAO,IAAMO,EAAOrB,QAAQZ,GAAKiL,GAAsBH,GAAeI,YAK7F,IAJAL,EAAMC,EAAcI,aAAeF,EACf,YAAhB/I,EAAOoE,OACPwE,GAAYnJ,SAAO,IAAMyJ,GAAiBL,GAAeI,cAEzD/K,oBAAMS,EAAQwK,cAAc,IAAMC,KAAa,CAC/C,GAAIC,GAAWC,gBAAc,OAASC,UAAWH,KAC7CI,EAAcF,gBAAc,OAASC,UAAWE,KAChDC,EAAWJ,gBAAc,OAASC,UAAWI,KAC7CC,EAAWN,gBAAc,OAASC,UAAWM,IAC7B,aAAhB7J,EAAOoE,KACPzF,EAAQwK,cAAc,IAAMW,IAAeC,YAAYV,GAGvD1K,EAAQoL,YAAYV,GAExBA,EAASU,YAAYP,GACrBH,EAASU,YAAYL,GACrBL,EAASU,YAAYH,GAErBjL,EAAQwK,cAAc,IAAMC,MACvBlL,oBAAM2E,EAAKmH,OAIPhK,EAAO4B,YACZjD,EAAQwK,cAAc,IAAMQ,IAAmBM,UAAYC,EAAclK,EAAQ,gBACjFrB,EAAQwK,cAAc,IAAMU,IAAyBI,UAAYC,EAAclK,EAAQ,eAE3B,KAAvDA,EAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAClDhD,EAAQwK,cAAc,IAAMQ,IAAmBM,UAAYC,EAAclK,EAAQ,gBACjFrB,EAAQwK,cAAc,IAAMU,IAAyBI,UAAYC,EAAclK,EAAQ,gBAGvFrB,EAAQwK,cAAc,IAAMQ,IAAmBM,UAAYC,EAAclK,EAAQ,gBACjFrB,EAAQwK,cAAc,IAAMU,IAAyBI,UAAYC,EAAclK,EAAQ,iBAbvFrB,EAAQwK,cAAc,IAAMQ,IAAmBM,UAAYC,EAAclK,EAAQ,iBACjFrB,EAAQwK,cAAc,IAAMU,IAAyBI,UAAYC,EAAclK,EAAQ,mBAe/F,IAAImK,GAAO1K,SAAO,IAAM2J,GAAWzK,EACnCiK,IAAOA,EAAMuB,EAAKlB,cAAgB,EAClCkB,EAAKC,MAAMC,UAAYzB,EAAM,KAUjC,QAAgB0B,GAAe3G,GAC3B,MAAO,IAAI0E,eAAY1E,GAAO2E,cAAa,GAAIL,UAAQS,MAAM6B,GAAe,SAAS,GAAO,IAUhG,QAAgBC,GAAUC,EAAQC,GAG9B,IAAK,GADDC,GAAOL,EAAeG,EAAO9G,OACxB7E,EAAI,EAAG8L,EAAMD,EAAK5L,OAAQD,EAAI8L,EAAK9L,IACxC+L,WAAS,SAAUH,EAAS,IAAM5L,EAAG6L,EAAK7L,IAWlD,QAAgBgM,GAAcjI,EAAMkI,EAAcC,GAC9C,IAAK,GAAIlM,GAAI,EAAGA,EAAI+D,EAAK9D,OAAQD,IAAK,CAClC,GAAImM,GAAc,GAAI5D,MAAKvJ,WAAS,cAAe+E,EAAK/D,KACpDoM,EAAe,GAAI7D,MAAKvJ,WAAS,eAAgB+E,EAAK/D,IACtDZ,qBAAM8M,KACNA,EAAa,cAEjBH,WAAS,cAAeE,EAAaI,WAAWF,GAAeG,OAAQJ,IAAenI,EAAK/D,IAC3F+L,WAAS,eAAgBE,EAAaI,WAAWD,GAAgBE,OAAQJ,IAAenI,EAAK/D,KAWrG,QAAgBoL,GAAclK,EAAQnC,GAClC,GAAIwN,GAASrL,EAAOsL,UAAUC,YAAY1N,EAC1C,OAAmB,KAAXwN,EAAiBxN,EAAOwN,EAUpC,QAAgBG,GAAYxL,EAAQyL,GAChC,GAAIC,GAAW1L,EAAO0L,QAEtB,OADAA,GAAYxN,oBAAMwN,IAA0B,KAAbA,EAAmBD,EAAOC,EAAW,IAAMD,EAW9E,QAAgBE,GAAmB3L,EAAQ6C,GAEvC7C,EAAO0D,iBAAkB,GACkB,IAAvCb,EAAK0D,KAAKxI,GAAGiI,QAAQ,eAA+D,IAAxCnD,EAAK0D,KAAKxI,GAAGiI,QAAQ,gBAA0D,IAAlCnD,EAAK0D,KAAKxI,GAAGiI,QAAQ,QAU9GhG,EAAOgI,UAAY4D,EAAa/I,EAAK0D,KAAKxI,IAH1CiC,EAAOkI,OAAS0D,EAAa/I,EAAK0D,KAAKxI,GAAIiC,GAK/CA,EAAOgD,UAAYC,EAAcjD,IACb,YAAhBA,EAAOoE,OACHpE,EAAO6L,SACP1H,EAAanE,EAAQ,YAGrBA,EAAOU,OAAOoL,IAAqBC,OAAQ,gBAC3C/L,EAAO0D,iBAAkB,IAGb,eAAhB1D,EAAOoE,MACPD,EAAanE,EAAQ,cAEzBA,EAAOU,OAAOsL,OASlB,QAAgBJ,GAAa7N,EAAIiC,GAC7B,GAEIiM,GAFApO,EAAOE,EAAGmO,UAAUnO,EAAGoO,YAAY,KAAO,GAC1CC,EAAQvO,CAKZ,QAHImC,IACAiM,EAASjM,EAAOqM,oBAAoBC,SAEhCzO,GACJ,IAAK,OACD,IAAK,GAAIiB,GAAI,EAAG8L,EAAMqB,EAAOlN,OAAQD,EAAI8L,EAAK9L,IAAK,CAC/C,GAAwB,iBAApBmN,EAAOnN,GAAGsN,OAAgD,gBAApBH,EAAOnN,GAAGsN,MAAyB,CACzEA,EAAQH,EAAOnN,GAAGsN,KAClB,OAGAA,EAAQ,eAGhB,KACJ,KAAK,YACDA,EAAQ,WACR,MACJ,KAAK,aACDA,EAAQ,YACR,MACJ,KAAK,OACDA,EAAQ,OAGhB,MAAOA,GAUX,QAAgBG,GAAYvM,EAAQ5B,GAMhC,IAAK,GALDoO,GAAcpO,EAAK6H,MAAM,KACzBwG,EAAUzM,EAAO0M,aAAazG,MAAM,KAEpC0G,EAAO7O,WAASkC,EAAOzB,OAAO,GAAIyB,EAAOG,UACzCF,EAAM/B,oBAAMJ,WAAS,KAAM6O,IAAS,OAAS,KACxC7N,EAAI0N,EAAYzN,OAAS,EAAG6L,EAAM6B,EAAQ1N,OAAS,EAAGD,EAAI8L,EAAK9L,IAAK,CACzE,GAAI8N,GAAgC,KAAnBH,EAAQ3N,EAAI,GAAa+N,GAAqBC,GAC3D5M,EAA0B,KAAfuM,EAAQ3N,GAAa,IAAOkB,EAAO5B,KAAOqO,EAAQ3N,GAAK,IAElEnB,EAAO4K,EAAUvI,EAAQC,EAAKwM,EAAQ3N,IACtCf,EAAKD,WAAS,SAAUH,EAC5BqC,GAAO7B,eAAgBC,KAAM8B,IAAW,GACxCF,EAAOzB,OAAOU,KAAKlB,GACnBiC,EAAOgD,UAAYrF,GACnBqC,EAAOvB,UAAUQ,KAAKnB,WAAS,OAAQH,IACvCuG,GAAKlE,EAAQ4M,EAAW5M,EAAO5B,KAC/B,QAYR,QAAgB2O,GAAiB/M,EAAQrC,GACrCqC,EAAOU,OAAOsM,IAAwBC,aAAcjN,EAAOzB,OAAOyB,EAAOzB,OAAOQ,OAAS,KACzFiB,EAAO0M,aAAejF,EAAYzH,EAAQrC,EAAMqC,EAAO5B,MACvD8F,GAAKlE,EAASA,EAAO5B,OAAS4B,EAAO0M,aAAgBI,GAAoBD,GAAoB7M,EAAO5B,MASxG,QAAgB8O,GAAalN,GAEzB,GADAA,EAAOmN,YAAa,EACgB,IAAhCnN,EAAOO,cAAcxB,QAAgBiB,EAAOS,YAAa,CACzD,GAAIrC,GAA8B,KAAtB4B,EAAOoN,WAAqBpN,EAAO5B,KAAO4B,EAAOoN,UAE7CC,GAAkBrN,EAAQA,EAAOQ,cAAepC,EAAM4B,EAAO5B,QAE9C,SAAtB4B,EAAOqF,YAAyBrF,EAAOmB,aAAe/C,GAA+B,SAAtB4B,EAAOqF,YACvErF,EAAOU,OAAO4M,OACdC,GAAMvN,EAAQA,EAAOmB,WAAYnB,EAAOO,cAAenC,EAAM4B,EAAOqF,cAAgBrF,EAAOQ,iBAG3FR,EAAOS,aAAc,EACrBT,EAAOU,OAAOC,OACdL,EAAWN,GASXwN,GAAaxN,EAAQ,SAPjB2D,MAAO,KACPqG,OACIyD,KAAM,MACNC,QAASxD,EAAclK,EAAQ,qBAC/B2N,WAAY,WAmBpC,QAAgBN,GAAkBrN,EAAQrC,EAAMiQ,EAAUC,GAEtD,IAAK,GADDC,IAAY,EACPhP,EAAI,EAAGA,EAAInB,EAAKoB,OAAQD,IAC7B,GAAKhB,WAAS,SAAUH,EAAKmB,IAgBxB,CACD,GAAIiP,GAAU/N,EAAOgO,UAAUlP,GAC3B8L,EAAM,CACNmD,KACAnD,EAAMmD,EAAQ5B,YAAY,KAE9B,IAAI/N,GAAO,EAIX,IAHIwM,EAAM,IACNxM,EAAOyP,EAAWE,EAAQ7B,UAAU,EAAGtB,EAAM,IAE7CxM,IAASwP,EAAU,CACnB,GAAInD,IACA9G,MAAO,KACPqG,OACIyD,KAAM,MACNC,QAASxD,EAAclK,EAAQ,qBAC/B2N,WAAY,MAGpBH,IAAaxN,EAAQ,QAASyK,GAC9BqD,GAAY,CACZ,YArC0B,CAC9B,GAAIG,GAAaxG,EAAYzH,EAAQrC,EAAKmB,GAAI+O,EAC9C,IAAqC,IAAjCD,EAAS5H,QAAQiI,GAAmB,CASpCT,GAAaxN,EAAQ,QARjByK,GACA9G,MAAO,KACPqG,OACIyD,KAAM,MACNC,QAASxD,EAAclK,EAAQ,oBAC/B2N,WAAY,QAIpBG,GAAY,CACZ,QA4BZ,MAAOA,GASX,QAAgBI,GAAYlO,GACxBA,EAAOmN,YAAa,EACW,IAA3BnN,EAAOmO,SAASpP,SAChBiB,EAAO6N,SAAW7N,EAAO6N,SAAS5G,QAAQ,MAAO,KACjDjH,EAAO4N,SAAW5N,EAAO4N,SAAS3G,QAAQ,MAAO,KACjCoG,EAAkBrN,EAAQA,EAAOmO,SAAUnO,EAAO4N,SAAU5N,EAAO6N,WAChE7N,EAAO6N,WAAa7N,EAAO4N,WAC1C5N,EAAOgD,UAAYhD,EAAOoO,UAC1Bb,GAAMvN,EAAQA,EAAO6N,SAAU7N,EAAOgO,UAAWhO,EAAO4N,SAAU,UAAY5N,EAAOmO,UACrFnO,EAAOU,OAAO4M,SAW1B,QAAgBlM,GAAciN,GAG1B,IAAK,GAFDjQ,GAAOiQ,EAAQpI,MAAM,KACrB/F,EAAU9B,EAAK,GAAK,IACfU,EAAI,EAAGA,EAAIV,EAAKW,OAAS,EAAGD,IACjCoB,GAAW9B,EAAKU,GAAK,GAEzB,OAAOoB,GAUX,QAAgBoO,GAAiBtO,EAAQ6C,GACrC,GAAI6E,GAAW5J,WAASkC,EAAO1B,MAAQ,KAAO,OAAQuE,EAAK0L,KAAO,IAC9DxH,EAAQjJ,WAASkC,EAAO1B,MAAQ,WAAa,aAAcuE,EAAK0L,IACpE,OAAKrQ,qBAAM6I,GAOA/G,EAAO5B,KAAOsJ,EANP,KAAVX,EACO/G,EAAO1B,MAAQoJ,EAAW,IAE9BX,EAAME,QAAQ,MAAO,KAAOS,EAe3C,QAAgB8G,GAAcxO,EAAQyO,EAAWhE,GAC3B,SAAdgE,IACKzO,EAAOmN,WAMRnN,EAAOU,OAAOgO,GAAgBjE,IAL9BzK,EAAOS,aAAc,EACrBT,EAAOU,OAAOC,OACdX,EAAOU,OAAOiO,GAAelE,KAMA,IAAjCzK,EAAO4O,eAAe7P,SACtBiB,EAAO6O,cAGX,KAAK,GAAIC,GAAQ,EAAIA,EAAQrE,EAAO9G,MAAM5E,OAAkB+P,IACxD9O,EAAO6O,WAAW5P,KAAKwL,EAAO9G,MAAMmL,GAAO9O,EAAO1B,MAAQ,KAAO,SAC7D0B,EAAOmN,YACPnN,EAAO+O,eAAe9P,KAAKwL,EAAO9G,MAAMmL,GAGhD9O,GAAO4O,kBACP5O,EAAOgP,oBACHhP,EAAOmN,aAAenN,EAAOiP,aAC7BjP,EAAOkP,WAAY,EAGnBlP,EAAOkP,WAAY,GAElBlP,EAAOmN,YAAenN,EAAO5B,OAAS4B,EAAO6N,UAAc7N,EAAO5B,OAAS4B,EAAO4N,UAChF5N,EAAOmP,cACVnP,EAAOoP,YAAa,EACpBlL,GAAKlE,EAAQqP,GAAiBrP,EAAO5B,OAGrCkR,EAAatP,GAEjBA,EAAOwH,QAAQ,WAAa3G,OAAQ4N,EAAWhE,OAAQA,IAS3D,QAAgB6E,GAAatP,GACzB,GAAIzB,GAAST,WAAS,SAAUkC,EAAOoO,SAGvC,IAFApO,EAAOuP,WAAahR,EACpByB,EAAOgD,UAAYhD,EAAOoO,UACtBpO,EAAOoP,WACPpP,EAAOU,OAAO8O,GAAiBxP,EAAOgD,cAErC,CACD,GAAIhD,EAAOyP,qBAAsB,CAC7B,GAAI/R,GAAO+B,SAAO,cAAgBlB,EAAS,KAAMyB,EAAOyP,qBAAqBC,QAAQ/Q,QAChFjB,KAEDa,EADgBoR,SAASxG,cAAc,eAAiBrL,WAAS,KAAMkC,EAAOoO,UAAY,MACvEpQ,aAAa,YAChCN,EAAO+B,SAAO,cAAgBlB,EAAS,KAAMyB,EAAOyP,qBAAqBC,QAAQ/Q,UAErFlB,EAAWC,EAAMsC,EAAOoO,SAAUpO,GAEtCkE,GAAKlE,EAAQ4P,GAAiB5P,EAAO4N,WAY7C,QAAgBiC,GAAiB7P,EAAQ4H,GAKrC,IAAK,GAHDjK,GAAO,KAEPmS,EAAU9P,EAAOmN,WAAanN,EAAOmO,SAAWnO,EAAOQ,cAClD1B,EAAI,EAAGA,EAAIgR,EAAQ/Q,OAAQD,IAChC,GAAIhB,WAAS,OAAQgS,EAAQhR,MAAQ8I,EAAM,CACvCjK,EAAOmS,EAAQhR,EACf,OAGR,MAAOnB,GASX,QAAgBoS,IAAyB/P,GAKrC,GAJAA,EAAOmP,cAAe,EACqC,KAAvDnP,EAAOyB,oBAAoBC,UAAU/C,QAAQgD,QAC7C3B,EAAOmP,cAAe,GAEE,mBAAxBnP,EAAOkB,aAAmC,CAC1ClB,EAAOgO,YAEP,KADA,GAAIlP,GAAI,EACDA,EAAIkB,EAAO8B,cAAc/C,QAC5BiB,EAAOgO,UAAU/O,KAAKe,EAAO8B,cAAchD,IAC3CA,GAEgC,KAAhCkB,EAAO8B,cAAc/C,QAAgBiB,EAAOmO,UAAuC,IAA3BnO,EAAOmO,SAASpP,QACxEiB,EAAOgO,UAAU/O,KAAK+Q,GAAYhQ,EAAQA,EAAOmO,SAAS,KAGlE,GAAI8B,GAAYjQ,EAAOsJ,cAAc,OACjCC,UAAW,aAAehE,EAASvF,EAAOmO,SAAS,MAEnD+B,EAAYlQ,EAAOsJ,cAAc,OACjCC,UAAW,YACXU,UAAWjK,EAAOmO,SAAS,GAAGvG,OAE9BuI,EAAanQ,EAAOsJ,cAAc,OAClCC,UAAW,gBAEf4G,GAAWpG,YAAYkG,GACvBE,EAAWpG,YAAYmG,EACvB,IAAIE,GAAMpQ,EAAOsJ,cAAc,OAC3BC,UAAW8G,IAGf,IADAD,EAAIrG,YAAYoG,GACZnQ,EAAOgO,UAAUjP,OAAS,EAAG,CAC7B,GAAIuR,GAAQtQ,EAAOsJ,cAAc,QAC7BC,UAAW,aACXU,UAAYjK,EAAOgO,iBAAkBzG,SAAS,KAElD6I,GAAIrG,YAAYuG,GAEpBtQ,EAAOuQ,mBAAqBH,EAC5BpQ,EAAOrB,QAAQoL,YAAY/J,EAAOuQ,oBAUtC,QAAgBC,IAAgBxQ,EAAQ6C,GACpC,GAAI4N,GAAW5N,CACf4N,GAASC,QAAS,EACY,MAA1B1Q,EAAO2Q,kBACPC,OAAOC,aAAa7Q,EAAO2Q,iBAC3B3Q,EAAO2Q,gBAAkB,MAE7BG,GAAiB9Q,GACjBA,EAAOrB,QAAQiB,UAAUyC,OAAO,YAAa,aAC7C/B,EAAWN,GACXA,EAAO+Q,UAAUC,SAAWvR,SAAO,IAAMO,EAAOrB,QAAQZ,GAAKkT,GAAgBjR,EAAOrB,QACpF,IAAIwR,GAAa1Q,SAAO,IAAM4Q,GAAWrQ,EAAOrB,QAC5CwR,IACAe,SAAOf,GAEX7L,EAAgBtE,EAAQ6C,EAAKsO,QAC7BnR,EAAOU,OAAO0Q,GAAiBvO,GAC/BvC,EAAWN,EAAQ,SACnByQ,EAAStJ,YAAcnH,EAAOmO,SAC9BnO,EAAOwH,QAAQ,eAAgBiJ,EAAU,SAAUA,IAC1CA,EAASC,SAAWxS,oBAAM8B,EAAO4E,eAAyC,KAAxB5E,EAAO4E,cAAuB5E,EAAOqR,UAAY,GACpGnD,EAAYlO,GAEhBA,EAAOqR,UAAY,IAY3B,QAAgBC,IAAiBtR,EAAQ6C,EAAM0O,GAC3C,GAAId,GAAW5N,CAiBf,IAhBA4N,EAASC,QAAS,EAClBD,EAAStJ,YAAcnH,EAAOmO,SAC9BnO,EAAOqR,UAAY,EACnBrR,EAAO+O,oBACF/O,EAAOwR,kBAA8C,mBAAxBxR,EAAOkB,cACpCqB,UAAQM,EAAKlE,QAAS,MAAMX,aAAa,cAAgBgC,EAAOzB,OAAO,MACxEkS,EAASC,QAAS,GAEO,mBAAxB1Q,EAAOkB,eAC0E,IAAjFlB,EAAOzB,OAAOyH,QAAQzD,UAAQM,EAAKlE,QAAS,MAAMX,aAAa,aAChEgC,EAAOoP,YAAa,EAGpBpP,EAAOoP,YAAa,EAExB9O,EAAWN,GACPyQ,EAASC,OACTa,EAAQE,WAAW5O,EAAK6O,OACxBC,GAAW3R,OAEV,KAAKyQ,EAASC,OAAQ,CAEvB,IADA,GAAI5R,GAAI,EACDA,EAAIkB,EAAOe,eAAehC,QAC7BuC,EAAQtB,EAAOe,eAAejC,IAC9BA,GAEJkB,GAAOwH,QAAQ,gBAAiBiJ,EAAU,SAAUA,GAC5CA,EAASC,QACTa,EAAQE,WAAW5O,EAAK6O,OACxBC,GAAW3R,IAGXA,EAAO+Q,UAAUC,SAAW,QAY5C,QAAgBW,IAAW3R,GACvBM,EAAWN,EACX,IAAImQ,GAAa1Q,SAAO,IAAM4Q,GAAWrQ,EAAOrB,QAC5CwR,IACAe,SAAOf,GAUf,QAAgBW,IAAiB9Q,GAC7B4R,GAAgB5R,EAAQ6R,IACxBD,GAAgB5R,EAAQ8R,IAU5B,QAAgBF,IAAgB5R,EAAQ2B,GAEpC,IAAK,GADDyO,GAAMpQ,EAAOrB,QAAQwD,iBAAiB,IAAMR,GACvC7C,EAAI,EAAGA,EAAIsR,EAAIrR,OAAQD,IAC5BsR,EAAItR,GAAGc,UAAUyC,OAAOV,GAWhC,QAAgBoQ,IAAgB/R,EAAQ6C,GACpC,GAAI4N,GAAW5N,CACf4N,GAAStJ,YAAcnH,EAAOmO,QAC9B,IAAI6D,IAAU,CACd1N,GAAgBtE,EAAQ6C,EAAKsO,QAC7BL,GAAiB9Q,GACa,MAA1BA,EAAO2Q,kBACPC,OAAOC,aAAa7Q,EAAO2Q,iBAC3B3Q,EAAO2Q,gBAAkB,MAE7BrQ,EAAWN,EAAQ,QACnB,IAAItC,GAAO,IACiB,oBAAxBsC,EAAO4E,eACPlH,EAAO6E,UAAQM,EAAKsO,OAAQ,OACvBvR,UAAUoC,IAAII,GAAWyP,IAC9BG,GAAU,EAEVhS,EAAO2Q,gBAAkBC,OAAOqB,WAAW,WAAcjS,EAAOU,OAAOwR,GAAiBrP,IAAU,MAErE,gBAAxB7C,EAAO4E,eACZlH,EAAO6E,UAAQM,EAAKsO,OAAQ,QAChBzT,EAAKyL,cAAc,IAAM1D,MAAgB/H,EAAKkC,UAAUC,SAASoC,IACzEvE,EAAKkC,UAAUoC,IAAI6P,KAEdnU,GAASA,EAAKyL,cAAc,IAAM1D,KAAgB/H,EAAKkC,UAAUC,SAASoC,KAC/EvE,EAAKkC,UAAUoC,IAAI8P,IAEvBE,GAAU,GAEmB,mBAAxBhS,EAAO4E,eACZlH,EAAO6E,UAAQM,EAAKsO,OAAQ,QAChBzT,EAAKyL,cAAc,IAAM1D,MAAgB/H,EAAKkC,UAAUC,SAASoC,KACzEvE,EAAKkC,UAAUoC,IAAII,GAAWyP,IAElCG,GAAU,GAGmB,kBAAxBhS,EAAO4E,eACZoN,GAAU,GAEdhS,EAAOrB,QAAQiB,UAAUyC,OAAO,YAAa,aAC7CrC,EAAOrB,QAAQiB,UAAUoC,IAAIgQ,EAAU,YAAc,aACrDhS,EAAOqR,UAAYrR,EAAOqR,UAAY,EACtCrR,EAAOwH,QAAQ,eAAgBiJ,GAWnC,QAAgB0B,IAAexU,GAG3B,IAAK,GAFDyU,GAAM,GACNC,EAAOC,OAAOD,KAAK1U,GACdmB,EAAI,EAAGA,EAAIuT,EAAKtT,OAAQD,IACb,YAAZuT,EAAKvT,KACLsT,IAAc,IAANtT,EAAU,GAAK,MAAQuT,EAAKvT,GAAK,KAAOhB,WAASuU,EAAKvT,GAAInB,GAG1E,OAAOyU,GAWX,QAAgBpC,IAAYhQ,EAAQrC,GAChC,MAAIqC,GAAO1B,MACAR,WAAS,KAAMH,GAEnBgK,EAAQ3H,EAAQrC,GAW3B,QAAgB4U,IAAmBvS,EAAQrC,GACvCqC,EAAOgD,UAAYrF,GACnBqC,EAAOwS,gBAAkB1U,WAAS,OAAQH,GAC1CqC,EAAOyS,OAAS3U,WAAS,SAAUH,GACnCqC,EAAO0S,WAAa5U,WAAS,aAAcH,GAS/C,QAAgBgV,IAAS3S,GAChB4S,GAAc5S,EAAOgD,SAAS,IAI/BwK,GAAaxN,EAAQ,UAHrBgF,GAAmBhF,EAAQA,EAAOgD,SAAS,GAAI6P,IAcvD,QAAgBC,IAAW9S,GAGvB,IAAK,GADD8H,GAAQ9H,EAAOgD,SACVlE,EAAI,EAAGA,EAAIgJ,EAAM/I,OAAQD,IAC9B,IAAKiU,GAAkBjL,EAAMhJ,IAEzB,WADAkG,IAAmBhF,EAAQ8H,EAAMhJ,GAAIkU,GAIzChT,GAAO8B,cAAc/C,OAAS,GAC9BkU,GAASjT,EAAQA,EAAO5B,KAAM4B,EAAO8B,eAa7C,QAAgBoR,IAAclT,EAAQrC,EAAMwV,GACxC,IAAK,GAAIrU,GAAI,EAAGA,EAAInB,EAAKoB,OAAQD,IAC7B,IAAK8T,GAAcjV,EAAKmB,IAEpB,WADAkG,IAAmBhF,EAAQrC,EAAKmB,GAAI+T,GAI5C7S,GAAOgD,SAAWrF,EAClByV,GAAOpT,EAAQmT,EAAQnT,EAAO5B,KAAM,UAaxC,QAAgBiV,IAAgBrT,EAAQrC,EAAMwV,GAC1C,IAAK,GAAIrU,GAAI,EAAGA,EAAInB,EAAKoB,OAAQD,IAC7B,IAAKiU,GAAkBpV,EAAKmB,IAExB,WADAkG,IAAmBhF,EAAQrC,EAAKmB,GAAIkU,GAI5ChT,GAAOgD,SAAWrF,EACdwV,EAAOpU,OAAS,GAChBkU,GAASjT,EAAQA,EAAO5B,KAAM+U,GAatC,QAAgBnO,IAAmBhF,EAAQrC,EAAMkD,GAC7C,GAAI6M,GAAU5P,WAAS,UAAWA,WAAS,aAAcH,GACzC,MAAZ+P,IACAA,EAAUxD,EAAclK,EAAQ,kBAAkBiH,QAAQ,MAAOnJ,WAAS,OAAQH,IAAOsJ,QAAQ,MAAOpG,IAS5G2M,GAAaxN,EAAQ,SANjBgK,OACIyD,KAAM,MACNE,WAAY,KACZD,QAASA,KAarB,QAAgB4F,IAAe3V,GAC3B,MAAQmH,IAAcnH,GAAoC,cAA5B,0BAUlC,QAAgBmH,IAAcnH,GAE1B,GAAI4V,GAAazV,WAAS,aAAcH,EACxC,SAAQ4V,IAAezV,WAAS,OAAQyV,IAU5C,QAAgBX,IAAcjV,GAE1B,GAAI4V,GAAazV,WAAS,aAAcH,EACxC,QAAO4V,GAAezV,WAAS,OAAQyV,IAAezV,WAAS,QAASyV,GAU5E,QAAgBC,IAAiB7V,GAE7B,GAAI4V,GAAazV,WAAS,aAAcH,EACxC,QAAO4V,GAAezV,WAAS,OAAQyV,IAAezV,WAAS,gBAAiByV,GAUpF,QAAgBE,IAAgB9V,GAE5B,GAAI4V,GAAazV,WAAS,aAAcH,EACxC,QAAO4V,GAAezV,WAAS,OAAQyV,IAAezV,WAAS,SAAUyV,GAU7E,QAAgBR,IAAkBpV,GAE9B,GAAI4V,GAAazV,WAAS,aAAcH,EACxC,QAAO4V,GAAezV,WAAS,OAAQyV,IAAezV,WAAS,WAAYyV,GAS/E,QAAgBG,IAAgB1T,GAE5B,GAAI2T,GAAU3T,EAAOgD,SAAS,EACzBwQ,IAAiBG,GAIlBnG,GAAaxN,EAAQ,aAHrBgF,GAAmBhF,EAAQ2T,EAASC,IAa5C,QAAgBC,IAAW7T,GAEvB,GAAI2T,GAAU3T,EAAOgD,SAAS,EAC9B,IAAKyQ,GAAgBE,GAGhB,CACD,GAAIG,GAAQ,IAAM9T,EAAOrB,QAAQZ,GAAKgW,EACtBpE,UAASxG,cAAc2K,GAC7BE,YALVhP,IAAmBhF,EAAQ2T,EAASM,ICt+C5C,QAAgB/P,IAAKlE,EAAQ0R,EAAOtT,GAGhC,IAAK,GADD4E,GAAWhD,EAAOgD,SACblE,EAAI,EAAGA,EAAIkE,EAASjE,OAAQD,IAC7BZ,oBAAMJ,WAAS,WAAYkF,EAASlE,MACpC+L,WAAS,YAAY,EAAO7H,EAASlE,GAK7CoV,IAAWlU,GADEa,OAAQ,OAAQzC,KAAMA,EAAMiF,gBAAiBrD,EAAOqD,gBAAiB1F,KAAMqF,GAC/DmR,GAAazC,GAU1C,QAAgB0C,IAAapU,EAAQqU,GAGjCH,GAAWlU,GADEa,OAAQ,SAAUzC,KAAM4B,EAAO5B,KAAMwJ,KAAMyM,EAAU1W,KAAMqC,EAAOgD,UACtDsR,GAAeD,GAU5C,QAAgB5Q,IAAOzD,EAAQ0R,GAE3B,GAAI/T,IAASkD,OAAQ,SAAUzC,KAAM4B,EAAO5B,KAAMiF,gBAAiBrD,EAAOqD,gBAAiB1F,MAAOsF,EAAcjD,KAI5GuU,EAAgBvU,EAAOwU,WAAaC,aAFpCD,GAEuD7W,EAAMqC,EAAOwU,YAAc7W,CACtFuW,IAAWlU,EAAQuU,EAAeG,GAAehD,EAAO5T,WAAS,SAAUyW,IAW/E,QAAgBI,IAAO3U,EAAQ5B,EAAMwW,GACjC,GAAIhN,GACAiN,CACJ,IAA2D,KAAvD7U,EAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAAiB3B,EAAO4B,WAIpE,CACD,GAAImF,GAAQ/G,EAAO0S,UACf1S,GAAO1B,OACPsJ,EAAO5H,EAAOwS,gBACdqC,EAAUD,IAIVhN,GADAb,EAAQA,EAAME,QAAQ,MAAO,MAChBA,QAAQ7I,EAAM,IAAM4B,EAAOwS,gBACxCqC,EAAU9N,EAAME,QAAQ7I,EAAM,IAAMwW,OAZxChN,GAAO5H,EAAOwS,gBACdqC,EAAUD,CAkBdV,IAAWlU,GAFPa,OAAQ,SAAUzC,KAAMA,EAAMwJ,KAAMA,EAAMiN,QAASA,EAASlX,KAAMqC,EAAOgD,UAEpD8R,GAAe1W,GAe5C,QAAgBmP,IAAMvN,EAAQ5B,EAAMc,EAAOiC,EAAY4T,EAEvDC,EAAaxU,GAET,GAAI7C,IACAkD,OAAQkU,EAAgB3W,KAAMA,EAAM6W,WAAYjV,EAAOgD,SAAS,GAChE7B,WAAYA,EAAYjC,MAAOA,EAAOgW,YAAaF,EAAarX,KAAM6C,EAE1ER,GAAOmV,gBAAkBhU,EACzB+S,GAAWlU,EAAQrC,EAAMyX,GAAchX,EAAM2W,EAAgB5T,GAYjE,QAAgBiS,IAAOpT,EAAQ8H,EAAO1J,EAAMqQ,GAGxCyF,GAAWlU,GADEa,OAAQ4N,EAAWrQ,KAAMA,EAAMc,MAAO4I,EAAOnK,KAAMqC,EAAOgD,UAC9CqS,GAAejX,GAa5C,QAAgBkX,IAAWtV,EAAQd,EAAOd,EAAMqQ,GAG5CyF,GAAWlU,GADEa,OAAQ4N,EAAWrQ,KAAMA,EAAMc,MAAOA,EAAOvB,KAAMqC,EAAOgD,UAC9CuS,GAAgBnX,EAAMqQ,GAcnD,QAAS+G,IAAcxV,GAGnB,IAAK,GADDgL,GADAsB,EAAUtM,EAAOqM,oBAAoBC,QAEhCxN,EAAI,EAAGA,EAAIwN,EAAQvN,OAAQD,IAChC,GAAyB,iBAArBwN,EAAQxN,GAAGsN,MAA0B,CAChClO,oBAAMoO,EAAQxN,GAAGsM,UAClBJ,EAAasB,EAAQxN,GAAGsM,OAAO7D,WAEnC,OAGR,MAAOyD,GAEX,QAASkJ,IAETlU,EAAQrC,EAAM8X,EAAI/D,EAAOjD,EAAWtN,GAEhC,GAAIuF,IACAC,IAAK3G,EAAO0G,aAAaC,IACzB+O,KAAM,OACNC,MAAM,EACNC,SAAU,OACVC,YAAa,mBACblY,KAAMmY,KAAKC,UAAUpY,GACrBqY,UAAW,KACXC,UAAW,KACXC,WAAY,MAEZhP,GAAcrG,OAAQ/C,WAAS,SAAUH,GAAO+I,aAAcA,EAAcgK,QAAQ,EACxF1Q,GAAOwH,QAAQ,aAAcN,EAAW,SAAUiP,GACzCA,EAAezF,SAChB1Q,EAAOU,OAAO0V,OACH,GAAIC,SACX1P,IAAK7I,WAAS,MAAOqY,EAAezP,cACpCgP,KAAM5X,WAAS,OAAQqY,EAAezP,cACtCiP,KAAM7X,WAAS,OAAQqY,EAAezP,cACtCkP,SAAU9X,WAAS,WAAYqY,EAAezP,cAC9CmP,YAAa/X,WAAS,cAAeqY,EAAezP,cACpD/I,KAAMG,WAAS,OAAQqY,EAAezP,cACtCwP,WAAYpY,WAAS,aAAcqY,EAAezP,cAClDsP,UAAW,SAAUvL,GACjB,GAAIvM,oBAAMuM,GAAS,CACf,GAAI6L,IACAtM,OACI2D,WAAY,KACZD,QAASxD,EAAclK,EAAQ,gBAAkB,IAAMA,EAAO0G,aAAaC,IAC3E8G,KAAM,OAEV9J,MAAO,KAGX,YADA4S,IAAmBvW,EAAQmW,EAAgBV,EAAIa,EAAU5E,EAAOjD,EAAWtN,GAGvD,qBACpBsJ,EAASqL,KAAKU,MAAM/L,IAExBzK,EAAOU,OAAO+V,IAAuB5V,OAAQ,WAC7C,IAAI9C,GAAKiC,EAAOuP,WAAavP,EAAOuP,WAAavP,EAAOzB,OAAOyB,EAAOzB,OAAOQ,OAAS,EACtF,KAAKb,oBAAMuM,EAAO8D,MAAsC,SAA7BzQ,WAAS,SAAUH,KAC1C8M,EAAO8D,IAAI3G,KAAiC,IAAzB5H,EAAOzB,OAAOQ,OAAiBiB,EAAO0W,eAAiBjM,EAAO8D,IAAI3G,KAAQ6C,EAAO8D,IAAI3G,KACxGiD,WAAS,SAAU9M,EAAI0M,EAAO8D,KAC9B1D,WAAS9M,EAAI0M,EAAO8D,IAAKvO,EAAOG,WAC3BjC,oBAAMuM,EAAO9G,QAAgC,QAAtB8G,EAAOT,MAAMyD,MAAgB,CACrD,IAAe,iBAAViE,GAAsC,gBAAVA,IAAwD,IAA5B1R,EAAOvB,UAAUM,OAAc,CAExF,GAAI4N,GAAO7O,WAASkC,EAAOzB,OAAO,GAAIyB,EAAOG,SAC7CH,GAAOvB,UAAU,GAAKX,WAAS,OAAQ6O,GACvC3M,EAAO1B,OAASJ,oBAAMJ,WAAS,KAAM6O,IAE3B,iBAAV+E,GACA3R,EAAaC,GAIzB,GAAI2W,GAAO,GAAIC,wBAAqB5W,EAAOqL,OAC3C,KAAKnN,oBAAMuM,EAAO9G,OAAQ,CACtBmH,EAAcL,EAAO9G,MAAOgT,EAAMnB,GAAcxV,GAChD,KAAK,GAAIlB,GAAI,EAAG8L,EAAMH,EAAO9G,MAAM5E,OAAQD,EAAI8L,EAAK9L,IAAK,CAErD,GAAIyH,GAAOkE,EAAO9G,MAAM7E,EACxB+L,YAAS,gBAAiBtF,EAASgB,GAAOA,GAEb,SAA7BzI,WAAS,SAAUH,KACnB6M,EAAUC,EAAQ1M,GAClB8M,WAAS9M,EAAI0M,EAAO9G,MAAO3D,EAAOyI,UAG1C,IAAKvK,oBAAMuM,EAAOkJ,WAAazV,oBAAM8B,EAAO0W,eAAgB,CACxD,GAAIG,GAAW7W,EAAO0W,eAAiB5Y,WAAS,OAAQ2M,EAAOkJ,SAC3DmD,EAAahZ,WAAS,WAAY2M,EAAOkJ,SAAS1M,QAAQ,GAAI8P,QAAO,IAAK,KAAM,OACpD,MAA3BjZ,WAAS,OAAQH,IAAmBqC,EAAO1B,OAAyD,IAAhDR,WAAS,OAAQH,GAAMqZ,MAAM,SAAQjY,SACnD,IAAnCjB,WAAS,QAASH,GAAMoB,QACxB8L,WAAS,OAAQgM,EAAUpM,EAAOkJ,SAClCmD,EAAaD,GAOjBC,EAAaA,EAAW7P,QAAQ6P,EAAW5K,UAAU,EAAG4K,EAAW9Q,QAAQ,OAAQ6Q,GAEvFhM,WAAS,WAAYiM,EAAYrM,EAAOkJ,SAE5C8B,EAAGzV,EAAQyK,EAAQiH,EAAOjD,EAAWtN,GAChCjD,oBAAMuM,EAAO9G,QAAqB,iBAAV+N,GAAsC,iBAAVA,GAAsC,aAAVA,GACjF1R,EAAOU,OAAOuW,GAAyBxM,GAEuB,kBAAvD3M,YAAS,YAAaqY,EAAezP,eAC5C5I,WAAS,YAAaqY,EAAezP,iBAG7CuP,UAAW,WACP,GAAIxL,IACA9G,MAAO,KACPqG,OACIyD,KAAM,MACNC,QAASxD,EAAclK,EAAQ,iBAAmB,IAAMA,EAAO0G,aAAaC,IAC5EgH,WAAY,MAGpB4I,IAAmBvW,EAAQmW,EAAgBV,EAAIhL,EAAQiH,EAAOjD,EAAWtN,MAG5E+V,UAiBjB,QAASX,IAETvW,EAAQmW,EAAgBV,EAAIhL,EAAQiH,EAAOjD,EAAWtN,GAClDnB,EAAOU,OAAO+V,IAAuB5V,OAAQ,YAC7C4U,EAAGzV,EAAQyK,EAAQiH,EAAOjD,EAAWtN,GAC6B,kBAAvDrD,YAAS,YAAaqY,EAAezP,eAC5C5I,WAAS,YAAaqY,EAAezP,gBAY7C,QAASyN,IAAYnU,EAAQyK,EAAQiH,GACjC,GAAKxT,oBAAMuM,EAAO9G,OAOY,QAAtB8G,EAAOT,MAAMyD,OACbhD,EAAO9G,SACP3D,EAAOU,OAAOgR,EAAOjH,GACrBzK,EAAOU,OAAOyW,QAElBlB,GAAUjW,EAAQyK,EAAQ,QAC1BzK,EAAO7B,eAAgBC,KAAM4B,EAAOqO,UAAW,GAC/CrO,EAAOvB,UAAU2Y,UAdK,CACtBpX,EAAOU,OAAOgR,EAAOjH,GACrBzK,EAAOU,OAAOyW,MACVtU,IAAShC,OAAQ,OAAQ4J,OAAQA,EACrCzK,GAAOwH,QAAQ,UAAW3E,GAY9B,GAAI7C,EAAOmN,YAAcnN,EAAOkP,UAAW,CACvC,GAAqC,IAAjClP,EAAO+O,eAAehQ,OAAc,CACpC,GAAI8D,IAASsE,YAAanH,EAAO+O,eACjC/O,GAAOwH,QAAQ,cAAe3E,GAElC7C,EAAOkP,UAAYlP,EAAOmN,YAAa,GAa/C,QAASuH,IAAc1U,EAAQyK,EAAQiH,EAAO7Q,GAC1C,GAAK3C,oBAAMuM,EAAO9G,OAMdsS,GAAUjW,EAAQyK,EAAQ5J,OANJ,CACtBb,EAAOU,OAAOgR,EAAOjH,EACrB,IAAI5H,IAAShC,OAAQA,EAAQ4J,OAAQA,EACrCzK,GAAOwH,QAAQ,UAAW3E,IAgBlC,QAASyR,IAActU,EAAQyK,EAAQ4J,GACnC,GAAKnW,oBAAMuM,EAAO9G,OAYd,GAA0B,QAAtB8G,EAAOT,MAAMyD,KAAgB,CAC7B,GAAIzN,EAAOqX,WAAarX,EAAOqX,UAAUC,QAAS,CAC9C,GAAIlH,GAAM3Q,SAAO,WAAYO,EAAOqX,UAAU1Y,SAC1CqL,EAAQE,EAAclK,EAAQ,+BAA+BiH,QAAQ,MAAO,IAAMmJ,EAAIzO,MAAQ,IAClGyO,GAAImH,cAAcC,mBAAmBvN,UAAYD,MAWjDwD,IAAaxN,EAAQ,SAPjB2D,MAAO,KACPqG,OACIyD,KAAM,MACNC,QAASxD,EAAclK,EAAQ,+BAA+BiH,QAAQ,MAAO,IAAMoN,EAAW,KAC9F1G,WAAY,OAKpB9K,IAAShC,OAAQ,SAAUmJ,MAAOS,EAAOT,MAC7ChK,GAAOwH,QAAQ,UAAW3E,OAGtB7C,GAAOqX,WAAarX,EAAOqX,UAAUC,SACrCtX,EAAOqX,UAAUI,OAErBxB,GAAUjW,EAAQyK,EAAQ,cApCR,CAClBzK,EAAOqX,WAAarX,EAAOqX,UAAUC,SACrCtX,EAAOqX,UAAUI,OAErBzX,EAAO0X,YAAcjN,EAAO9G,MAAM,GAClC3D,EAAOyB,oBAAoBC,UAAUC,MAAQ,EAC7C,IAAIkB,IAAShC,OAAQ,SAAU4J,OAAQA,EACvCzK,GAAOwH,QAAQ,UAAW3E,GAC1B7C,EAAOgD,UAAYC,EAAcjD,IACjCkE,GAAKlE,EAAQ2X,GAAkB3X,EAAO5B,OAyC9C,QAAS0W,IAAc9U,EAAQyK,EAAQrM,GACnC,GAAKF,oBAAMuM,EAAO9G,OAiCd,GAA0B,QAAtB8G,EAAOT,MAAMyD,MAAkBzN,EAAOqX,WAAarX,EAAOqX,UAAUC,QAAS,CAC7E,GAAIlH,GAAM3Q,SAAO,UAAWO,EAAOqX,UAAU1Y,SACzCqL,EAAQE,EAAclK,EAAQ,4BAA4BiH,QAAQ,MAAO,IAAMjH,EAAOwS,gBAAkB,IAC5GxI,GAAQA,EAAM/C,QAAQ,MAAO,IAAMmJ,EAAIzO,MAAQ,KAC/CyO,EAAImH,cAAcC,mBAAmBvN,UAAYD,CAC7CnH,IAAShC,OAAQ,SAAUmJ,MAAOS,EAAOT,MAC7ChK,GAAOwH,QAAQ,UAAW3E,OAGrB3E,qBAAM8B,EAAOqX,YACdrX,EAAOqX,UAAUI,OAErBxB,GAAUjW,EAAQyK,EAAQ,cA7CR,CACjBvM,oBAAM8B,EAAOqX,YACdrX,EAAOqX,UAAUI,MAErB,IAAI5U,IAAShC,OAAQ,SAAU4J,OAAQA,EACvCzK,GAAOwH,QAAQ,UAAW3E,GAC1B7C,EAAO4X,YAAcC,MAAMC,QAAQrN,EAAO9G,OAAS8G,EAAO9G,MAAM,GAAK8G,EAAO9G,MACxE7F,WAAS,aAAckC,EAAO4X,eAAiB9Z,WAAS,aAAckC,EAAOgD,SAAS,KAAOhD,EAAOvB,UAAUM,OAAS,IACvHiB,EAAOvB,UAAUuB,EAAOvB,UAAUM,OAAS,GAAKiB,EAAO+X,YAE/B,mBAAxB/X,EAAOkB,cACPlB,EAAOzB,OAAO6Y,MACdpX,EAAOgD,UAAYlF,WAASkC,EAAOzB,OAAOyB,EAAOzB,OAAOQ,OAAS,GAAIiB,EAAOG,WAC5E+D,GAAKlE,EAAQgY,GAAwBla,WAAS,aAAckC,EAAO4X,aAAa3Q,QAAQ,MAAO,MAC/FjH,EAAOgD,SAAS,GAAKhD,EAAO4X,YAC5B1T,GAAKlE,EAAQiY,GAAoC,MAAhBjY,EAAO5B,KAAe4B,EAAO5B,KAAON,WAAS,aAAckC,EAAO4X,aAAa3Q,QAAQ,MAAO,KAAOjH,EAAO4X,YAAYhQ,KAAO,OAGhK5H,EAAOgD,UAAYC,EAAcjD,IACkB,KAA/CA,EAAOyB,oBAAoBC,UAAUC,MACrC2B,GAAOtD,EAAQkY,GAAkBlY,EAAO5B,KAAM4B,EAAO2C,WAAY3C,EAAOqD,iBAAkBrD,EAAO8C,eAAeK,YAG5GnD,EAAO4B,WACP6B,GAAOzD,EAAQkY,IAGfhU,GAAKlE,EAAQkY,GAAkBlY,EAAO5B,QAiC1D,QAASgX,IAAapV,EAAQyK,EAAQrM,EAAMqQ,GACpChE,EAAOT,OAASS,EAAOT,MAAM2D,YAC7B3N,EAAOmY,WAAa,EACfja,oBAAMuM,EAAO9G,SACd3D,EAAOiP,cAAe,EACtBT,EAAcxO,EAAQyO,EAAWhE,IAErC2N,GAAgBpY,EAAQ,iBAAkByK,EAAOT,MAAM2D,YAC7B,QAAtBlD,EAAOT,MAAMyD,MACbD,GAAaxN,EAAQ,QAASyK,IAG5BA,EAAOT,OAAU9L,oBAAMuM,EAAO9G,OAI/B8G,EAAOT,QAAU9L,oBAAMuM,EAAO9G,QACnC3D,EAAOiP,cAAe,EACtBT,EAAcxO,EAAQyO,EAAWhE,GACjC+C,GAAaxN,EAAQ,QAASyK,IAG9BwL,GAAUjW,EAAQyK,EAAQgE,IAT1BzO,EAAOiP,cAAe,EACtBT,EAAcxO,EAAQyO,EAAWhE,IAoBzC,QAAS4K,IAAcrV,EAAQyK,EAAQrM,GACnC,GAAKF,oBAAMuM,EAAO9G,OAadsS,GAAUjW,EAAQyK,EAAQ,cAT1B,IAHAzK,EAAO7B,eAAgBC,KAAMA,IAAQ,GACrC4B,EAAOgD,UAAYC,EAAcjD,IACjCkE,GAAKlE,EAAQqY,GAAkBrY,EAAO5B,MAClCqM,EAAOT,MACPiM,GAAUjW,EAAQyK,EAAQ,cAEzB,CACD,GAAI5H,IAAShC,OAAQ,SAAU4J,OAAQA,EACvCzK,GAAOwH,QAAQ,UAAW3E,IAiBtC,QAAS0S,IAETvV,EAAQyK,EAAQrM,EAAMqQ,GAClB,GAAKvQ,oBAAMuM,EAAOkJ,SAMdsC,GAAUjW,EAAQyK,EAAQ,eANF,CACxB+C,GAAaxN,EAAQyO,EAAW,KAAMhE,EAAOkJ,QAC7C,IAAI9Q,IAAShC,OAAQ,UAAW4J,OAAQA,EACxCzK,GAAOwH,QAAQ,UAAW3E,IAelC,QAASoT,IAAUjW,EAAQyK,EAAQ5J,GAC/B2M,GAAaxN,EAAQ,QAASyK,EAC9B,IAAI5H,IAAShC,OAAQA,EAAQmJ,MAAOS,EAAOT,MAC3ChK,GAAOwH,QAAQ,UAAW3E,GAc9B,QAAgBS,IAEhBtD,EAAQ0R,EAAOtT,EAAMka,EAAcjV,EAAiBH,GAMhDgR,GAAWlU,GAHPa,OAAQ,SAAUzC,KAAMA,EAAMka,aAAcA,EAAcjV,gBAAiBA,EAAiBH,cAAeA,EAC3GvF,KAAMqC,EAAOgD,UAEQuV,GAAe7G,GAY5C,QAAS6G,IAAcvY,EAAQyK,EAAQiH,GACnC,GAAKxT,oBAAMuM,EAAO9G,OAMdsS,GAAUjW,EAAQyK,EAAQ,cANJ,CACtBzK,EAAOU,OAAOgR,EAAOjH,EACrB,IAAI5H,IAAShC,OAAQ,SAAU4J,OAAQA,EACvCzK,GAAOwH,QAAQ,UAAW3E,IAgBlC,QAAgBoQ,IAASjT,EAAQ5B,EAAM0J,GACnC,GAAI0Q,GAAcxY,EAAO0G,aAAa8R,YAAcxY,EAAO0G,aAAa8R,YAAcxY,EAAO0G,aAAaC,IAGtGO,GAAcvJ,MADLkD,OAAU,WAAYzC,KAAQA,EAAMc,MAAS4I,EAAOnK,KAAQqC,EAAOgD,UAClD0N,QAAQ,EACtC1Q,GAAOwH,QAAQ,iBAAkBN,EAAW,SAAUuR,GAClD,IAAKA,EAAa/H,OAAQ,CACtB,GAAIgI,GAAOpP,gBAAc,QACrBvL,GAAIiC,EAAOrB,QAAQZ,GAAK,gBACxB4a,OAAS9X,OAAQ2X,EAAaI,OAAQ,OAAQhR,KAAM,eAAgBiR,SAAY,MAEhFC,EAAQxP,gBAAc,SACtBvL,GAAIiC,EAAOrB,QAAQZ,GAAK,cACxB4a,OAAS/Q,KAAM,gBAAiBjG,MAAOmU,KAAKC,UAAU0C,EAAa9a,MAAO+X,KAAM,WAEpFgD,GAAK3O,YAAY+O,GACjB9Y,EAAOrB,QAAQoL,YAAY2O,GAC3B/I,SAASoJ,MAAMC,UAAU,gBAAgBC,SACzCjZ,EAAOrB,QAAQua,YAAYR,MC5mBvC,QAAgBlL,IAAaxN,EAAQnC,EAAMsb,EAAGxF,EAASyF,GACnD,GAAIC,GAAUC,GAAWtZ,EAAQnC,EAAMsb,EAAGxF,EAASyF,EAC/Clb,qBAAM8B,EAAOqX,YACbrX,EAAOqX,UAAY,GAAIkC,WACnBC,WAAYC,GAAcC,KAAKC,KAAM3Z,EAAQqZ,EAAQO,YACrDC,YAAa,SAAUhX,GACnBiX,GAAwB9Z,EAAQA,EAAOqX,UAAWxU,EAAMwW,EAAQO,aAEpEG,OAAQV,EAAQU,OAChBC,QAASX,EAAQW,QACjBC,QAASZ,EAAQY,QACjBC,mBAAqBC,OAAQ,QAC7BC,eAAe,EACfC,eAAe,EACf/C,SAAS,EACTgD,eAAe,EACfC,SAAS,EACTpJ,OAAQnR,EAAOwa,YAAcxa,EAAOwa,YAAc,IAAMxa,EAAOrB,QAAQZ,GACvE2N,SAAUF,EAAYxL,EAAQA,EAAO6L,SAAW4O,GAAgBC,IAChEC,MAAO,QACPC,KAAMvB,EAAQuB,KACdC,MAAOxB,EAAQwB,MACfC,UAAW9a,EAAO8a,UAClBC,oBAAqB/a,EAAO+a,oBAC5B1P,OAAQrL,EAAOqL,SAEnBrL,EAAOqX,UAAU2D,kBAAmB,EACpChb,EAAOqX,UAAU4D,SAAS,IAAMjb,EAAOrB,QAAQZ,GAAKmd,KAGpDC,GAAcnb,EAAQqZ,GAY9B,QAAgBjB,IAAgBpY,EAAQnC,EAAMub,EAAclZ,GACxD,GAAIkb,GAAaC,GAAcrb,EAAQnC,EAAMub,EAAclZ,EAC3DF,GAAOsb,aAAc,EACjBpd,oBAAM8B,EAAOub,eACbvb,EAAOub,aAAe,GAAIhC,WACtBC,WAAYgC,GAAc9B,KAAKC,KAAM3Z,EAAQob,EAAWxB,YACxDC,YAAa,SAAUhX,GACnBiX,GAAwB9Z,EAAQA,EAAOub,aAAc1Y,EAAMuY,EAAWxB,aAE1EI,QAASoB,EAAWpB,QACpBD,OAAQqB,EAAWrB,OACnBM,eAAe,EACfC,eAAe,EACfJ,mBAAqBC,OAAQ,QAC7BhJ,OAAQnR,EAAOwa,YAAcxa,EAAOwa,YAAc,IAAMxa,EAAOrB,QAAQZ,GACvE2N,SAAUF,EAAYxL,EAAQA,EAAO6L,SAAW4O,GAAgBC,IAChEI,UAAW9a,EAAO8a,UAClBV,eAAe,EACfG,SAAS,EACTI,MAAO,IACPV,QAASmB,EAAWnB,QACpBW,KAAMQ,EAAWR,KACjBC,MAAOO,EAAWP,MAClBE,oBAAqB/a,EAAO+a,oBAC5B1P,OAAQrL,EAAOqL,SAEnBrL,EAAOub,aAAaP,kBAAmB,EACvChb,EAAOub,aAAaN,SAAS,IAAMjb,EAAOrB,QAAQZ,GAAK0d,MAGvDzb,EAAOub,aAAaxB,OAASqB,EAAWrB,OACxC/Z,EAAOub,aAAaV,MAAQO,EAAWP,MACvC7a,EAAOub,aAAaX,KAAOQ,EAAWR,KACtC5a,EAAOub,aAAaV,MAAQO,EAAWP,MACvC7a,EAAOub,aAAavB,QAAUoB,EAAWpB,QACzCha,EAAOub,aAAatB,QAAUmB,EAAWnB,QACzCja,EAAOub,aAAaT,UAAY9a,EAAO8a,UACvC9a,EAAOub,aAAalQ,OAASrL,EAAOqL,OACpCrL,EAAOub,aAAa/B,WAAagC,GAAc9B,KAAKC,KAAM3Z,EAAQob,EAAWxB,YAC7E5Z,EAAOub,aAAa1B,YAAc,SAAUhX,GACxCiX,GAAwB9Z,EAAQA,EAAOub,aAAc1Y,EAAMuY,EAAWxB,aAE1E5Z,EAAOub,aAAaG,WACpB1b,EAAOub,aAAaI,QAY5B,QAASC,IAAuB5b,EAAQ6b,EAAWhZ,EAAM+W,GACrD,GAAI1S,IACAwJ,OAAQ7N,EAAK6N,OAAQoL,UAAWlC,EAAYmC,YAAaF,EAE7D7b,GAAOwH,QAAQ,kBAAmBN,EAAW,SAAU8U,GACnDnZ,EAAK6N,OAASsL,EAAUtL,SAYhC,QAASoJ,IAAwB9Z,EAAQ6b,EAAWhZ,EAAM+W,GACtD,GAAI1S,IACAwJ,OAAQ7N,EAAK6N,OAAQqL,YAAaF,EAAWC,UAAWlC,EAE5D5Z,GAAOwH,QAAQ,mBAAoBN,EAAW,SAAU8U,GACpDnZ,EAAK6N,OAASsL,EAAUtL,OACnB7N,EAAK6N,SAAU7N,EAAKoZ,cAAiC,WAAfrC,GAA4C,kBAAfA,GACpE5Z,EAAOwH,QAAQ0U,SAY3B,QAASC,IAAiBnc,EAAQ6b,EAAWjC,GACzC,GAAI/W,IAASkZ,YAAaF,EAAWld,QAASkd,EAAUld,QAASmd,UAAWlC,EAC5E5Z,GAAOwH,QAAQ,YAAa3E,GAUhC,QAASuZ,IAAkBpc,EAAQ6b,EAAWjC,GAC1C,GAAI/W,IAASkZ,YAAaF,EAAWld,QAASkd,EAAUld,QAASmd,UAAWlC,EAC5E5Z,GAAOwH,QAAQ,aAAc3E,GAYjC,QAASwY,IAAcrb,EAAQnC,EAAMub,EAAclZ,GAC/C,GAGImc,GACA9V,EACA+V,EALAjD,GACAU,OAAQ,GAAIC,QAAS,GAAIC,WAAaL,WAAY,GAOtD,QAFAP,EAAQuB,KAAO,WAAcuB,GAAiBnc,EAAQA,EAAOub,aAAclC,EAAQO,aACnFP,EAAQwB,MAAQ,WAAcuB,GAAkBpc,EAAQA,EAAOub,aAAclC,EAAQO,aAC7E/b,GACJ,IAAK,YACDwb,EAAQU,OAAS7P,EAAclK,EAAQ,8BACvCqZ,EAAQW,QAAU,QAAU9P,EAAclK,EAAQ,+BAAiC,SACnFqZ,EAAQY,UACAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,eAC/DgU,MAAO,WACHhU,EAAOub,aAAa9D,OACpB9C,GAAO3U,EAAQE,EAASF,EAAO+X,eAInCwE,aAAevC,QAAS9P,EAAclK,EAAQ,cAC9CgU,MAAO,WACHhU,EAAOub,aAAa9D,OACpBzX,EAAOqX,UAAUI,UAG7B4B,EAAQO,WAAa,kBACrB,MACJ,KAAK,iBACDP,EAAQO,WAAa,kBACrB5Z,EAAOoZ,aAAeA,EAGtB7S,GAAkB,KADlB+V,GADA/V,EAAOvG,EAAOoZ,aAAapZ,EAAOmY,aACrBhM,YAAY,MACH5F,EAAOA,EAAK2F,UAAUoQ,GAC5CjD,EAAQU,OAAS7P,EAAclK,EAAQ,oBACvCqc,EAAmB,QAAUnS,EAAclK,EAAQ,qBAAuB,SAC1EqZ,EAAQW,QAAU,EAAmB/S,QAAQ,MAAOV,GACpD8S,EAAQwB,MAAQ,WACZ,IAAK7a,EAAOkP,WAA8C,IAAjClP,EAAO4O,eAAe7P,OAAc,CACzD,GAAI8D,IAASsE,YAAanH,EAAO+O,eACjC/O,GAAOwH,QAAQ,cAAe3E,GAC9B7C,EAAOkP,UAAYlP,EAAOmN,YAAa,EAE3CiP,GAAkBpc,EAAQA,EAAOub,aAAclC,EAAQO,aAE3DP,EAAQY,UAEAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,eAC/DgU,MAAO,WAIH,GAHAhU,EAAO4O,eAAe3P,KAAKe,EAAOoZ,aAAapZ,EAAOmY,aACtDnY,EAAOgP,iBAAiB/P,KAAK4Q,EAAiB7P,EAAQA,EAAOoZ,aAAapZ,EAAOmY,cACjFnY,EAAOmY,aACHiB,EAAapZ,EAAOmY,YAAa,CACjC,GAAIsE,GAASzc,EAAOoZ,aAAapZ,EAAOmY,YACpCuE,EAAWD,EAAOtQ,YAAY,IAClCsQ,IAAuB,IAAdC,EAAkBD,EAASA,EAAOvQ,UAAUwQ,GACrD1c,EAAOub,aAAavB,QAAU,EAAmB/S,QAAQ,MAAOwV,GAChEzc,EAAOub,aAAaI,WAEnB,CACD3b,EAAOub,aAAa9D,MACpB,IAAItW,GAAanB,EAAOmN,WAAanN,EAAO6N,SAAW7N,EAAOmB,WAC1D/C,EAAO4B,EAAOmN,WAAanN,EAAO4N,SAAmC,KAAtB5N,EAAOoN,WAAqBpN,EAAO5B,KAClF4B,EAAOoN,WACPvM,EAASb,EAAOmN,WAAa,OAASnN,EAAOqF,UACjDkI,IAAMvN,EAAQmB,EAAYnB,EAAO4O,eAAgBxQ,EAAMyC,EAAQb,EAAO4O,eAAgB5O,EAAOgP,sBAKrGuN,aAAevC,QAAS9P,EAAclK,EAAQ,cAC9CgU,MAAO,WAEH,GADAhU,EAAOmY,aACHiB,EAAapZ,EAAOmY,YAAa,CACjC,GAAIwE,GAAS3c,EAAOoZ,aAAapZ,EAAOmY,YACpCyE,EAAMD,EAAOxQ,YAAY,IAC7BwQ,IAAkB,IAATC,EAAaD,EAASA,EAAOzQ,UAAU0Q,GAChD5c,EAAOub,aAAavB,QAAU,EAAmB/S,QAAQ,MAAO0V,GAChE3c,EAAOub,aAAaI,WAIpB,IADA3b,EAAOub,aAAa9D,OACiB,IAAjCzX,EAAO4O,eAAe7P,OAAc,CACpC,GAAI8B,GAASb,EAAOmN,WAAa,OAASnN,EAAOqF,WAC7ClE,EAAanB,EAAOmN,WAAanN,EAAO6N,SAAW7N,EAAOmB,WAC1D/C,EAAO4B,EAAOmN,WAAanN,EAAO4N,SAAmC,KAAtB5N,EAAOoN,WAAqBpN,EAAO5B,KAClF4B,EAAOoN,UACXG,IAAMvN,EAAQmB,EAAYnB,EAAO4O,eAAgBxQ,EAAMyC,EAAQb,EAAO4O,eAAgB5O,EAAOgP,qBAMjH,MACJ,KAAK,cACDqK,EAAQO,WAAa,eACrBP,EAAQU,OAAS7P,EAAclK,EAAQ,gBACvCqZ,EAAQW,QAAUha,EAAO6c,WAAW,GAAGjV,KAAO,kCACzCsC,EAAclK,EAAQ,iBAAoB,SAC/CqZ,EAAQuB,KAAOkC,GAAYpD,KAAKC,KAAM3Z,GACtCqZ,EAAQwB,MAAQ,WACZ7a,EAAO+c,eAAgB,EACvBC,GAAchd,GACdoc,GAAkBpc,EAAQA,EAAOub,aAAclC,EAAQO,aAE3DP,EAAQY,UAEAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,qBAC/DgU,MAAO,WACHiJ,GAAejd,GAAQ,MAI3Buc,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,mBAC/DgU,MAAO,WACHiJ,GAAejd,GAAQ,MAI3Buc,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,gBAC/DgU,MAAO,WACH,GAAIlF,GAAQ,CACR9O,GAAOsb,aACPxM,EAAQ9O,EAAO6c,WAAW9d,OAC1BiB,EAAO6c,cACPG,GAAchd,KAGd8O,EAAQ,EACR9O,EAAO6c,WAAWK,OAAO,EAAG,GACK,IAA7Bld,EAAO6c,WAAW9d,OAClBqZ,GAAgBpY,EAAQ,eAGxBgd,GAAchd,IAGtBA,EAAOU,OAAOyc,IAAqBrO,MAAOA,OAM9D,MAAOuK,GASX,QAAS4D,IAAejd,EAAQod,GACxBpd,EAAOsb,aACH8B,EACAC,GAAcrd,GAGdsd,GAAatd,GAEjBgd,GAAchd,KAGdA,EAAOud,UAAUte,MACb4B,OAAQuc,EAAa,WAAa,UAClC5X,KAAMxF,EAAO6c,WAAW,KAE5B7c,EAAO+Q,UAAUyM,MAAMxd,EAAO6c,WAAW,IACzC7c,EAAO6c,WAAWK,OAAO,EAAG,GACK,IAA7Bld,EAAO6c,WAAW9d,OAClBqZ,GAAgBpY,EAAQ,eAGxBgd,GAAchd,IAU1B,QAASgd,IAAchd,GACnB,GAAIyd,IAAO,CACPzd,GAAO+c,cACP/c,EAAO+c,eAAgB,EAGvBU,GAAO,CAEX,IAAIrN,GAAM3Q,SAAO,kBAAmBO,EAAOub,aAAa5c,QACpDyR,IACA/N,SAAO+N,GAEPqN,EACAzd,EAAOub,aAAa9D,OAGpBzX,EAAO6c,cAWf,QAASC,IAAY9c,EAAQ6C,GACzB7C,EAAO+c,eAAgB,CACvB,IAAIW,GAAY5f,WAAS,UAAW+E,GAChC8a,EAAYle,SAAO,iBAAkBie,GACrCE,EAAiB5d,EAAOsJ,cAAc,OACtCC,UAAW,mBAEXsU,EAAW7d,EAAOsJ,cAAc,SAChCvL,GAAIiC,EAAOrB,QAAQZ,GAAK,aAE5B6f,GAAe7T,YAAY8T,GAC3BF,EAAU5T,YAAY6T,GACJ,GAAIE,aAClBC,MAAO7T,EAAclK,EAAQ,kBAC7Bge,OAAQ,SAAUnb,GACd7C,EAAOsb,YAAczY,EAAKob,WAGtBhD,SAAS,IAAMjb,EAAOrB,QAAQZ,GAAK,aAC/Coe,GAAiBnc,EAAQA,EAAOub,aAAc,gBAQlD,QAAS8B,IAAcrd,GACnB,KAAoC,IAA7BA,EAAO6c,WAAW9d,QACrBiB,EAAOud,UAAUte,MAAO4B,OAAQ,WAAY2E,KAAMxF,EAAO6c,WAAW,KACpE7c,EAAO+Q,UAAUyM,MAAMxd,EAAO6c,WAAW,IACzC7c,EAAO6c,WAAWK,OAAO,EAAG,GASpC,QAASI,IAAatd,GAClB,KAAoC,IAA7BA,EAAO6c,WAAW9d,QACrBiB,EAAOud,UAAUte,MAAO4B,OAAQ,UAAW2E,KAAMxF,EAAO6c,WAAW,KACnE7c,EAAO+Q,UAAUyM,MAAMxd,EAAO6c,WAAW,IACzC7c,EAAO6c,WAAWK,OAAO,EAAG,GASpC,QAASgB,IAAWle,GAChB,GAAIoQ,GAAM3Q,SAAO,WAAYO,EAAOqX,UAAU1Y,QAC9CyR,GAAI+N,QACJ/N,EAAIzO,MAAQ,EACZ,IAAIiJ,GAAMwF,EAAIzO,MAAM5C,MACpBqR,GAAIgO,kBAAkB,EAAGxT,GAQ7B,QAASyT,IAAmBre,GACxB,GAAIoQ,GAAM3Q,SAAO,WAAYO,EAAOqX,UAAU1Y,QACzCyR,GAAImH,cAAc3X,UAAUC,SAAS,sBACtCye,GAAYlO,EAAKlG,EAAclK,EAAQ,sBAE3CoQ,EAAImH,cAAcC,mBAAmBvN,UAAY,GACjDmG,EAAImO,QAAU,WACVC,GAAWxe,EAAQoQ,IAEvBA,EAAIqO,QAAU,SAAUtF,GAEP,KADFuF,GAAWvF,IAElBwF,GAAS3e,IAGjBke,GAAWle,GACXmc,GAAiBnc,EAAQA,EAAOqX,UAAW,iBAQ/C,QAASuH,IAAmB5e,GACxB,GAAI6e,GAAWpf,SAAO,UAAWO,EAAOqX,UAAU1Y,QAC7CkgB,GAAStH,cAAc3X,UAAUC,SAAS,sBAC3Cye,GAAYO,EAAU3U,EAAclK,EAAQ,mBAEhD6e,EAAStH,cAAcC,mBAAmBvN,UAAY,GACtD4U,EAASN,QAAU,WACfC,GAAWxe,EAAQ6e,IAEvBA,EAASJ,QAAU,SAAUtF,GAEZ,KADFuF,GAAWvF,IAElB2F,GAAW9e,IAGnB+e,GAAmB/e,EAAQ6e,GAC3B1C,GAAiBnc,EAAQA,EAAOqX,UAAW,UAS/C,QAAS0H,IAAmB/e,EAAQ6e,GAChCA,EAASV,OACT,IAAIa,GAAM,EACV,IAAIhf,EAAOyS,SAAWzS,EAAOif,kBAAmB,CAC5C,GAAI3C,GAAQtc,EAAOwS,gBAAgBrG,YAAY,IAC/C6S,IAAkB,IAAX1C,EAAgBtc,EAAOwS,gBAAkBxS,EAAOwS,gBAAgBtG,UAAU,EAAGoQ,OAGpF0C,GAAMhf,EAAOwS,eAEjBqM,GAASld,MAAQqd,EACbhf,EAAOyS,QAAUzS,EAAOif,oBAAuD,IAAjCJ,EAASld,MAAMqE,QAAQ,KACrE6Y,EAAST,kBAAkB,EAAGS,EAASld,MAAMwK,YAAY,MAGzD0S,EAAST,kBAAkB,EAAGS,EAASld,MAAM5C,QAUrD,QAASuf,IAAYlO,EAAK8O,GACtBC,QAAMb,aACF3f,QAASyR,EACTgP,YACIF,YAAaA,KAgBzB,QAAS5F,IAAWtZ,EAAQnC,EAAMsb,EAAGxF,EAASyF,GAC1C,GAGI7F,GACA8L,EAEAC,EACA/Z,EACAga,EARAlG,GACAU,OAAQ,GAAIC,QAAS,GAAIC,WAAaL,WAAY,GAWtD,QAHAP,EAAQuB,KAAO,WAAcuB,GAAiBnc,EAAQA,EAAOqX,UAAWgC,EAAQO,aAChFP,EAAQwB,MAAQ,WAAcuB,GAAkBpc,EAAQA,EAAOqX,UAAWgC,EAAQO,aAClF/b,EAAQ8V,IAAqC,IAA1BA,EAAQ6L,cAA0B,sBAAwB3hB,GAEzE,IAAK,YACDwb,EAAQO,WAAa,gBACrBP,EAAQU,OAAS7P,EAAclK,EAAQ,oBACvCqZ,EAAQW,QAAU,oFAClBX,EAAQY,UAEAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,kBAC/DgU,MAAO,SAAUmF,GACE,YAAXA,EAAEzD,MAGNiJ,GAAS3e,MAIrBqZ,EAAQuB,KAAOyD,GAAmB3E,KAAKC,KAAM3Z,EAC7C,MACJ,KAAK,SACDqZ,EAAQO,WAAa,SACjB5Z,EAAO8B,cAAc/C,OAAS,GAC9Bsa,EAAQW,SAAW,QAAU9P,EAAclK,EAAQ,2BAA6B,UAC3EiH,QAAQ,MAAOjH,EAAO8B,cAAc/C,OAAOwI,YAChD8R,EAAQU,OAAS7P,EAAclK,EAAQ,4BAGvCqZ,EAAQW,QAAU,QAAU9P,EAAclK,EAAQA,EAAOyS,OAAS,iBAAmB,yBAA2B,SAChH4G,EAAQU,OAAS7P,EAAclK,EAAQA,EAAOyS,OAAS,gBAAkB,yBAE7E4G,EAAQY,UAEAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,eAC/DgU,MAAO,SAAUmF,GACbsG,GAAezf,MAInBuc,aAAevC,QAAS9P,EAAclK,EAAQ,cAC9CgU,MAAO,WACHhU,EAAOqX,UAAUI,SAI7B,MACJ,KAAK,SACD4B,EAAQO,WAAa,SACrBP,EAAQU,OAAS7P,EAAclK,EAAQ,iBACvCqZ,EAAQW,QAAU,gFAClBX,EAAQY,UAEAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,gBAC/DgU,MAAO,SAAUmF,GACE,YAAXA,EAAEzD,MAGNoJ,GAAW9e,MAIvBqZ,EAAQuB,KAAOgE,GAAmBlF,KAAKC,KAAM3Z,EAC7C,MACJ,KAAK,UACDqZ,EAAQO,WAAa,eAErByF,EADO,GAAIzI,wBAAqB5W,EAAOqL,QAChBF,WAAW,GAAI9D,MAAKsM,EAAQ+L,WAAatU,OAAQ,2BACxEmI,EAAa,GACRrV,oBAAMyV,EAAQJ,cACfA,EAAa,WAAarJ,EAAclK,EAAQ,cAAgB,mBAAqB2f,GAAY,MAC3FxN,GAAewB,EAAQJ,YAAc,cAE/C8F,EAAQU,OAASpG,EAAQ/L,KACzByR,EAAQW,QAAU,kBACD9P,EAAclK,EAAQ,QAAU,mBAAqB2f,GAAY,aAC7EhM,EAAQlB,OAAS,OAAS,UAAY,MAAQkB,EAAQlB,OAAS,OAAS,UAAY,qBACxEvI,EAAclK,EAAQ,QAAU,yBAA2B2f,GAAY,aACpFhM,EAAQiM,KAAO,KAAOjM,EAAQiM,KAAO,4BACxB1V,EAAclK,EAAQ,YAAc,mBAAqB2f,GAAY,YAClFhM,EAAQ4L,SAAW,KAAO5L,EAAQ4L,SAAW,qBAChCrV,EAAclK,EAAQ,YAAc,mBAAqB2f,GAAY,MAChFN,EAAkB,aAClB9L,EAAa,WACnB8F,EAAQY,UAEAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,cAC/DgU,MAAO,SAAUmF,GACbnZ,EAAOqX,UAAUI,SAI7B,MACJ,KAAK,sBACD,GAAIoI,EACJxG,GAAQO,WAAa,mBAKJkG,KAJjBR,EAAStf,EAAOgD,SAAS+c,IAAI,SAAUC,GAEnC,MADAH,GAAUG,EAAIpY,KAAK5B,QAAQ,KAAO,EACd,IAAZ6Z,GAAmBG,EAAIvN,OAAoC,IAAZoN,EAAiBG,EAAIpY,KAAKqY,OAAOJ,GAAS5Y,QAAQ,IAAK,IAAM,eAA1E,YAEnC,KACPqY,EAAS3L,EAAQ/L,KAAK3B,MAAM,KAAK8Z,IAAI,SAAUC,GAE3C,MADAH,GAAUG,EAAIha,QAAQ,KAAO,EACT,IAAZ6Z,EAAiB,SAAWG,EAAIC,OAAOJ,GAAS5Y,QAAQ,IAAK,OAG7E1B,EAAW+Z,EAAOY,MAAM,SAAUF,EAAKlhB,EAAGqhB,GAAO,MAAOH,KAAQG,EAAI,KAChD,WAAdb,EAAO,GAAmB,SAAWA,EAAO,GAAGc,oBAAsB,QAAW,iBACtFb,EAAW5L,EAAQ4L,SACnBlG,EAAQU,OAASpG,EAAQ/L,KACzByR,EAAQW,QAAU,kBAAoB9P,EAAclK,EAAQ,QACtD,oBAAsB2f,GAAY,KAAOpa,EAAW,qBACzC2E,EAAclK,EAAQ,QAAU,aAC7C2T,EAAQiM,KAAO,gBAAkBD,GAAY,aAAehM,EAAQiM,KAClE,8BAAqC1V,EAAclK,EAAQ,YAC7D,oBAAsB2f,GAAY,YAAcJ,EAAW,KACzDA,EAAW,qBACjBlG,EAAQY,UAEAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,cAC/DgU,MAAO,SAAUmF,GACE,YAAXA,EAAEzD,MAGN1V,EAAOqX,UAAUI,SAI7B,MACJ,KAAK,QACDzX,EAAOU,OAAOwb,OACd7C,EAAQO,WAAa,QACA,QAAjBT,EAAEnP,MAAMyD,KACR4L,EAAQU,OAAS,oFACb7P,EAAclK,EAAQ,iBAAmB,SAG7CqZ,EAAQU,OAAS7P,EAAclK,EAAQ,SAE3CqZ,EAAQW,QAAU,eAAiBqG,GAAoB,KAAOlH,EAAEnP,MAAM0D,QAAU,SAChF2L,EAAQY,UAEAsC,aAAeC,WAAW,EAAMxC,QAAS9P,EAAclK,EAAQ,cAC/DgU,MAAO,SAAUmF,GACbnZ,EAAOqX,UAAUI,UAMrC,MAAO4B,GAUX,QAASI,IAAczZ,EAAQ4Z,EAAY/W,GAEvCyd,GADiBC,YAAU,SAAUvgB,EAAOqX,UAAU1Y,UAEtDid,GAAuB5b,EAAQA,EAAOqX,UAAWxU,EAAM+W,GAU3D,QAAS4B,IAAcxb,EAAQwgB,EAAS3d,GAEpCyd,GADiBC,YAAU,SAAUvgB,EAAOub,aAAa5c,UAEzDid,GAAuB5b,EAAQA,EAAOub,aAAc1Y,EAAM2d,GAQ9D,QAASF,IAAeG,GAapB,IAAK,GAAIC,GAAW,EAAGA,EAAWD,EAAW1hB,OAAQ2hB,KAZvC,SAAUA,GACpBD,EAAWC,GAAUC,UAAY,SAAUxH,GACrB,KAAdA,EAAEyH,SACFzH,EAAE0H,kBAGVJ,EAAWC,GAAUjC,QAAU,SAAUtF,GACnB,KAAdA,EAAEyH,SACFH,EAAWC,GAAU1M,UAKrB0M,GA+BhB,QAASvF,IAAcnb,EAAQqZ,GAC3BrZ,EAAOqX,UAAU0C,OAASV,EAAQU,OAClC/Z,EAAOqX,UAAU2C,QAAUX,EAAQW,QACnCha,EAAOqX,UAAU4C,QAAUZ,EAAQY,QACnCja,EAAOqX,UAAUyD,UAAY9a,EAAO8a,UACpC9a,EAAOqX,UAAUuD,KAAOvB,EAAQuB,KAChC5a,EAAOqX,UAAUwD,MAAQxB,EAAQwB,MACjC7a,EAAOqX,UAAUmC,WAAaC,GAAcC,KAAKC,KAAM3Z,EAAQqZ,EAAQO,YACvE5Z,EAAOqX,UAAUwC,YAAc,SAAUhX,GACrCiX,GAAwB9Z,EAAQA,EAAOqX,UAAWxU,EAAMwW,EAAQO,aAEpE5Z,EAAOqX,UAAUqE,WACjB1b,EAAOqX,UAAUsE,OAQrB,QAASgD,IAAS3e,GACd,GAAIoQ,GAAM3Q,SAAO,WAAYO,EAAOqX,UAAU1Y,QAC9CmiB,IAAiB9gB,EAAQoQ,GAC8B,KAAnDA,EAAImH,cAAcC,mBAAmBvN,WAGzCmK,GAAapU,EAAQoQ,EAAIzO,OAS7B,QAASmd,IAAW9e,GAChB,GAAIoQ,GAAM3Q,SAAO,UAAWO,EAAOqX,UAAU1Y,QAE7C,IADAmiB,GAAiB9gB,EAAQoQ,GAC8B,KAAnDA,EAAImH,cAAcC,mBAAmBvN,UAAzC,CAGA,GAAIpM,GAAOuS,EAAIzO,MACXof,EAAS/gB,EAAOwS,gBAAgBrG,YAAY,IAMhD,IALInM,EAAOyS,SAAWzS,EAAOif,oBAEzBphB,IADwB,IAAZkjB,EAAiB,GAAK/gB,EAAOwS,gBAAgByN,OAAOc,IAGpE/gB,EAAO+X,WAAala,EAChBmC,EAAOwS,kBAAoB3U,EAE3B,WADAmC,GAAOqX,UAAUI,MAGrB,IAAIvX,GAAmC,mBAAxBF,EAAOkB,aAAqCpD,WAAS,aAAckC,EAAOgD,SAAS,IAAIiE,QAAQ,MAAO,KAAOjH,EAAO5B,IAEnI,IADA4B,EAAOghB,UAAYljB,WAAS,KAAMkC,EAAOgD,SAAS,IAC9ChD,EAAOyS,OAAQ,CACf,GAAIwO,IAA4B,IAAZF,EAAiB,GAAK/gB,EAAOwS,gBAAgByN,OAAOc,GACpEG,EAASrjB,EAAKsO,YAAY,KAC1BgV,GAA4B,IAAZD,EAAiB,GAAKrjB,EAAKoiB,OAAOiB,EAClDlhB,GAAOif,mBAAqBgC,IAAiBE,EAC7C/I,GAAgBpY,EAAQ,YAAa,KAAME,GAG3CyU,GAAO3U,EAAQE,EAASrC,OAI5B8W,IAAO3U,EAAQE,EAASrC,IAShC,QAAS4hB,IAAezf,GACpBA,EAAOqX,UAAUI,OACjBzX,EAAOU,OAAO0gB,OASlB,QAAS5C,IAAWxe,EAAQoQ,GACpB,gBAAeiR,KAAKjR,EAAIzO,OACxB2f,GAAWthB,EAAQoQ,GAEA,KAAdA,EAAIzO,MACTyO,EAAImH,cAAcC,mBAAmBvN,UAAYC,EAAclK,EAAQ,oBAGvEoQ,EAAImH,cAAcC,mBAAmBvN,UAAY,GAUzD,QAAS6W,IAAiB9gB,EAAQoQ,GAC9BoO,GAAWxe,EAAQoQ,EACnB,IAAIxF,GAAMwF,EAAIzO,MAAM5C,OAAS,CACX,MAAdqR,EAAIzO,OAAkByO,EAAIzO,MAAMwK,YAAY,OAASvB,GAASwF,EAAIzO,MAAMwK,YAAY,OAASvB,IAC5F5K,EAAOif,oBAAsD,IAAhC7O,EAAIzO,MAAMwK,YAAY,MAA0E,IAA3DiE,EAAIzO,MAAMuK,UAAUkE,EAAIzO,MAAMqE,QAAQ,KAAO,GAAGjH,QACnHuiB,GAAWthB,EAAQoQ,GAU3B,QAASkR,IAAWthB,EAAQoQ,GACxB,GAAIpG,GAAQE,EAAclK,EAAQ,sBAAsBiH,QAAQ,MAAO,IAAMmJ,EAAIzO,MAAQ,IACrF3B,GAAO+a,oBACP3K,EAAImH,cAAcC,mBAAmB7X,YAAcqK,EAGnDoG,EAAImH,cAAcC,mBAAmBvN,UAAYD,EASzD,QAAS0U,IAAWvF,GAWhB,MATIA,GAAEyH,QACKzH,EAAEyH,QAEJzH,EAAEoI,MACApI,EAAEoI,MAGFpI,EAAEqI,SAYjB,QAAgBC,IAAkBzhB,EAAQ+Z,EAAQ3S,GAC9C,GAAI4S,GAAU1Q,gBAAc,OAASC,UAAW,iBAC5CmY,EAAQpY,gBAAc,OAASC,UAAW,UAAWoP,OAASgJ,IAAKva,EAAUwa,IAAK7H,IACtFC,GAAQjQ,YAAY2X,GAChBxjB,oBAAM8B,EAAO6hB,YACb7hB,EAAO6hB,UAAY,GAAItI,WACnBQ,OAAQA,EACRC,QAASA,EACTE,mBAAqBC,OAAQ,QAC7BC,eAAe,EACfC,eAAe,EACf/C,SAAS,EACTiD,SAAS,EACTI,MAAO,QACPmH,OAAQ,QACR3Q,OAAQnR,EAAOwa,YAAcxa,EAAOwa,YAAc,IAAMxa,EAAOrB,QAAQZ,GACvE2N,SAAUF,EAAYxL,EAAQA,EAAO6L,SAAW4O,GAAgBC,IAChErP,OAAQrL,EAAOqL,OACf0W,cAAc,EACdzH,eAAe,EACfS,oBAAqB/a,EAAO+a,oBAC5BiH,UAAYC,EAAG,SAAUC,EAAG,UAC5BpH,UAAW9a,EAAO8a,UAClBF,KAAMuH,GAAUzI,KAAKC,KAAM3Z,GAC3B6a,MAAO,WAAcuB,GAAkBpc,EAAQA,EAAO6hB,UAAW,kBACjErI,WAAY,SAAU3W,GAClB+Y,GAAuB5b,EAAQA,EAAO6hB,UAAWhf,EAAM,kBAE3DgX,YAAa,SAAUhX,GACnBiX,GAAwB9Z,EAAQA,EAAO6hB,UAAWhf,EAAM,kBAE5Duf,SAAUC,GAAY3I,KAAKC,KAAM3Z,GACjCsiB,WAAYD,GAAY3I,KAAKC,KAAM3Z,KAEvCA,EAAO6hB,UAAU7G,kBAAmB,EACpChb,EAAO6hB,UAAU5G,SAAS,IAAMjb,EAAOrB,QAAQZ,GAAKwkB,MAGpDviB,EAAO6hB,UAAUhd,UACjB7E,EAAO6hB,UAAU9H,OAASA,EAC1B/Z,EAAO6hB,UAAU7H,QAAUA,EAC3Bha,EAAO6hB,UAAU/G,UAAY9a,EAAO8a,UACpC9a,EAAO6hB,UAAUnG,WACjB1b,EAAO6hB,UAAUlG,QASzB,QAASwG,IAAUniB,GACfiS,WAAW,WACHjS,EAAO6hB,WACP7hB,EAAO6hB,UAAUljB,QAAQwf,UAGjCkE,GAAYriB,GACZmc,GAAiBnc,EAAQA,EAAO6hB,UAAW,iBAQ/C,QAASQ,IAAYriB,GACjB,GAAIga,GAAUva,SAAO,iBAAkBO,EAAO6hB,UAAUljB,SACpD6jB,EAAU/iB,SAAO,gBAAiBO,EAAO6hB,UAAUljB,SACnD8jB,EAAS7R,OAAO8R,iBAAiB1I,EAAS,MAC1C2I,EAAeF,EAAU,EAAIG,WAAWH,EAAOI,cAAiB,GAChEC,EAAgBL,EAAU,EAAIG,WAAWH,EAAOM,eAAkB,EACtEP,GAAQpY,MAAMuQ,MAASX,EAAQgJ,YAAcL,EAAgB,KAC7DH,EAAQpY,MAAM0X,OAAU9H,EAAQ/Q,aAAe6Z,EAAiB,KC3/BpE,GAAIG,IAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAM5DK,GAA8B,SAAUC,GAExC,QAASD,KACL,MAAkB,QAAXC,GAAmBA,EAAOC,MAAM9K,KAAMsK,YAActK,KAc/D,MAhBAsJ,IAAUsB,EAAcC,GAIxBX,IACIa,WAAS,OACVH,EAAaZ,UAAW,kBAAe,IAC1CE,IACIa,WAAS,OACVH,EAAaZ,UAAW,kBAAe,IAC1CE,IACIa,WAAS,OACVH,EAAaZ,UAAW,gBAAa,IACxCE,IACIa,WAAS,OACVH,EAAaZ,UAAW,UAAO,IAC3BY,GACTI,iBCzCE1B,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAGrDU,IAAgB,YAAa,SAAU,MAAO,OAAQ,QAAS,SAAU,WAAY,SAC5F,SAAU,UAAW,YAAa,OAAQ,WAI1CC,GAAiC,SAAUL,GAE3C,QAASK,KACL,MAAkB,QAAXL,GAAmBA,EAAOC,MAAM9K,KAAMsK,YAActK,KAQ/D,MAVAsJ,IAAU4B,EAAiBL,GAI3BX,IACIa,WAASE,KACVC,EAAgBlB,UAAW,YAAS,IACvCE,IACIa,YAAS,IACVG,EAAgBlB,UAAW,cAAW,IAClCkB,GACTF,iBCrCE1B,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAM5DY,GAAgC,SAAUN,GAE1C,QAASM,KACL,MAAkB,QAAXN,GAAmBA,EAAOC,MAAM9K,KAAMsK,YAActK,KAc/D,MAhBAsJ,IAAU6B,EAAgBN,GAI1BX,IACIa,YAAS,IACVI,EAAenB,UAAW,0BAAuB,IACpDE,IACIa,WAAS,aACVI,EAAenB,UAAW,iBAAc,IAC3CE,IACIa,YAAS,IACVI,EAAenB,UAAW,iBAAc,IAC3CE,IACIa,WAAS,OACVI,EAAenB,UAAW,kBAAe,IACrCmB,GACTH,iBCzCE1B,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAMrDa,KAEH3Y,MAAO,OAAQ4Y,WAAY,OAAQC,SAAU,IAAKC,cAAc,EAChEC,SAAUC,wBAAsB,SAAUznB,GACtC,MAAO,2BAA+BA,EAAKiK,KAAO,YAEtDyd,kBAAoBC,MAAO,oBAG3BlZ,MAAO,eAAgB4Y,WAAY,eAAgBtP,KAAM,WACzDtK,OAAQ,sBAAuB6Z,SAAU,IAAKtK,MAAO,QAGrDvO,MAAO,OAAQ4Y,WAAY,OAAQC,SAAU,GAAItK,MAAO,MACxDwK,SAAUC,wBAAsB,SAAUznB,GACtC,MAAO,2BAA+BA,EAAKiiB,KAAO,YAClDxU,OAAQ,OAMhBma,GAAqC,SAAUf,GAE/C,QAASe,KACL,MAAkB,QAAXf,GAAmBA,EAAOC,MAAM9K,KAAMsK,YAActK,KAQ/D,MAVAsJ,IAAUsC,EAAqBf,GAI/BX,IACIa,YAAS,IACVa,EAAoB5B,UAAW,qBAAkB,IACpDE,IACIa,WAASK,KACVQ,EAAoB5B,UAAW,cAAW,IACtC4B,GACTZ,iBCzDE1B,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAGrDsB,IAAa,OAAQ,IAAK,MAAO,OAAQ,IAAK,SAAU,WAAY,SAAU,IAAK,WACnFC,IAAe,OAAQ,IAAK,MAAO,OAAQ,QAAS,IAAK,SAAU,SAAU,WAAY,IAAK,WAC9FC,IACP,SAAU,OAAQ,UAAW,IAAK,QAAS,IAAK,YAAa,SAAU,IAAK,UAAW,IAAK,aAK5FC,GAAqC,SAAUnB,GAE/C,QAASmB,KACL,MAAkB,QAAXnB,GAAmBA,EAAOC,MAAM9K,KAAMsK,YAActK,KAc/D,MAhBAsJ,IAAU0C,EAAqBnB,GAI/BX,IACIa,WAASc,KACVG,EAAoBhC,UAAW,WAAQ,IAC1CE,IACIa,WAASe,KACVE,EAAoBhC,UAAW,aAAU,IAC5CE,IACIa,WAASgB,KACVC,EAAoBhC,UAAW,aAAU,IAC5CE,IACIa,YAAS,IACViB,EAAoBhC,UAAW,cAAW,IACtCgC,GACThB,iBC9CE1B,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAM5D0B,GAAwC,SAAUpB,GAElD,QAASoB,KACL,MAAkB,QAAXpB,GAAmBA,EAAOC,MAAM9K,KAAMsK,YAActK,KAc/D,MAhBAsJ,IAAU2C,EAAwBpB,GAIlCX,IACIa,WAAS,UACVkB,EAAuBjC,UAAW,eAAY,IACjDE,IACIa,WAAS,UACVkB,EAAuBjC,UAAW,eAAY,IACjDE,IACIa,YAAS,IACVkB,EAAuBjC,UAAW,cAAW,IAChDE,IACIa,WAAS,SACVkB,EAAuBjC,UAAW,gBAAa,IAC3CiC,GACTjB,iBCzCE1B,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAM5D2B,GAAgC,SAAUrB,GAE1C,QAASqB,KACL,MAAkB,QAAXrB,GAAmBA,EAAOC,MAAM9K,KAAMsK,YAActK,KAoB/D,MAtBAsJ,IAAU4C,EAAgBrB,GAI1BX,IACIa,WAAS,KACVmB,EAAelC,UAAW,wBAAqB,IAClDE,IACIa,YAAS,IACVmB,EAAelC,UAAW,iBAAc,IAC3CE,IACIa,YAAS,IACVmB,EAAelC,UAAW,gBAAa,IAC1CE,IACIa,YAAS,IACVmB,EAAelC,UAAW,sBAAmB,IAChDE,IACIa,WAAS,IACVmB,EAAelC,UAAW,kBAAe,IAC5CE,IACIa,WAAS,MACVmB,EAAelC,UAAW,kBAAe,IACrCkC,GACTlB,iBC/CE1B,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAO5D4B,GAAwB,SAAUtB,GAElC,QAASsB,KACL,MAAkB,QAAXtB,GAAmBA,EAAOC,MAAM9K,KAAMsK,YAActK,KAqD/D,MAvDAsJ,IAAU6C,EAAQtB,GAIlBX,IACIa,WAAS,KACVoB,EAAOnC,UAAW,YAAS,IAC9BE,IACIa,WAAS,KACVoB,EAAOnC,UAAW,iBAAc,IACnCE,IACIa,WAAS,KACVoB,EAAOnC,UAAW,YAAS,IAC9BE,IACIa,WAAS,KACVoB,EAAOnC,UAAW,eAAY,IACjCE,IACIa,WAAS,KACVoB,EAAOnC,UAAW,eAAY,IACjCE,IACIa,WAAS,SACVoB,EAAOnC,UAAW,gBAAa,IAClCE,IACIa,WAAS,OACVoB,EAAOnC,UAAW,sBAAmB,IACxCE,IACIa,WAAS,OACVoB,EAAOnC,UAAW,WAAQ,IAC7BE,IACIa,WAAS,OACVoB,EAAOnC,UAAW,aAAU,IAC/BE,IACIa,WAAS,OACVoB,EAAOnC,UAAW,eAAY,IACjCE,IACIa,WAAS,OACVoB,EAAOnC,UAAW,qBAAkB,IACvCE,IACIa,YAAS,IACVoB,EAAOnC,UAAW,mBAAgB,IACrCE,IACIa,YAAS,IACVoB,EAAOnC,UAAW,oBAAiB,IACtCE,IACIa,WAAS,OACVoB,EAAOnC,UAAW,uBAAoB,IACzCE,IACIa,WAAS,KACVoB,EAAOnC,UAAW,kBAAe,IACpCE,IACIa,WAAS,OACVoB,EAAOnC,UAAW,mBAAgB,IACrCE,IACIa,YAAS,IACVoB,EAAOnC,UAAW,mBAAgB,IAC9BmC,GACTnB,iBC3ESoB,GAAY,UAMZC,GAAU,QAEVC,GAAe,cAEfC,GAAY,UAIZC,GAAgB,cAEhBC,GAAiB,eAcjBC,GAAa,WAEbC,GAAmB,iBAEnBC,GAAY,UASZC,GAAO,gBAEPC,GAAU,YAIVC,GAAa,aAIbC,GAAY,yBAIZC,GAAS,gBAQTC,GAAc,gBAIdC,GAAY,cAEZC,GAAY,cAIZC,GAAiB,oBAEjBC,GAAgB,mBAEhBC,GAAO,SAEPC,GAAS,WAETC,GAAQ,UAERC,GAAQ,UAERC,GAAU,YAEVC,GAAQ,UAIRC,GAAU,qBAEVC,GAAM,QAINC,GAAQ,UAERC,GAAgB,kBAEhBC,GAAsB,wBAEtBC,GAAQ,aAERC,GAAc,mBAEdC,GAAY,iBAEZC,GAAS,cAETC,GAAa,aAEbC,GAAa,aAEbC,GAAa,aAEbC,GAAa,eAEbC,GAAqB,2BAUrBC,GAAc,eAIdC,GAAY,aAIZC,GAAY,cAIZC,GAAY,YAEZC,GAAe,gBAQfC,GAAW,mBAwBXC,GAAY,oBAEZC,GAAa,qBAgBbC,GAAgB,oBAMhBC,GAAM,QAENC,GAAe,iBAcfC,GAAQ,aC3NRxW,GAAS,SAKTyW,GAAe,gBAEfC,GAAa,cAEbC,GAAc,eAEdC,GAAY,aAMZC,GAAW,YAEXC,GAAa,cAEbC,GAAY,aAEZC,GAAa,cAEbC,GAAY,aAIZC,GAAc,eAEdC,GAAU,UAEVC,GAAgB,iBAIhBC,GAAa,cAEbC,GAAe,gBAMfC,GAAgB,gBAEhBC,GAAS,SAETC,GAAW,YAEXC,GAAU,WAEVC,GAAmB,oBAMnBC,GAAgB,kBAEhBC,GAAe,gBAEfC,GAAe,iBAIfC,GAAc,eAEdC,GAAe,iBAEfC,GAAa,cAEbC,GAAkB,oBAElBC,GAAY,aAEZC,GAAY,aAEZC,GAAY,aAIZC,GAAc,gBAEdC,GAAY,aAEZC,GAAW,YAEXC,GAAS,UAQTC,GAAa,cAEbC,GAAa,cAEbC,GAAmB,gBAMnBC,GAAW,YAEXC,GAAU,WAEV3d,GAAW,YAIX4d,GAAW,WAIXC,GAAa,cAEbC,GAAiB,OAEjBC,GAAiB,QAEjBC,GAAyB,gBAIzBC,GAAmB,SAEnBC,GAAqB,WCnH5BC,GAAgC,WAOhC,QAASA,GAAe/rB,GACpB2Z,KAAKqS,eAAgB,EACrBrS,KAAKsS,iBAAkB,EACvBtS,KAAK7K,MAAQ,EACb6K,KAAKuS,YAAa,EAClBvS,KAAKwS,SAAW,EAChBxS,KAAKyS,mBAAoB,EACzBzS,KAAK0S,kBAAmB,EACxB1S,KAAKsC,cAAe,EACpBtC,KAAK3Z,OAASA,EACd2Z,KAAKhb,QAAUc,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKuuB,GAAkB3S,KAAK3Z,OAAOrB,SACnF4tB,YAAU5S,KAAKhb,SAAUgG,IACzBgV,KAAK6S,mBACL7S,KAAK8S,YACDC,IAAK,MACLC,KAAM,OACNC,IAAK,MACLC,SAAU,YACVC,SAAU,YACVC,UAAW,aACXC,OAAQ,UACRC,QAAS,WACTC,SAAU,YACVC,SAAU,iBACVC,SAAU,iBACVC,UAAW,kBACXC,OAAQ,eACRC,SAAU,YACVC,UAAW,aACXC,UAAW,kBACXC,UAAW,kBACXC,WAAY,mBACZC,QAAS,gBACTC,MAAO,iBACPC,OAAQ,kBACRC,OAAQ,uBACRC,OAAQ,uBACRC,QAAS,wBACTC,KAAM,qBACNC,MAAO,QACPC,UAAW,aACXC,WAAY,cACZC,QAAS,mBACTC,MAAO,SACPC,MAAO,QACPC,SAAU,YACVC,IAAK,SACLC,IAAK,SACLC,MAAOjV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrCC,MAAOnV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrCE,MAAOpV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrCG,GAAI,KACJC,SAAU,eACVC,KAAM,YACNC,MAAO,UAggDf,MA7/CApD,GAAepI,UAAUyL,OAAS,SAAUvsB,GAIxC,GAHA8W,KAAK3Z,OAAOqvB,YAAc,KAC1B1V,KAAK2V,UAAY,KACjBC,cAAY5V,KAAK3Z,OAAOrB,SACC,eAArBgb,KAAK3Z,OAAOoE,KAAuB,CACnCuV,KAAK6V,mBACL7V,KAAKhb,QAAQ8wB,aAAa,WAAY,KAClC9V,KAAK+V,UACL/V,KAAKgW,eACLhW,KAAKiW,uBAETjW,KAAK3Z,OAAOU,ODAA,iBCCZ,IAAImvB,GAAYpwB,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKuuB,GAAkB3S,KAAK3Z,OAAOrB,SAChFmxB,EAAKrwB,SAAO,KAAMowB,EA+BtB,IA9BIC,GACAztB,SAAOytB,GAEXnW,KAAK+V,SACDK,gBACIC,SAAU,SAAUC,SAAU,UAAWC,SAAU,GACnDC,cAAe,QAASC,YAAa,IAEzCC,UAAU,EACVC,QAAUzyB,KAAM,OAAQ0yB,QAAS,WAAYnpB,SAAU,eAAgBopB,eAAgB,gBACvFxoB,UAAW2R,KAAK3Z,OAAOgI,UACvByoB,YAAa9W,KAAK+W,cAAchX,KAAKC,MACrCoB,oBAAqBpB,KAAK3Z,OAAO+a,qBAErCpB,KAAK7R,SACL6R,KAAK7R,MAAQ6R,KAAKgX,WAAW9tB,GAC7B8W,KAAK7R,MAAQ6R,KAAK1V,SAAW4D,EAAc8R,KAAK3Z,OAAQ2Z,KAAK7R,OAC7D+nB,EAAUjwB,UAAUyC,OAAOuuB,IACvBjX,KAAK3Z,OAAO6wB,sBAAwBlX,KAAK1V,SAASlF,OAAS,IACtD4a,KAAKhb,QAAQyL,MAAM0X,QACpBnI,KAAKmX,eAETnX,KAAK3Z,OAAO+wB,qBAAqBC,uBAGrCrX,KAAKsX,aAAeC,WAASC,mBAAmB7nB,gBAAeqQ,KAAK7R,MAAO6R,KAAK+V,SAChF/V,KAAKyX,SAAWvZ,MAAM8L,UAAU0N,MAAMC,KAAK/Q,YAAU,IAAMhhB,GAAeoa,KAAKsX,eAC/EtX,KAAKhb,QAAQoL,YAAY4P,KAAKsX,cAC9BtX,KAAK4X,iBACL5X,KAAK6X,gBACwB,IAAzB7X,KAAKyX,SAASryB,OAAc,CAC5B,GAAI0yB,GAAY9X,KAAKhb,QAAQwK,cAAc,iBAC3CwQ,MAAKhb,QAAQua,YAAYuY,GACzB9oB,EAAmBgR,KAAK3Z,OAAQ2Z,KAAKhb,QAASkE,OAEhB,KAAzB8W,KAAKyX,SAASryB,QAAgB4a,KAAKhb,QAAQwK,cAAc,IAAMC,KACpEuQ,KAAKhb,QAAQua,YAAYS,KAAKhb,QAAQwK,cAAc,IAAMC,MAEhC,IAA1BuQ,KAAK0S,mBACL1S,KAAK+X,YAAY/X,KAAK3Z,OAAO6O,YAC7B8K,KAAK0S,kBAAmB,IAGC,IAAzB1S,KAAKsS,kBACLtS,KAAK+X,YAAY/X,KAAK3Z,OAAO6T,YAC7B8F,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,KACjD6X,KAAK7K,QACc6K,KAAK3Z,OAAO6T,WAAW9U,SACtC4a,KAAKsS,iBAAkB,EACvBtS,KAAK3Z,OAAO6T,eAGpB,IAAI8d,GAAYhY,KAAKhb,QAAQwD,iBAAiB,IAAMyvB,GAC3B,KAArBD,EAAU5yB,SACV4a,KAAK3Z,OAAOkB,aAAe,iBAE/B,KAAK,GAAIpC,GAAI,EAAGA,EAAI6yB,EAAU5yB,OAAQD,IAClC6yB,EAAU7yB,GAAG2wB,aAAa,gBAAiB,OAE/C9V,MAAKmX,eACLnX,KAAKhb,QAAQyL,MAAMynB,UAAY,OAC/BlY,KAAKmY,eACLnY,KAAK6S,mBACL7S,KAAKoY,aACDpY,KAAK3Z,OAAO6wB,sBAAwBlX,KAAK1V,SAASlF,OAAS,IAC3D4a,KAAK3Z,OAAO+wB,qBAAqBiB,qBACjCrY,KAAK3Z,OAAO+wB,qBAAqBkB,iBAAgB,IAErDtY,KAAKuS,YAAa,EAClBgG,cAAYvY,KAAK3Z,OAAOrB,SACpBgb,KAAK3Z,OAAO8B,cAAc/C,QAC1B4a,KAAKwY,cAIjBpG,EAAepI,UAAU4N,eAAiB,WAEtC,IADA,GAAIzyB,GAAI,EACDA,EAAI6a,KAAKyX,SAASryB,QACjB4a,KAAKyX,SAAStyB,GAAGqK,cAAc,SAE/BwQ,KAAKyX,SAAStyB,GAAGszB,YAAc,WAAc,OAAO,IAExDtzB,KAGRitB,EAAepI,UAAU6N,cAAgB,WACrC,GAAIa,GAAQ1Y,MACPA,KAAK3Z,OAAO6L,UAAY8N,KAAK+V,UAC1B/V,KAAK3Z,OAAOwR,kBACRmI,KAAKpI,SACLoI,KAAKpI,QAAQqY,UAEjBjQ,KAAKpI,QAAU,GAAI+gB,aAAU3Y,KAAKsX,cAC9BsB,gBAAgB,EAChBC,SAAU,EACVC,kBAAkB,EAClBC,WAAY,IAAMlwB,GAClBmwB,OAAQhZ,KAAKiZ,WAAWlZ,KAAKC,MAC7BkZ,SAAUlZ,KAAK3Z,OAAO8yB,mBACtBC,SAAUpZ,KAAK3Z,OAAOrB,QACtBq0B,SAAUxiB,GAAgBkJ,KAAKC,KAAMA,KAAK3Z,QAC1CizB,KAAMlhB,GAAgB2H,KAAKC,KAAMA,KAAK3Z,QACtCkzB,OAAO,EACPC,UAAW,SAAUtwB,GACjByO,GAAiB+gB,EAAMryB,OAAQ6C,EAAMwvB,EAAM9gB,aAI9CoI,KAAKpI,UAAYoI,KAAK3Z,OAAOwR,kBAClCmI,KAAKpI,QAAQqY,YAIzBmC,EAAepI,UAAUiP,WAAa,SAAU/vB,GAC5C,GAAI6vB,GAAa7vB,EAAKuwB,OAAOjiB,OACzBkiB,EAAS9wB,UAAQmwB,EAAY,eACjC,KAAKW,EACD,MAAO,KAEPA,KAAWA,EAAOzzB,UAAUC,SAAS,aACrC8Z,KAAK2Z,SAASD,EAElB,IAAI1B,GAAYhY,KAAKhb,QAAQwD,iBAAiB,IAAMyvB,GACpDjY,MAAK3Z,OAAOe,kBACZ4Y,KAAK3Z,OAAOmO,WACZ,KAAK,GAAIrP,GAAI,EAAGA,EAAI6yB,EAAU5yB,OAAQD,IAElC6a,KAAK3Z,OAAOmO,SAASlP,KAAK0a,KAAK4Z,cAAc5B,EAAU7yB,KACvD6a,KAAK3Z,OAAOe,eAAe9B,KAAK0yB,EAAU7yB,GAK9C,OAHAuC,GAAUsY,KAAK3Z,OAAQqzB,GACvB1Z,KAAK3Z,OAAO6N,SAAW8L,KAAK3Z,OAAO5B,KACnC2R,GAAyB4J,KAAK3Z,QACvB2Z,KAAK3Z,OAAOuQ,oBAEvBwb,EAAepI,UAAU6P,WAAa,SAAU3wB,GAC5C,GAAI8W,KAAK3Z,OAAO4E,eAAiB+U,KAAK8Z,gBAAiB,CACnD,GAAIC,GAASnxB,UAAQM,EAAKsO,OAAQ,gBAE9BwiB,EAAU71B,WAAS6b,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,GAAI4a,KAAK3Z,OAAOG,SACtF,IAAIuzB,EAAQ,CAER,GAAIE,GAAOja,KAAK4Z,cAAcG,EAC9B/Z,MAAK3Z,OAAO4N,SAAWgmB,EAAKnhB,OAASkH,KAAK3Z,OAAO5B,KAAOqJ,EAAYkS,KAAK3Z,OAAQ4zB,EAAMja,KAAK3Z,OAAO5B,MACnGub,KAAK3Z,OAAOoO,SAAWwlB,EAAKnhB,OAASkhB,EAAUC,MAG/Cja,MAAK3Z,OAAO4N,SAAW+L,KAAK3Z,OAAO5B,KACnCub,KAAK3Z,OAAOoO,SAAWulB,IAUnC5H,EAAepI,UAAU8P,cAAgB,WACrC,MAAO,kBAEX1H,EAAepI,UAAUmN,aAAe,WACpC,GAAI+C,GAAOp0B,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKkT,GAAgB0I,KAAK3Z,OAAOrB,SACzEm1B,EAAMr0B,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKiL,GAAsB2Q,KAAK3Z,OAAOrB,QAClFgb,MAAKhb,QAAQyL,MAAM0X,OAAU+R,EAAK5qB,aAAe6qB,EAAI7qB,aAAgB,MAEzE8iB,EAAepI,UAAU+M,cAAgB,SAAU7tB,GAE/C,GADAA,EAAK0D,KAAKwtB,gBAAgB,eACrBpa,KAAK3Z,OAAOif,mBAAqBnhB,WAAS,SAAU+E,EAAKmxB,SAAU,CACpE,GAAIC,GAAUpxB,EAAK0D,KAAK4C,cAAc,IAAMzJ,IACxCsf,EAAMlhB,WAAS,OAAQ+E,EAAKmxB,SAC5Bte,EAAO5X,WAAS,OAAQ+E,EAAKmxB,QACjCC,GAAQhqB,UAAY+U,EAAIiB,OAAO,EAAGjB,EAAIjgB,OAAS2W,EAAK3W,QAExD4a,KAAKua,eAAerxB,EACpB,IAAIqE,IACAvI,QAASkE,EAAK0D,KACdY,YAAatE,EAAKmxB,QAClBjoB,OAAQ,iBAEZ4N,MAAK3Z,OAAOwH,QAAQ,WAAYN,IAEpC6kB,EAAepI,UAAUuQ,eAAiB,SAAUrxB,GAChD,GAAK8W,KAAK3Z,OAAOm0B,mBAAjB,CAGA,GAAIC,GAAeC,iBAAe/qB,iBAAe,GAC7C2U,SAAS,EACTvS,SAAU,WAEd0oB,GAAa3E,aAAa,OAAQ,YAClC2E,EAAa3E,aAAa,eAAgB,SAC1C5sB,EAAK0D,KAAK+tB,kBAAkBC,aAAaH,EAAcvxB,EAAK0D,KAAK+tB,kBAAkBE,WAAW,MAElGzI,EAAepI,UAAU8Q,eAAiB,SAAU5xB,GAChD,GAAyB,eAArB8W,KAAK3Z,OAAOoE,KAAuB,CAOnC,GANAuV,KAAKiQ,UACDjQ,KAAK3Z,OAAO6wB,sBACZlX,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GAErD6X,KAAKyV,OAAOvsB,GAEmB,kBAA3B/E,WAAS,OAAQ+E,IAAwD,SAA3B8W,KAAK3Z,OAAOqF,YAC1DsU,KAAK3Z,OAAOK,OAASsZ,KAAK3Z,OAAOO,eAAsD,IAArCoZ,KAAK3Z,OAAOO,cAAcxB,OAG5E,IAFA,GAAI21B,GAAU/a,KAAKgb,WAAWhb,KAAK3Z,OAAOO,eACtCq0B,EAAW,EACRA,EAAWF,EAAQ31B,QACtBuC,EAAQqY,KAAKyX,SAASsD,EAAQE,KAC9BA,GAIiB,KADTjb,KAAKhb,QAAQwD,iBAAiB,IAAMyvB,IACtC7yB,QACV4a,KAAKhb,QAAQwf,QAEjBxE,KAAKwY,YACLxY,KAAK3Z,OAAO0C,gBAAiB,MAG7BiX,MAAKhb,QAAQ8wB,aAAa,WAAY,OAG9C1D,EAAepI,UAAUwO,UAAY,WACjC,GAAI0C,GAAWlb,KAAKhb,QAAQwD,iBAAiB,IAAMyvB,GACnD,IAAIiD,EAEA,IADA,GAAIC,GAAc,EACXA,EAAcD,EAAS91B,QAC1B4a,KAAKob,WAAWF,EAASC,IAAc,GACvCA,KAKZ/I,EAAepI,UAAUgN,WAAa,SAAU9tB,GAI5C,IAHA,GAAI/D,GAAI,EAEJgJ,EAAQgO,KAAKU,MAAMV,KAAKC,UAAUlT,EAAKc,QACpC7E,EAAIgJ,EAAM/I,QAAQ,CACrB,GAAIi2B,GAAOzvB,EAASuC,EAAMhJ,IACtBm2B,EAASn3B,WAAS,OAAQgK,EAAMhJ,IAChCo2B,EAAWllB,GAAY2J,KAAK3Z,OAAQ8H,EAAMhJ,IAC1CyK,EAAcoQ,KAAK3Z,OAAO8B,gBACuB,IAAjD6X,KAAK3Z,OAAO8B,cAAckE,QAAQkvB,GAClC1yB,GAAiB,YAAcA,EAInC,IAHKoQ,GAAc9K,EAAMhJ,MACrByK,GAAa,IAAM+J,GAAexL,EAAMhJ,KAExCk2B,IAAS7uB,IAAkBwT,KAAK3Z,OAAOm1B,eAAiBrwB,GAAcgD,EAAMhJ,IAAK,CACjF,GAAI0H,GAASF,EAAYqT,KAAK3Z,OAAQ8H,EAAMhJ,GAC5C+L,YAAS,eAAgBrE,EAAQsB,EAAMhJ,IACvC+L,WAAS,iBAAmB+W,IAAKqT,GAAUntB,EAAMhJ,QAGjD+L,YAAS,WAAYmqB,EAAMltB,EAAMhJ,GAErC+L,YAAS,gBAAkBya,MAAO/b,EAAW6rB,MAAOH,GAAUntB,EAAMhJ,IACpEA,IAEJ,MAAOgJ,IAEXikB,EAAepI,UAAU0R,cAAgB,SAAUxyB,GAC/C8W,KAAKyV,OAAOvsB,IAEhBkpB,EAAepI,UAAU2R,YAAc,SAAUzyB,GACpB,eAArB8W,KAAK3Z,OAAOoE,OAGhBuV,KAAK8a,eAAe5xB,GACpB8W,KAAK4b,cACL5b,KAAK+X,aAAa5zB,WAAS6b,KAAK3Z,OAAO1B,MAAQ,KAAO,OAAQqb,KAAK3Z,OAAO0X,eAC1EiC,KAAK3Z,OAAO0X,YAAc,KAC1BiC,KAAK3Z,OAAOgE,qBAAqBrF,QAAQwf,UAE7C4N,EAAepI,UAAU6R,eAAiB,WACL,mBAA7B7b,KAAK3Z,OAAOkB,cACZyY,KAAK8b,sBAGb1J,EAAepI,UAAU+R,aAAe,WACH,mBAA7B/b,KAAK3Z,OAAOkB,cACZkS,GAAOuG,KAAK3Z,OAAQ2Z,KAAK3Z,OAAO8B,cAAe6X,KAAK3Z,OAAO5B,KAAM,WAIzE2tB,EAAepI,UAAUgS,YAAc,SAAU9yB,GACpB,eAArB8W,KAAK3Z,OAAOoE,OAGhBuV,KAAK8a,eAAe5xB,GACpB8W,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GACjD6X,KAAK4b,gBAETxJ,EAAepI,UAAUiS,aAAe,SAAU/yB,GACrB,eAArB8W,KAAK3Z,OAAOoE,MAGhBuV,KAAK8a,eAAe5xB,IAExBkpB,EAAepI,UAAUkS,aAAe,WACH,mBAA7Blc,KAAK3Z,OAAOkB,cAA0E,IAArCyY,KAAK3Z,OAAO8B,cAAc/C,QAC3E4a,KAAKmc,oBAGb/J,EAAepI,UAAUoS,cAAgB,SAAUlzB,GAC/C8W,KAAK3Z,OAAOK,OAAQ,EAE4C,KAA5DsZ,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,QAClDgY,KAAK3Z,OAAOg2B,kBAES,eAArBrc,KAAK3Z,OAAOoE,OACZ9D,EAAWqZ,KAAK3Z,QAChB2Z,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GACjD6X,KAAK8a,eAAe5xB,GAChB8W,KAAK3Z,OAAO4X,cACZ+B,KAAK4b,cACL5b,KAAKsc,aAAatc,KAAK3Z,OAAO4X,aAC9B+B,KAAK3Z,OAAO4X,YAAc,QAItCmU,EAAepI,UAAUuS,WAAa,SAAUrzB,GACX,mBAA7B8W,KAAK3Z,OAAOkB,cACZyY,KAAKwc,aAAatzB,EAAKsO,SAG/B4a,EAAepI,UAAUyS,aAAe,WACX,eAArBzc,KAAK3Z,OAAOoE,MAAyBuV,KAAKhb,SAC1Cgb,KAAKhb,QAAQiB,UAAUoC,IAAI4uB,KAGnC7E,EAAepI,UAAU0S,gBAAkB,WACvC,GAAyB,eAArB1c,KAAK3Z,OAAOoE,KAAuB,CACnCuV,KAAK2V,UAAY3V,KAAK2c,cACtB,IAAIC,GAAW5c,KAAK6c,cAChBC,GAAYC,SAAS,EAAMC,UAAU,EACzChd,MAAKid,YAAYL,EAAUE,GAC3B9c,KAAKqS,eAAgB,EACrBrS,KAAKsC,cAAe,IAG5B8P,EAAepI,UAAUkT,eAAiB,WACb,eAArBld,KAAK3Z,OAAOoE,OACZuV,KAAKmd,iBACLnd,KAAKqS,eAAgB,EACrBrS,KAAKsC,cAAe,IAG5B8P,EAAepI,UAAUoT,gBAAkB,WACvCpd,KAAKuS,YAAa,GAEtBH,EAAepI,UAAUqT,eAAiB,WACtCrd,KAAKuS,YAAa,GAGtBH,EAAepI,UAAUsT,SAAW,SAAUp0B,GACjB,eAArB8W,KAAK3Z,OAAOoE,OACZuV,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GACjD6X,KAAK3Z,OAAOU,OAAOyW,OACnBwC,KAAK3Z,OAAOg2B,cAAgBnzB,EAAKc,MACjCgW,KAAK8a,eAAe5xB,KAG5BkpB,EAAepI,UAAUuT,gBAAkB,WACd,eAArBvd,KAAK3Z,OAAOoE,MAGhBuV,KAAKmX,gBAET/E,EAAepI,UAAUwT,sBAAwB,WACpB,eAArBxd,KAAK3Z,OAAOoE,MAGhBuV,KAAK8b,sBAET1J,EAAepI,UAAUyT,aAAe,WACX,eAArBzd,KAAK3Z,OAAOoE,MAA0BlG,oBAAMyb,KAAK+V,UACW,KAA5D/V,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAAiBgY,KAAK3Z,OAAO4B,YACrD,eAAvB+X,KAAK3Z,OAAOkI,SACfyR,KAAK3Z,OAAOkI,OAAS,OACrByR,KAAK3Z,OAAOU,OAAOsL,SAG3B+f,EAAepI,UAAUiM,oBAAsB,WACvCjW,KAAK3Z,OAAOq3B,cAGhB1d,KAAK3Z,OAAOs3B,IAAI10B,GAAmB+W,KAAKyd,cACxCzd,KAAK3Z,OAAOs3B,IAAIzqB,GAAoB8M,KAAK0b,eACzC1b,KAAK3Z,OAAOs3B,IAAI3f,GAAkBgC,KAAK2b,aACvC3b,KAAK3Z,OAAOs3B,IDlZM,gBCkZmB3d,KAAK6b,gBAC1C7b,KAAK3Z,OAAOs3B,IAAIlW,GAAmBzH,KAAK+b,cACxC/b,KAAK3Z,OAAOs3B,IAAIjf,GAAkBsB,KAAKgc,aACvChc,KAAK3Z,OAAOs3B,IAAIvyB,GAAmB4U,KAAKic,cACxCjc,KAAK3Z,OAAOs3B,IAAIrf,GAAoB0B,KAAKoc,eACzCpc,KAAK3Z,OAAOs3B,IAAI/zB,GAAqBoW,KAAK8a,gBAC1C9a,KAAK3Z,OAAOs3B,IAAI9zB,GAAemW,KAAKsd,UACpCtd,KAAK3Z,OAAOs3B,IAAIC,GAAiB5d,KAAKuc,YACtCvc,KAAK3Z,OAAOs3B,IAAInyB,GAAgBwU,KAAKoc,eACrCpc,KAAK3Z,OAAOs3B,IAAIE,GAAqB7d,KAAK8d,mBAC1C9d,KAAK3Z,OAAOs3B,IAAII,GAAmB/d,KAAKge,cACxChe,KAAK3Z,OAAOs3B,IAAIpb,GAAsBvC,KAAKie,iBAC3Cje,KAAK3Z,OAAOs3B,IAAIO,GAAmBle,KAAKkc,cACxClc,KAAK3Z,OAAOs3B,IAAIpf,GAAkByB,KAAKoc,eACvCpc,KAAK3Z,OAAOs3B,IDtZI,cCsZmB3d,KAAKyc,cACxCzc,KAAK3Z,OAAOs3B,ID3bO,kBC2bmB3d,KAAK0c,iBAC3C1c,KAAK3Z,OAAOs3B,ID1bM,iBC0bmB3d,KAAKkd,gBAC1Cld,KAAK3Z,OAAOs3B,IAAIQ,GAAqBne,KAAKoe,gBAC1Cpe,KAAK3Z,OAAOs3B,IAAIlhB,GAAsBuD,KAAKod,iBAC3Cpd,KAAK3Z,OAAOs3B,IAAI7gB,GAAqBkD,KAAKqd,gBAC1Crd,KAAK3Z,OAAOs3B,ID5dQ,kBC4dmB3d,KAAKqe,uBAC5Cre,KAAK3Z,OAAOs3B,IAAIW,GAAkBte,KAAKue,eACvCve,KAAK3Z,OAAOs3B,IAAIhqB,GAAkBqM,KAAKwe,aACvCxe,KAAK3Z,OAAOs3B,IAAIjoB,GAAiBsK,KAAKye,YACtCze,KAAK3Z,OAAOs3B,IAAIt2B,GAAoB2Y,KAAK0e,eACzC1e,KAAK3Z,OAAOs3B,IAAIlmB,GAAiBuI,KAAK6Z,YACtC7Z,KAAK3Z,OAAOs3B,IAAIgB,GAAoB3e,KAAK4e,eACzC5e,KAAK3Z,OAAOs3B,IDndO,iBCmdmB3d,KAAKud,iBAC3Cvd,KAAK3Z,OAAOs3B,IAAI1nB,GAAiB+J,KAAK6e,YACtC7e,KAAK3Z,OAAOs3B,ID3Ya,wBC2YmB3d,KAAKwd,uBACjDxd,KAAK3Z,OAAOs3B,IDpfG,aCofmB3d,KAAKoc,iBAE3ChK,EAAepI,UAAU6I,iBAAmB,WACxC7S,KAAK3Z,OAAOy4B,GAAG71B,GAAmB+W,KAAKyd,aAAczd,MACrDA,KAAK3Z,OAAOy4B,GAAG5rB,GAAoB8M,KAAK0b,cAAe1b,MACvDA,KAAK3Z,OAAOy4B,GAAG9gB,GAAkBgC,KAAK2b,YAAa3b,MACnDA,KAAK3Z,OAAOy4B,GAAG1zB,GAAmB4U,KAAKic,aAAcjc,MACrDA,KAAK3Z,OAAOy4B,GDvbM,gBCubkB9e,KAAK6b,eAAgB7b,MACzDA,KAAK3Z,OAAOy4B,GAAGxgB,GAAoB0B,KAAKoc,cAAepc,MACvDA,KAAK3Z,OAAOy4B,GAAGrX,GAAmBzH,KAAK+b,aAAc/b,MACrDA,KAAK3Z,OAAOy4B,GAAGnrB,GAAkBqM,KAAKwe,YAAaxe,MACnDA,KAAK3Z,OAAOy4B,GAAGpgB,GAAkBsB,KAAKgc,YAAahc,MACnDA,KAAK3Z,OAAOy4B,GAAGl1B,GAAqBoW,KAAK8a,eAAgB9a,MACzDA,KAAK3Z,OAAOy4B,GAAGj1B,GAAemW,KAAKsd,SAAUtd,MAC7CA,KAAK3Z,OAAOy4B,GAAGlB,GAAiB5d,KAAKuc,WAAYvc,MACjDA,KAAK3Z,OAAOy4B,GAAGZ,GAAmBle,KAAKkc,aAAclc,MACrDA,KAAK3Z,OAAOy4B,GAAGvgB,GAAkByB,KAAKoc,cAAepc,MACrDA,KAAK3Z,OAAOy4B,GAAGtzB,GAAgBwU,KAAKoc,cAAepc,MACnDA,KAAK3Z,OAAOy4B,GAAGjB,GAAqB7d,KAAK8d,kBAAmB9d,MAC5DA,KAAK3Z,OAAOy4B,GAAGf,GAAmB/d,KAAKge,aAAche,MACrDA,KAAK3Z,OAAOy4B,GAAGvc,GAAsBvC,KAAKie,gBAAiBje,MAC3DA,KAAK3Z,OAAOy4B,GD3bI,cC2bkB9e,KAAKyc,aAAczc,MACrDA,KAAK3Z,OAAOy4B,GDheO,kBCgekB9e,KAAK0c,gBAAiB1c,MAC3DA,KAAK3Z,OAAOy4B,GD/dM,iBC+dkB9e,KAAKkd,eAAgBld,MACzDA,KAAK3Z,OAAOy4B,GAAGX,GAAqBne,KAAKoe,eAAgBpe,MACzDA,KAAK3Z,OAAOy4B,GAAGriB,GAAsBuD,KAAKod,gBAAiBpd,MAC3DA,KAAK3Z,OAAOy4B,GAAGhiB,GAAqBkD,KAAKqd,eAAgBrd,MACzDA,KAAK3Z,OAAOy4B,GAAGrnB,GAAiBuI,KAAK6Z,WAAY7Z,MACjDA,KAAK3Z,OAAOy4B,GAAGH,GAAoB3e,KAAK4e,cAAe5e,MACvDA,KAAK3Z,OAAOy4B,GDngBQ,kBCmgBkB9e,KAAKqe,sBAAuBre,MAClEA,KAAK3Z,OAAOy4B,GAAGR,GAAkBte,KAAKue,cAAeve,MACrDA,KAAK3Z,OAAOy4B,GAAGppB,GAAiBsK,KAAKye,WAAYze,MACjDA,KAAK3Z,OAAOy4B,GAAGz3B,GAAoB2Y,KAAK0e,cAAe1e,MACvDA,KAAK3Z,OAAOy4B,GDvfO,iBCufkB9e,KAAKud,gBAAiBvd,MAC3DA,KAAK3Z,OAAOy4B,GAAG7oB,GAAiB+J,KAAK6e,WAAY7e,MACjDA,KAAK3Z,OAAOy4B,GD/aa,wBC+akB9e,KAAKwd,sBAAuBxd,MACvEA,KAAK3Z,OAAOy4B,GDxhBG,aCwhBkB9e,KAAKoc,cAAepc,OAEzDoS,EAAepI,UAAUiU,gBAAkB,WAAcje,KAAKqS,eAAgB,EAAMrS,KAAKsC,cAAe,GAExG8P,EAAepI,UAAUoU,eAAiB,SAAUl1B,GAChD,GAAI8W,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,gBAAiB,CACnD,GAAIrjB,GAAM7N,UAAQM,EAAKsO,OAAQ,KAC/BwI,MAAK3Z,OAAOgD,UAAY2W,KAAK4Z,cAAcnjB,MAGnD2b,EAAepI,UAAU4U,cAAgB,WACjC5e,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,kBACO,IAArC9Z,KAAK3Z,OAAO8B,cAAc/C,OAC1B4a,KAAK8b,qBAGL9b,KAAK3Z,OAAOgD,UAAYlF,WAAS6b,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,GAAI4a,KAAK3Z,OAAOG,aAI5G4rB,EAAepI,UAAUwU,YAAc,WAC/Bxe,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,kBAClC9Z,KAAK3Z,OAAOgD,SAAuC,KAA3B2W,KAAK3Z,OAAOoN,YAAsBnK,EAAc0W,KAAK3Z,UACxE2Z,KAAK4Z,cAAc9zB,SAAO,YAAaka,KAAKhb,aAGzDotB,EAAepI,UAAU0U,cAAgB,WACrC,GAAI1e,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,gBAAiB,CACnD,GAAI9B,GAAYhY,KAAKhb,QAAQwD,iBAAiB,IAAMyvB,GACpDjY,MAAK3Z,OAAOwB,iBACZmY,KAAK3Z,OAAOe,iBACZ,KAAK,GAAIjC,GAAI,EAAGA,EAAI6yB,EAAU5yB,OAAQD,IAClC6a,KAAK3Z,OAAOe,eAAe9B,KAAK0yB,EAAU7yB,IAC1C6a,KAAK3Z,OAAOwB,cAAcvC,KAAK0a,KAAK4Z,cAAc5B,EAAU7yB,OAIxEitB,EAAepI,UAAUyU,WAAa,SAAUv1B,GACnB,eAArB8W,KAAK3Z,OAAOoE,OACZuV,KAAK0S,kBAAmB,EACpB1S,KAAK3Z,OAAO5B,OAASub,KAAK3Z,OAAOmV,iBAAmBwE,KAAK3Z,OAAO5B,OAASkQ,EAAiBqL,KAAK3Z,OAAQ6C,IACvG8W,KAAKoc,cAAclzB,KAI/BkpB,EAAepI,UAAU6U,WAAa,SAAU31B,GACnB,eAArB8W,KAAK3Z,OAAOoE,OACZuV,KAAK0S,kBAAmB,EACxB1S,KAAKoc,cAAclzB,KAG3BkpB,EAAepI,UAAU8T,kBAAoB,SAAUte,GACnD,GAAIuf,EACJ,IAAIvf,EAAEpN,SAAW4N,KAAK8Z,iBAAgC,WAAbta,EAAEpN,OAG3C,IAAK,GAAI4sB,GAAK,EAAGC,EAAKtmB,OAAOD,KAAK8G,EAAE0f,SAAUF,EAAKC,EAAG75B,OAAQ45B,IAE1D,OADWC,EAAGD,IAEV,IAAK,mBACDhf,KAAK6X,eACL,MACJ,KAAK,SACD7X,KAAKmX,cACL,MACJ,KAAK,gBACDnX,KAAKqS,eAAgB,EACrBrS,KAAKsC,cAAe,EACpByc,EAAkBx6B,oBAAMyb,KAAK3Z,OAAO8B,kBAAsB6X,KAAK3Z,OAAO8B,cAAcuvB,MAAM,GAC1FqH,EAAkB/e,KAAK3Z,OAAO84B,oBAAsBJ,EAChDA,EAAgBrH,MAAMqH,EAAgB35B,OAAS,GACnD4a,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GACjD6X,KAAKkd,iBACD6B,EAAgB35B,QAChB4a,KAAK+X,YAAYgH,GAErB/e,KAAK3Z,OAAO7B,eAAgB2D,cAAe6X,KAAK3Z,OAAO8B,gBAAiB,GACxE6X,KAAKqS,eAAgB,EACrBrS,KAAKsC,cAAe,CACpB,MACJ,KAAK,gBACDpX,EAAQ8U,KAAK3Z,OACb,MACJ,KAAK,oBAGL,IAAK,kBACDkE,GAAKyV,KAAK3Z,OAAQiY,GAAoB0B,KAAK3Z,OAAO5B,KAClD,MACJ,KAAK,sBACD,GAAyB,eAArBub,KAAK3Z,OAAOoE,KACZ,KAEJS,GAAQ8U,KAAK3Z,OACb,MACJ,KAAK,OACDmE,EAAawV,KAAK3Z,OAAQ,gBAK1C+rB,EAAepI,UAAUiG,QAAU,WAC3BjQ,KAAK3Z,OAAOq3B,cAGhB1d,KAAKiW,sBACDjW,KAAK+V,SACL/V,KAAKgW,eAEThW,KAAK2V,UAAY,KACjB3V,KAAKsX,aAAe,OAExBlF,EAAepI,UAAUoO,WAAa,WAClCpY,KAAKof,gBAAe,GACpBpf,KAAKqf,eAAiB,GAAIC,kBAAetf,KAAKhb,SAC1Cu6B,UAAWvf,KAAKwf,iBAAiBzf,KAAKC,MACtC8S,WAAY9S,KAAK8S,WACjB7f,UAAW,UAEf+M,KAAKyf,mBAAqB,GAAIH,kBAAetf,KAAKhb,SAC9Cu6B,UAAWvf,KAAK0f,qBAAqB3f,KAAKC,MAC1C8S,WAAY9S,KAAK8S,WACjB7f,UAAW,YAEf0sB,eAAat3B,IAAI2X,KAAKhb,QAAS,YAAagb,KAAK4f,YAAa5f,OAElEoS,EAAepI,UAAUgM,aAAe,WACpChW,KAAKof,gBAAe,GACpBO,eAAaj3B,OAAOsX,KAAKhb,QAAS,YAAagb,KAAK4f,aACpD5f,KAAKqf,eAAepP,UACpBjQ,KAAKyf,mBAAmBxP,WAG5BmC,EAAepI,UAAU4V,YAAc,SAAUpgB,GAC7C,GAAIqgB,GAAYj3B,UAAQ4W,EAAEhI,OAAQ,eAClC7Q,GAAWqZ,KAAK3Z,OAAQ,SACN,OAAdw5B,GACAA,EAAU55B,UAAUoC,IAAII,KAGhC2pB,EAAepI,UAAUoV,eAAiB,SAAUU,GAChD,GAAIA,EAAQ,CAER,GAAIC,GAAU/f,IACdA,MAAKggB,SAAW,GAAIC,SAAMjgB,KAAKhb,SAC3Bk7B,IAAK,SAAUC,GACXA,EAAIC,cAAclZ,iBACd6Y,EAAQ15B,OAAOg6B,UACfN,EAAQvN,SAAW2N,EAAI3N,SACvBuN,EAAQO,SAAWH,EACnB7nB,WAAW,WACHynB,EAAQvN,SAAW,GACnBuN,EAAQQ,YAAYR,EAAQO,UAEhCP,EAAQvN,SAAW,GACpB,MAGkB,IAAjB2N,EAAI3N,UAA8C,IAA5B2N,EAAIC,cAAcxY,MACxCmY,EAAQS,gBAAgBL,GAGxBJ,EAAQU,aAAaN,IAIjCO,QAAS,SAAUlhB,GACXugB,EAAQ15B,OAAOg6B,WACfN,EAAQY,cAAcZ,EAAQ15B,OAAO84B,oBACjCY,EAAQ15B,OAAO84B,qBACfvM,YAAUmN,EAAQ15B,OAAOrB,SFtpB3B,iBEwpBF+6B,EAAQU,aAAajhB,WAM7BQ,MAAKggB,UACLhgB,KAAKggB,SAAS/P,WAI1BmC,EAAepI,UAAUuW,YAAc,SAAUJ,GAC7C,GAAI3oB,GAAS2oB,EAAIC,cAAc5oB,OAC3B5K,EAAOhE,UAAQ4O,EAAQ,IAAM5R,GAC7Boa,MAAK2gB,aAAenpB,EAAOvR,UAAUC,SFppBxB,kBEopBqD3B,oBAAMqI,GACxEoT,KAAKygB,aAAaN,IAGlBngB,KAAK3Z,OAAOyS,QAAS,EACrBkH,KAAK4gB,WAAWh0B,GACXoT,KAAK3Z,OAAOyS,OAGS,IAAjBqnB,EAAI3N,UACTxS,KAAKygB,aAAaN,GAClBngB,KAAKwgB,gBAAgBL,IAGrBngB,KAAKygB,aAAaN,GAPlBngB,KAAKwgB,gBAAgBL,KAWjC/N,EAAepI,UAAUyW,aAAe,SAAUjhB,GAC9C,GAAIhI,GAASgI,EAAE4gB,cAAc5oB,MAC7B7Q,GAAWqZ,KAAK3Z,OAAQ,SACxB2Z,KAAKid,YAAYzlB,EAAQgI,EAAE4gB,eAC3BpgB,KAAK3Z,OAAOkB,aAAe,kBAS/B6qB,EAAepI,UAAUiT,YAAc,SAAUzlB,EAAQgI,GACrD,GAAI5S,GAAOhE,UAAQ4O,EAAQ,IAAM5R,IAC7Bi7B,EAAQrpB,EAAOvR,SACnB+Z,MAAK3Z,OAAOyS,QAAS,CACrB,IAAI5R,GAAS,QACb,IAAgB,IAAZsY,EAAEoI,QAAgBrjB,oBAAMqI,IAASA,EAAK3G,UAAUC,SAAS+xB,IAEzD,WADAjY,MAAK4gB,WAAWh0B,EAGf,IAAKrI,oBAAMqI,GAsDRoT,KAAK3Z,OAAO8B,cAAc/C,SAAW4a,KAAKyX,SAASryB,SACnD4a,KAAKyS,mBAAoB,GAE7BzS,KAAKmd,qBAhDL,IARInd,KAAK3Z,OAAO84B,qBAAuBvyB,EAAK3G,UAAUC,SAAS+xB,MACvDzY,EAAEud,SAAWvlB,EAAOvR,UAAUC,SAAS46B,OAC3C55B,EAAS,YAETsY,EAAEud,SAAWvd,EAAEwd,WACfhd,KAAKyS,mBAAoB,IAGI,IADTzS,KAAK+gB,iBAAiB75B,EAAQ0F,GAChCmK,OAAiB,CAMnC,GALMiJ,KAAK3Z,OAAO84B,sBAAyBnf,KAAK2gB,cAAgBnhB,GAAMA,EAAEud,UAChE8D,EAAM36B,SFrrBX,aEsrBC8Z,KAAK4gB,WAAWh0B,GAChBoT,KAAK4b,eAEL5b,KAAK3Z,OAAO84B,qBAAuB3f,EAAEwd,SAAU,CACzCxd,GAAKA,EAAEud,SACT/c,KAAK4b,cAEJ5b,KAAK2V,YACN3V,KAAK2V,UAAY/oB,EAErB,IAAIo0B,GAAahhB,KAAKyX,SAASprB,QAAQ2T,KAAK2V,WACxCsL,EAAWjhB,KAAKyX,SAASprB,QAAQO,EACrC,IAAIo0B,EAAaC,EACb,IAAS97B,EAAI67B,EAAY77B,GAAK87B,EAAU97B,IACpC6a,KAAKkhB,UAAUlhB,KAAKyX,SAAStyB,QAIjC,KAAK,GAAIA,GAAI67B,EAAY77B,GAAK87B,EAAU97B,IACpC6a,KAAKkhB,UAAUlhB,KAAKyX,SAAStyB,GAGrC6a,MAAKmhB,SAASnhB,KAAKyX,SAASwJ,QAG5BjhB,MAAK2V,UAAY/oB,EACboT,KAAK3Z,OAAO84B,qBAAuBvyB,EAAK3G,UAAUC,SAAS+xB,IAC3DjY,KAAKvZ,aAAamG,GAGlBoT,KAAKkhB,UAAUt0B,GAEnBoT,KAAKmhB,SAASv0B,EAEuB,KAArCoT,KAAK3Z,OAAO8B,cAAc/C,QAC1B4a,KAAK6V,mBAET7V,KAAK3Z,OAAOU,OAAOyW,OACnBwC,KAAKohB,cAAcl6B,EAAQ0F,GAS9BrI,oBAAMqI,KACPoT,KAAKyS,mBAAoB,EACzBzS,KAAK4gB,WAAWh0B,KAGxBwlB,EAAepI,UAAUwW,gBAAkB,SAAUhhB,GACjDQ,KAAK3Z,OAAOkB,aAAe,gBAC3B,IAAIiQ,GAASgI,EAAE4gB,cAAc5oB,MAC7BwI,MAAKwc,aAAahlB,IAEtB4a,EAAepI,UAAUmT,eAAiB,WACtCnd,KAAK4b,cACL5b,KAAK6V,mBACL7V,KAAK3Z,OAAOU,OAAOyW,QAEvB4U,EAAepI,UAAU6L,iBAAmB,WACxC7V,KAAK2gB,aAAc,EACnBU,eAAarhB,KAAK3Z,OAAOrB,SF1xBP,kBE4xBtBotB,EAAepI,UAAUwS,aAAe,SAAUhlB,GAC9C,GAAIkhB,GAAQ1Y,IACZ,KAAIzb,oBAAMiT,GAAV,CAGA,GAAI5K,GAAOhE,UAAQ4O,EAAQ,IAAM5R,GAEjC,IADAoa,KAAK3Z,OAAOyS,QAAS,GAChBvU,oBAAMqI,GAAO,CACdoT,KAAK4gB,WAAWh0B,EAEhB,IAAI00B,GAAYthB,KAAK4Z,cAAchtB,EACnC,KAAKzB,GAAcm2B,GAEf,WADAj2B,IAAmB2U,KAAK3Z,OAAQi7B,EAAWh2B,GAG/C,IAAIiC,IAAcwJ,QAAQ,EAAOvJ,YAAa8zB,EAAWlvB,OAAQ,iBACjE4N,MAAK3Z,OAAOwH,QAAQ,WAAYN,EAAW,SAAUg0B,GACjD,IAAKA,EAAaxqB,OAAQ,CACtB,GAAI7S,GAAOC,WAAS,OAAQm9B,EAC5B,IAAK5I,EAAMryB,OAAOyS,QAoBd,GADWlN,EAAS01B,KACP90B,GAAgB,CACzB,GAAIK,GAASF,EAAY+rB,EAAMryB,OAAQi7B,EACvCxZ,IAAkB4Q,EAAMryB,OAAQnC,EAAM2I,QAtBpB,CAEtB,GAAY,KADF6rB,EAAMryB,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAC1C0wB,EAAMryB,OAAO4B,WAW5BmL,EAAiBslB,EAAMryB,OAAQi7B,OAXS,CACxC,GAAIl9B,GAAKD,WAAS,KAAMm9B,EACxB5I,GAAMryB,OAAOqO,QAAUgkB,EAAMryB,OAAO5B,IACpC,IAAI8B,GAAUmyB,EAAMryB,OAAO5B,MAAQF,oBAAMH,GAAMF,EAAOE,GAAM,GAC5Ds0B,GAAMryB,OAAO7B,eAAgBC,KAAM8B,IAAW,GAC9CmyB,EAAMryB,OAAOvB,UAAUQ,KAAKpB,GAC5Bw0B,EAAMryB,OAAOzB,OAAOU,KAAKnB,WAAS,SAAUm9B,IAC5C5I,EAAMryB,OAAOgD,UAAYi4B,GACzB/1B,EAAWmtB,EAAMryB,QAKrBqyB,EAAMryB,OAAO4B,YAAa,EAC1BywB,EAAMryB,OAAO7B,eAAgB2D,mBAAqB,UAatEiqB,EAAepI,UAAU4W,WAAa,SAAUh0B,GAC5C,GAAI40B,GAAS17B,SAAO,IAAMgG,GAAYc,EACtCoT,MAAK3Z,OAAOyS,SAASvU,oBAAMi9B,IAI/BpP,EAAepI,UAAU0V,qBAAuB,SAAUlgB,GACtD,GAAKQ,KAAKuS,WAGV,OAAQ/S,EAAEtY,QACN,IAAK,MACL,IAAK,OACL,IAAK,WACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,QACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,MACL,IAAK,MACL,IAAK,WACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,KACL,IAAK,QACDsY,EAAE0H,mBAQdkL,EAAepI,UAAUwV,iBAAmB,SAAUhgB,GAClD,GAAIkZ,GAAQ1Y,IACZ,IAAKA,KAAKuS,WAAV,CAGA,GAAIkP,GAAQzhB,KAAK0hB,iBACbC,EAAY3hB,KAAK2c,eACjBC,EAAW5c,KAAK6c,aACpB,QAAQrd,EAAEtY,QACN,IAAK,MACG8Y,KAAK3Z,OAAO6wB,sBACZlX,KAAK4b,cACL5b,KAAKhb,QAAQ21B,kBAAkBiH,SAAS,EAAG5hB,KAAKhb,QAAQ21B,kBAAkBkH,cAC1EvpB,WAAW,WACPogB,EAAMoJ,aAAapJ,EAAMjB,SAASiB,EAAMjB,SAASryB,OAAS,KAC3D,KAGH4a,KAAK8hB,aAAalF,EAEtB,MACJ,KAAK,OACG5c,KAAK3Z,OAAO6wB,sBACZlX,KAAK4b,cACL5b,KAAKhb,QAAQ21B,kBAAkBoH,UAAY,EAC3CzpB,WAAW,WACPogB,EAAMoJ,aAAapJ,EAAMjB,SAAS,KACnC,KAGHzX,KAAK8hB,aAAaH,EAEtB,MACJ,KAAK,MACIp9B,oBAAMk9B,GAGDl9B,oBAAMo9B,IACZ3hB,KAAKmhB,SAASQ,GAHd3hB,KAAKmhB,SAASM,EAKlB,MACJ,KAAK,WACDzhB,KAAKgiB,aAAaP,GAAO,EACzB,MACJ,KAAK,WACDzhB,KAAKiiB,cAAcR,GAAO,EAC1B,MACJ,KAAK,YACDzhB,KAAKiiB,cAAcR,GAAO,EAC1B,MACJ,KAAK,SACDzhB,KAAKgiB,aAAaP,GAAO,EACzB,MACJ,KAAK,UACL,IAAK,WACL,IAAK,QACDzhB,KAAKkiB,SAAStF,EAAUpd,EACxB,MACJ,KAAK,WACL,IAAK,YACL,IAAK,SACDQ,KAAKmiB,UAAUR,EAAWniB,EAC1B,MACJ,KAAK,WACL,IAAK,YACL,IAAK,SACDQ,KAAKoiB,UAAUX,EAAOjiB,EACtB,MACJ,KAAK,WACL,IAAK,YACL,IAAK,SACDQ,KAAKqiB,UAAUZ,EAAOjiB,EACtB,MACJ,KAAK,YACL,IAAK,aACL,IAAK,UACDQ,KAAKsiB,WAAWb,EAAOjiB,EACvB,MACJ,KAAK,SACL,IAAK,UACL,IAAK,OACDQ,KAAKuiB,QAAQd,EAAOjiB,EACpB,MACJ,KAAK,QACDQ,KAAKwiB,SAASf,EACd,MACJ,KAAK,YACL,IAAK,aACL,IAAK,UACIl9B,oBAAMk9B,IACPzhB,KAAKid,YAAYwE,EAAOjiB,EAE5B,MACJ,KAAK,QACDQ,KAAKyiB,SAASd,EAAW/E,EACzB,MACJ,KAAK,QACD5c,KAAKwc,aAAaxc,KAAK3Z,OAAOqvB,YAAc1V,KAAK3Z,OAAOqvB,YAAc1V,KAAK0iB,iBAC3E,MACJ,KAAK,WACD1iB,KAAK3Z,OAAOU,OAAO43B,OACnBhjB,GAAWqE,KAAK3Z,OAAQ2Z,KAAK3Z,OAAO8B,cAAe6X,KAAK3Z,OAAO5B,KAAM,UACrE,MACJ,KAAK,MACDgC,EAAauZ,KAAK3Z,OAClB,MACJ,KAAK,MACL,IAAK,WACD2Z,KAAK2iB,eACL,MACJ,KAAK,QACDl3B,EAAUuU,KAAK3Z,OACf,MACJ,KAAK,QACD2Z,KAAK3Z,OAAOoN,WAAa,GACzBF,EAAayM,KAAK3Z,OAClB,MACJ,KAAK,QACDsF,EAASqU,KAAK3Z,OACd,MACJ,KAAK,KACD2Z,KAAK4iB,eACL,MACJ,KAAK,QACD5iB,KAAK7G,gBAIjBiZ,EAAepI,UAAU7Q,WAAa,WAClC6G,KAAK8b,qBACL3iB,GAAW6G,KAAK3Z,SAEpB+rB,EAAepI,UAAU2Y,cAAgB,WACrC,GAAI3iB,KAAK3Z,OAAO8B,eAAiB6X,KAAK3Z,OAAO8B,cAAc/C,OAAS,EAAG,CACnE4a,KAAK8b,oBAGL,KAAK,GADD93B,GAAOgc,KAAK3Z,OAAOgD,SACdlE,EAAI,EAAGA,EAAInB,EAAKoB,OAAQD,IAC7B,IAAK8T,GAAcjV,EAAKmB,IAEpB,WADAkG,IAAmB2U,KAAK3Z,OAAQrC,EAAKmB,GAAI+T,GAIjDrF,IAAamM,KAAK3Z,OAAQ,YAGlC+rB,EAAepI,UAAU4Y,cAAgB,WACI,IAArC5iB,KAAK3Z,OAAO8B,cAAc/C,SAC1B4a,KAAKmc,mBACLnjB,GAASgH,KAAK3Z,UAGtB+rB,EAAepI,UAAUmS,iBAAmB,WACxC,GAAIvvB,GAAO9G,SAAO,IAAMF,GAAgB,IAAMqyB,GAAYjY,KAAKhb,SAE3DhB,EAAOgc,KAAK4Z,cAAchtB,EAC9BgM,IAAmBoH,KAAK3Z,OAAQrC,IAEpCouB,EAAepI,UAAU0Y,eAAiB,WACtC,GAAI91B,GAAOoT,KAAK3Z,OAAO8B,cAAc6X,KAAK3Z,OAAO8B,cAAc/C,OAAS,GACpE21B,EAAU/a,KAAKgb,YAAYpuB,GAAOoT,KAAK3Z,OAAO1B,MAClD,OAAOqb,MAAKyX,SAASsD,EAAQ,KAEjC3I,EAAepI,UAAU0X,eAAiB,WACtC,MAAO57B,UAAO,IAAMF,GAAgB,IAAMi9B,GAAW7iB,KAAKhb,UAE9DotB,EAAepI,UAAU8Y,cAAgB,WACrC,MAAOh9B,UAAO,IAAMF,GAAgB,IAAMqyB,GAAYjY,KAAKhb,UAE/DotB,EAAepI,UAAU2S,aAAe,WACpC,MAAO3c,MAAKyX,SAAS,IAEzBrF,EAAepI,UAAU6S,YAAc,WACnC,MAAO7c,MAAKyX,SAASzX,KAAKyX,SAASryB,OAAS,IAEhDgtB,EAAepI,UAAU8X,aAAe,SAAUl1B,GAC9CoT,KAAK2Z,SAAS/sB,IAElBwlB,EAAepI,UAAUgY,aAAe,SAAUP,EAAOsB,GACrD,GAAIC,GAAQhjB,KAAKijB,YAAYxB,EAAOsB,EAAW/iB,KAAKkjB,OACpDljB,MAAK2Z,SAASqJ,IAElB5Q,EAAepI,UAAUiY,cAAgB,SAAUR,EAAOsB,GACtD,GAAIC,GAAQhjB,KAAKijB,YAAYxB,EAAOsB,EACpC/iB,MAAK2Z,SAASqJ,IAElB5Q,EAAepI,UAAUiZ,YAAc,SAAUE,EAAIJ,EAAWG,GAC5D,GAAI3+B,oBAAM4+B,GACN,MAAOnjB,MAAK0hB,kBAAoB1hB,KAAK8iB,iBAAmB9iB,KAAK2c,cAEjE,IACIyG,GADAzgB,EAAQ3C,KAAKyX,SAASprB,QAAQ82B,EAElC,GAAG,CAQC,GANIxgB,EADAogB,EACQG,EAASvgB,EAAQugB,EAASvgB,EAAQ,EAGlCugB,EAASvgB,EAAQugB,EAASvgB,EAAQ,EAE9CygB,EAAWpjB,KAAKyX,SAAS9U,GACrB3C,KAAK3Z,OAAO6wB,sBAAwB3yB,oBAAM6+B,GAAW,CACrD,GAAIC,GAAcC,SAASrsB,OAAO8R,iBAAiB/I,KAAKyX,SAAS,IAAI8L,iBAAiB,cAAe,IACjGD,SAASrsB,OAAO8R,iBAAiB/I,KAAKyX,SAAS,IAAI8L,iBAAiB,iBAAkB,IACtF1B,EAAe7hB,KAAKyX,SAAS,GAAG+L,wBAAwBrb,OAASkb,CACrErjB,MAAKhb,QAAQ21B,kBAAkBiH,SAAS5hB,KAAKhb,QAAQ21B,kBAAkBoH,UAAW/hB,KAAKhb,QAAQ21B,kBAAkBoH,UAAYF,GAEjI,GAAIt9B,oBAAM6+B,GACN,MAAOD,UAELM,YAAUL,GACpB,OAAOA,IAEXhR,EAAepI,UAAU2P,SAAW,SAAUyJ,GACrC7+B,oBAAM6+B,KAE0B,IADTpjB,KAAK+gB,iBAAiB,SAAUqC,GAClCrsB,SAClBiJ,KAAK2V,UAAYyN,EACjBpjB,KAAK4b,cACL5b,KAAKkhB,UAAUkC,GACfpjB,KAAKmhB,SAASiC,GACdpjB,KAAK3Z,OAAOU,OAAOyW,OACnBwC,KAAKohB,cAAc,SAAUgC,KAIzChR,EAAepI,UAAUwY,SAAW,SAAUf,GACrCl9B,oBAAMk9B,IAAWA,EAAMx7B,UAAUC,SAAS+xB,MAEV,IADTjY,KAAK+gB,iBAAiB,SAAUU,GAClC1qB,SAClBiJ,KAAKkhB,UAAUO,GACfzhB,KAAK3Z,OAAOU,OAAOyW,OACnBwC,KAAKohB,cAAc,SAAUK,KAIzCrP,EAAepI,UAAUyY,SAAW,SAAUd,EAAW/E,GACrD,GAAI5c,KAAK3Z,OAAO84B,sBAAwB56B,oBAAMo9B,GAAY,CACtD3hB,KAAK2V,UAAYgM,CACjB,IAAI7E,IAAYC,SAAS,EAAMC,UAAU,GACrC0G,EAAW1jB,KAAKhb,QAAQwK,cAAc,kBACtCm0B,EAAWD,EAAS3B,UACpB6B,EAAoB5jB,KAAK0hB,gBAC7B1hB,MAAKid,YAAYL,EAAUE,GAC3B4G,EAAS3B,UAAY4B,EAChBp/B,oBAAMq/B,IACP5jB,KAAKmhB,SAASyC,KAI1BxR,EAAepI,UAAUkY,SAAW,SAAUtF,EAAUpd,GAC/CQ,KAAK3Z,OAAO84B,oBAGP56B,oBAAMq4B,KACK,YAAbpd,EAAEtY,OACF8Y,KAAKmhB,SAASvE,GAGd5c,KAAKid,YAAYL,EAAUpd,IAP/BQ,KAAK8hB,aAAalF,IAW1BxK,EAAepI,UAAUmY,UAAY,SAAUR,EAAWniB,GACjDQ,KAAK3Z,OAAO84B,oBAGP56B,oBAAMo9B,KACK,aAAbniB,EAAEtY,OACF8Y,KAAKmhB,SAASQ,GAGd3hB,KAAKid,YAAY0E,EAAWniB,IAPhCQ,KAAK8hB,aAAaH,IAW1BvP,EAAepI,UAAUoY,UAAY,SAAUX,EAAOjiB,GAClD,GAAKQ,KAAK3Z,OAAO84B,oBAGZ,CACD,GAAI0E,GAAQ7jB,KAAKijB,YAAYxB,GAAO,EAAMzhB,KAAKkjB,OAC1C3+B,qBAAMs/B,KACU,aAAbrkB,EAAEtY,OACF8Y,KAAKmhB,SAAS0C,GAGd7jB,KAAKid,YAAY4G,EAAOrkB,QAThCQ,MAAKgiB,aAAaP,GAAO,IAcjCrP,EAAepI,UAAUqY,UAAY,SAAUZ,EAAOjiB,GAClD,GAAKQ,KAAK3Z,OAAO84B,oBAGZ,CACD,GAAI2E,GAAQ9jB,KAAKijB,YAAYxB,GAAO,EAC/Bl9B,qBAAMu/B,KACU,aAAbtkB,EAAEtY,OACF8Y,KAAKmhB,SAAS2C,GAGd9jB,KAAKid,YAAY6G,EAAOtkB,QAThCQ,MAAKiiB,cAAcR,GAAO,IAclCrP,EAAepI,UAAUsY,WAAa,SAAUb,EAAOjiB,GACnD,GAAKQ,KAAK3Z,OAAO84B,oBAGZ,CACD,GAAI4E,GAAQ/jB,KAAKijB,YAAYxB,GAAO,EAC/Bl9B,qBAAMw/B,KACU,cAAbvkB,EAAEtY,OACF8Y,KAAKmhB,SAAS4C,GAGd/jB,KAAKid,YAAY8G,EAAOvkB,QAThCQ,MAAKiiB,cAAcR,GAAO,IAclCrP,EAAepI,UAAUuY,QAAU,SAAUd,EAAOjiB,GAChD,GAAKQ,KAAK3Z,OAAO84B,oBAGZ,CACD,GAAI6E,GAAQhkB,KAAKijB,YAAYxB,GAAO,EAAOzhB,KAAKkjB,OAC3C3+B,qBAAMy/B,KACU,WAAbxkB,EAAEtY,OACF8Y,KAAKmhB,SAAS6C,GAGdhkB,KAAKid,YAAY+G,EAAOxkB,QAThCQ,MAAKgiB,aAAaP,GAAO,IAcjCrP,EAAepI,UAAUkX,UAAY,SAAUkC,GACtC7+B,oBAAM6+B,KACFA,EAASn9B,UAAUC,SAAS+xB,MAC7BjY,KAAK3Z,OAAO8B,cAAc7C,KAAK0a,KAAKikB,YAAYb,IAChDpjB,KAAK3Z,OAAO7B,eAAgB2D,cAAe6X,KAAK3Z,OAAO8B,gBAAiB,GACxEyqB,YAAUwQ,IAAYnL,KACtBmL,EAAStN,aAAa,gBAAiB,QACvC9V,KAAKob,WAAWgI,GAAU,IAE9BpjB,KAAK3Z,OAAOqvB,YAAc0N,IAGlChR,EAAepI,UAAUvjB,aAAe,SAAUy9B,GAC9C,IAAK3/B,oBAAM2/B,GAAU,CACjB7C,eAAa6C,IAAWjM,KACpBjY,KAAK3Z,OAAO84B,oBACZ+E,EAAQpO,aAAa,gBAAiB,SAGtCoO,EAAQ9J,gBAAgB,iBAE5Bpa,KAAKob,WAAW8I,GAAS,EACzB,IAAIvhB,GAAQ3C,KAAK3Z,OAAO8B,cAAckE,QAAQ2T,KAAKikB,YAAYC,GAC3DvhB,IAAS,IACT3C,KAAK3Z,OAAO8B,cAAcob,OAAOZ,EAAO,GACxC3C,KAAK3Z,OAAO7B,eAAgB2D,cAAe6X,KAAK3Z,OAAO8B,gBAAiB,IAE5E6X,KAAK3Z,OAAOqvB,YAAc,OAGlCtD,EAAepI,UAAUia,YAAc,SAAUr3B,GAE7C,GAAI5I,GAAOgc,KAAK4Z,cAAchtB,EAC9B,OAAOyJ,IAAY2J,KAAK3Z,OAAQrC,IAEpCouB,EAAepI,UAAUmX,SAAW,SAAUv0B,GAC1CoT,KAAKhb,QAAQ8wB,aAAa,WAAY,KACtC,IAAI2L,GAAQzhB,KAAK0hB,gBACbD,KACAA,EAAMrH,gBAAgB,YACtBiH,eAAaI,IAASoB,MAE1BjQ,YAAUhmB,IAAQi2B,KAClBj2B,EAAKkpB,aAAa,WAAY,KAC9BlpB,EAAK4X,SAET4N,EAAepI,UAAUoR,WAAa,SAAUxuB,EAAMu3B,GAClD,GAAKnkB,KAAK3Z,OAAOm0B,mBAAjB,CAGA,GAAIU,GAAWp1B,SAAO,WAAiB8G,EACnCrI,qBAAM22B,KAGNiJ,EACKjJ,EAASj1B,UAAUC,SAAS46B,MAC7BlO,YAAUsI,GAAW4F,IACrBl4B,UAAQsyB,EAAU,IAAMkJ,IAAatO,aAAa,eAAgB,SAIlEoF,EAASj1B,UAAUC,SAAS46B,MAC5BO,eAAanG,GAAW4F,IACxBl4B,UAAQsyB,EAAU,IAAMkJ,IAAatO,aAAa,eAAgB,aAI9E1D,EAAepI,UAAU4R,YAAc,WACnC,GAAIyI,GAAOnmB,MAAM8L,UAAU0N,MAAMC,KAAK/Q,YAAU,IAAMqR,GAAYjY,KAAKsX,cAEvE,IAAoB,IAAhB+M,EAAKj/B,OAAc,CAEnB,IAAiC,IADb4a,KAAK+gB,iBAAiB,WAAYsD,EAAK,IACrCttB,OAClB,IAAK,GAAI5R,GAAI,EAAG8L,EAAMozB,EAAKj/B,OAAQD,EAAI8L,EAAK9L,IACxC6a,KAAKvZ,aAAa49B,EAAKl/B,GAG/B6a,MAAKohB,cAAc,WAAYiD,EAAK,MAG5CjS,EAAepI,UAAUuU,cAAgB,WACrCve,KAAKmY,eACA5zB,oBAAMyb,KAAK+V,UACZ/V,KAAKmX,gBAGb/E,EAAepI,UAAUqU,sBAAwB,WAC7Cre,KAAKmY,gBAET/F,EAAepI,UAAUmO,aAAe,WACpC,GAAI+K,GAAS,CACb,IAAIljB,KAAKyX,SACL,IAAK,GAAItyB,GAAI,EAAG8L,EAAM+O,KAAKyX,SAASryB,OAAS,EAAGD,EAAI8L,GAC5C+O,KAAKyX,SAAStyB,GAAGq+B,wBAAwBv0B,MAAQ+Q,KAAKyX,SAAStyB,EAAI,GAAGq+B,wBAAwBv0B,IAD7C9J,IAEjD+9B,GAOZljB,MAAKkjB,OAASA,GAElB9Q,EAAepI,UAAU+W,iBAAmB,SAAU75B,EAAQ0F,GAE1D,GAAI5I,KACJ,IAAIgc,KAAKyS,kBACL,IAAK,GAAIttB,GAAI,EAAG8L,EAAM+O,KAAKyX,SAASryB,OAAQD,EAAI8L,EAAK9L,IACjDnB,EAAKmB,GAAK6a,KAAK4Z,cAAc5Z,KAAKyX,SAAStyB,QAI/CnB,GAAK,GAAKgc,KAAK4Z,cAAchtB,EAEjC,IAAIW,IACArG,OAAQA,EAAQsG,YAAaxJ,EAAKoB,OAAS,EAAIpB,EAAOA,EAAK,GAAIse,aAActC,KAAKqS,cAAetb,QAAQ,EAAOS,OAAQwI,KAAKyS,kBAAoB,KAAO7lB,EAI5J,OAFAoT,MAAK3Z,OAAOwH,QAAQ,gBAAiBN,GACrCyS,KAAKqS,eAAgB,EACd9kB,GAEX6kB,EAAepI,UAAUoX,cAAgB,SAAUl6B,EAAQ0F,GAEvD,GAAI5I,KACJ,IAAIgc,KAAKyS,kBAAmB,CACxB,IAAK,GAAIttB,GAAI,EAAG8L,EAAM+O,KAAKyX,SAASryB,OAAQD,EAAI8L,EAAK9L,IACjDnB,EAAKmB,GAAK6a,KAAK4Z,cAAc5Z,KAAKyX,SAAStyB,GAE/C6a,MAAKyS,mBAAoB,MAGzBzuB,GAAK,GAAKgc,KAAK4Z,cAAchtB,EAEjCoT,MAAK3Z,OAAOi+B,YAActgC,EAAKoB,OAAS,EAAIpB,EAAKA,EAAKoB,OAAS,GAAKpB,EAAK,EACzE,IAAIuJ,IAAcrG,OAAQA,EAAQsG,YAAaxJ,EAAKoB,OAAS,EAAIpB,EAAOA,EAAK,GAAIse,aAActC,KAAKsC,aACpGtC,MAAK3Z,OAAOwH,QAAQ,aAAcN,GAClCyS,KAAKsC,cAAe,GAExB8P,EAAepI,UAAU+N,YAAc,SAAU5pB,GAE7C,IAAK,GADD4sB,GAAU/a,KAAKgb,WAAW7sB,EAAO6R,KAAK3Z,OAAO1B,OACxC4/B,EAAI,EAAGtzB,EAAM8pB,EAAQ31B,OAAQm/B,EAAItzB,EAAKszB,IAAK,CAChD,GAAIzH,IAAYC,SAAS,EAAMC,UAAU,EACzChd,MAAKid,YAAYjd,KAAKyX,SAASsD,EAAQwJ,IAAKzH,KAGpD1K,EAAepI,UAAUgR,WAAa,SAAU7sB,EAAOq2B,GAGnD,IAAK,GAFDzJ,MACAjxB,EAAS06B,EAAO,KAAO,OAClBr/B,EAAI,EAAG8L,EAAM+O,KAAK7R,MAAM/I,OAAQD,EAAI8L,EAAK9L,KACU,IAApDgJ,EAAM9B,QAAQlI,WAAS2F,EAAQkW,KAAK7R,MAAMhJ,MAC1C41B,EAAQz1B,KAAKH,EAGrB,OAAO41B,IAGX3I,EAAepI,UAAU4P,cAAgB,SAAUhtB,GAC/C,GAAI+V,GAAQ3C,KAAKyX,SAASprB,QAAQO,EAClC,OAAOoT,MAAK7R,MAAMwU,IAGtByP,EAAepI,UAAUsS,aAAe,SAAUt4B,GAE9C,GAAIygC,KACJ,IAAIzkB,KAAK3Z,OAAO1B,MACZ8/B,EAAa,GAAI/1B,eAAYsR,KAAK7R,OAC9BQ,cAAa,GAAIL,UAAQS,MAAM,KAAM,QAASiR,KAAK3Z,OAAOghB,WAAW,QAExE,CAED,GAAIqd,GAAU,GAAIh2B,eAAYsR,KAAK7R,OAC/BQ,cAAa,GAAIL,UAAQS,MAAM,OAAQ,QAAS5K,WAAS,OAAQH,IAAO,GACxE0gC,GAAQt/B,OAAS,IACjBq/B,EAAa,GAAI/1B,eAAYg2B,GACzB/1B,cAAa,GAAIL,UAAQS,MAAM,aAAc,QAASiR,KAAK3Z,OAAO0S,YAAY,KAG1F,GAAI0rB,EAAWr/B,OAAS,EAAG,CACvB,GAAIud,GAAQ3C,KAAK7R,MAAM9B,QAAQo4B,EAAW,IACtC3H,GAAYC,SAAS,EAAMC,UAAU,EACzChd,MAAKid,YAAYjd,KAAKyX,SAAS9U,GAAQma,KAG/C1K,EAAepI,UAAU8R,mBAAqB,WAI1C,IAAK,GAFD93B,MACAmK,EAAQyY,YAAU,IAAMhhB,GAAgB,IAAMqyB,GAAYjY,KAAKhb,SAC1DG,EAAI,EAAGA,EAAIgJ,EAAM/I,OAAQD,IAC9BnB,EAAKmB,GAAK6a,KAAK4Z,cAAczrB,EAAMhJ,GAEvC6a,MAAK3Z,OAAOgD,SAAWrF,GAG3BouB,EAAepI,UAAUgU,aAAe,SAAU90B,GAC9C,GAAyB,eAArB8W,KAAK3Z,OAAOoE,KAIhB,OADatG,WAAS,SAAU+E,IAE5B,IAAK,cACD8W,KAAK2kB,YAAYxgC,WAAS,MAAO+E,GACjC,MACJ,KAAK,gBACD8W,KAAK4kB,cAAczgC,WAAS,MAAO+E,GACnC,MACJ,KAAK,WACD8W,KAAK6kB,SAAS1gC,WAAS,KAAM+E,GAC7B,MACJ,KAAK,aACD8W,KAAKqS,eAAgB,EACrBrS,KAAKsC,cAAe,EACpBtC,KAAK8kB,WAAW3gC,WAAS,KAAM+E,GAAO/E,WAAS,UAAW+E,GAC1D,MACJ,KAAK,eACD8W,KAAKqS,eAAgB,EACrBrS,KAAKsC,cAAe,CACpB,MACJ,KAAK,iBACDtC,KAAKqS,eAAgB,EACrBrS,KAAKsC,cAAe,EACpBtC,KAAKkd,gBACL,MACJ,KAAK,YACDld,KAAKqS,eAAgB,EACrBrS,KAAKsC,cAAe,EACpBtC,KAAK0c,oBAIjBtK,EAAepI,UAAU+a,cAAgB,SAAU52B,GAC/C,GAAI4sB,MACAiK,IAAwE,KAA5DhlB,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,QAAgBgY,KAAK3Z,OAAO4B,YAC1Fg9B,EAAajlB,KAAK3Z,OAAO1B,MAAQ,KAAO,MAC5C,IAAIqb,KAAK3Z,OAAO1B,QAAUqgC,EACtB,IAAK,GAAI7/B,GAAI,EAAG8L,EAAM+O,KAAK7R,MAAM/I,OAAQD,EAAI8L,EAAK9L,KACc,IAAxDgJ,EAAM9B,QAAQlI,WAAS8gC,EAAYjlB,KAAK7R,MAAMhJ,MAC9C41B,EAAQz1B,KAAKH,OAKrB,KAAK,GAAIA,GAAI,EAAG8L,EAAM+O,KAAK7R,MAAM/I,OAAQD,EAAI8L,EAAK9L,IAAK,CACnD,GAAI+/B,GAAS/gC,WAAS,aAAc6b,KAAK7R,MAAMhJ,IAAMhB,WAAS,OAAQ6b,KAAK7R,MAAMhJ,KACjD,IAA3BgJ,EAAM9B,QAAQ64B,KAA4E,IAAxD/2B,EAAM9B,QAAQlI,WAAS8gC,EAAYjlB,KAAK7R,MAAMhJ,MACjF41B,EAAQz1B,KAAKH,GAIzB,MAAO41B,IAEX3I,EAAepI,UAAU2a,YAAc,SAAUt/B,GAE7C,GADA2a,KAAK3Z,OAAOkB,aAAe,iBACvBhD,oBAAMc,GAEN,WADA2a,MAAK2iB,eAGT,IAAI5H,GAAU/a,KAAK+kB,cAAc1/B,EACjC,IAAuB,IAAnB01B,EAAQ31B,OAAZ,CAMA,IAAK,GAFDpB,MACAwV,KACKrU,EAAI,EAAGA,EAAI41B,EAAQ31B,OAAQD,IAChCnB,EAAKmB,GAAK6a,KAAK7R,MAAM4sB,EAAQ51B,IAC7BqU,EAAOrU,GAAKkR,GAAY2J,KAAK3Z,OAAQrC,EAAKmB,GAE9CoU,IAAcyG,KAAK3Z,OAAQrC,EAAMwV,KAErC4Y,EAAepI,UAAU4a,cAAgB,SAAUv/B,GAC/C,GAAId,oBAAMc,GAEN,WADA2a,MAAK7G,YAGT,IAAIwJ,GAAQ3C,KAAK+kB,cAAc1/B,EAC/B,IAAqB,IAAjBsd,EAAMvd,OAAV,CAMA,IAAK,GAFDpB,MACAwV,KACKrU,EAAI,EAAGA,EAAIwd,EAAMvd,OAAQD,IAC9BnB,EAAKmB,GAAK6a,KAAK7R,MAAMwU,EAAMxd,IAC3BqU,EAAOrU,GAAKkR,GAAY2J,KAAK3Z,OAAQrC,EAAKmB,GAE9CuU,IAAgBsG,KAAK3Z,OAAQrC,EAAMwV,KAEvC4Y,EAAepI,UAAU6a,SAAW,SAAUzgC,GAC1C,IAAIG,oBAAMH,GAAV,CAGA,GAAI22B,GAAU/a,KAAK+kB,eAAe3gC,GAC9B22B,GAAQ31B,OAAS,GACjB4a,KAAKwc,aAAaxc,KAAKyX,SAASsD,EAAQ,OAGhD3I,EAAepI,UAAU8a,WAAa,SAAU1gC,EAAI6J,GAEhD,GADA+R,KAAK3Z,OAAOkB,aAAe,iBACvBhD,oBAAMH,GAEN,WADA4b,MAAK4iB,eAGT,IAAI7H,GAAU/a,KAAK+kB,eAAe3gC,GAC9B22B,GAAQ31B,OAAS,IACjBwT,GAAmBoH,KAAK3Z,OAAQ2Z,KAAK7R,MAAM4sB,EAAQ,KAC/Cx2B,oBAAM0J,GACN+K,GAASgH,KAAK3Z,QAGT4S,GAAc+G,KAAK3Z,OAAOgD,SAAS,IAIpC2R,GAAOgF,KAAK3Z,OAAQ2Z,KAAK3Z,OAAO5B,KAAMwJ,GAHtC5C,GAAmB2U,KAAK3Z,OAAQ2Z,KAAK3Z,OAAOgD,SAAS,GAAI6P,MAQlEkZ,KCtkDP+S,GAA+B,WAS/B,QAASA,GAAc9+B,GACnB2Z,KAAKolB,YAAc,GACnBplB,KAAKqlB,eAAiB,GACtBrlB,KAAKslB,YAAc,KACnBtlB,KAAKulB,gBAAkB,KACvBvlB,KAAK3Z,OAASA,EACd2Z,KAAK8S,YACD+B,MAAO,SAEX7U,KAAKyV,SA4XT,MA1XA0P,GAAcnb,UAAU8T,kBAAoB,SAAUte,GAClD,GAAIA,EAAEpN,SAAW4N,KAAK8Z,iBAAgC,WAAbta,EAAEpN,OAG3C,IAAK,GAAI4sB,GAAK,EAAGC,EAAKtmB,OAAOD,KAAK8G,EAAE0f,SAAUF,EAAKC,EAAG75B,OAAQ45B,IAAM,CAChE,GAAIwG,GAAOvG,EAAGD,GACVh3B,EAAQwX,EAAE0f,QAAQ/1B,cACtB,QAAQq8B,GACJ,IAAK,iBACIC,oBAAkBz9B,EAAM09B,sBACzB1lB,KAAK2lB,gBAAgB39B,EAAM09B,sBAE3B1lB,KAAK3Z,OAAOyB,oBAAoBC,UAAUC,OAA6D,KAApDgY,KAAK3Z,OAAOyB,oBAAoBC,UAAUC,QAC1Fy9B,oBAAkBz9B,EAAM09B,sBAAwBD,oBAAkBz9B,EAAMoB,aACvEq8B,oBAAkBz9B,EAAMwB,aAC5BV,EAAkBkX,KAAK3Z,OAAQ2Z,KAAK3Z,OAAOyB,oBAAoBC,UAAUC,OAAO,MAMpGm9B,EAAcnb,UAAUyL,OAAS,WAC7BzV,KAAK6S,oBAETsS,EAAcnb,UAAU4b,aAAe,WACnC,GAAI9gC,GAAYkb,KAAK3Z,OAAOvB,UACxB+gC,EAAQ7lB,KAAK3Z,OAAO5B,KAAK6H,MAAM,KAC/Bw5B,EAAe9lB,KAAK3Z,OAAOsJ,cAAc,MAAQC,UAAW,oBAC5Dm2B,EAAe,KACfC,EAAelhC,EAAUM,MAC7B,IAAIN,EAAUM,OAAS,EAAG,CAEtB,IAAK,GADDhB,GAAK,GACAe,EAAI,EAAGA,EAAI6gC,EAAc7gC,IAAK,CACnC,GAAI8gC,GAAc,IAClBF,GAAe/lB,KAAK3Z,OAAOsJ,cAAc,MAAQC,UAAW,uBAC5D,KAAK,GAAI20B,GAAI,EAAGA,GAAKp/B,EAAGo/B,IACpBngC,EAAKA,EAAKyhC,EAAMtB,GAAK,GAGzB,IADAwB,EAAajQ,aAAa,aAAc1xB,GAC9B,IAANe,EAAS,CACT,GAAIk2B,GAAO1rB,gBAAc,QAAUC,UH8HpC,WG7HCm2B,GAAa31B,YAAYirB,GAEzB2K,EAAe7gC,GAAM,GACrB8gC,EAAct2B,gBAAc,KAAOC,UAAW7J,KAC9CggC,EAAajQ,aAAa,WAAY,MAGtCmQ,EAAct2B,gBAAc,QAAUC,UAAW7J,KAErD3B,EAAK,GACL6hC,EAAYC,UAAYphC,EAAUK,GAClC4gC,EAAa31B,YAAY61B,GACzBH,EAAa11B,YAAY21B,GAE7B,GAAII,GAAYnmB,KAAK3Z,OAAO+/B,wBAAwB52B,cAAc,mBAC7Di2B,qBAAkBU,KACdV,oBAAkBzlB,KAAKqmB,aACxBrmB,KAAKqmB,WAAWpW,UAEpBvnB,SAAOy9B,GAEX,IAAIG,GAAatmB,KAAK3Z,OAAO+/B,wBAAwB52B,cAAc,iBAC9D82B,GAIDtmB,KAAK3Z,OAAO+/B,wBAAwBh2B,YAAY01B,GAHhD9lB,KAAK3Z,OAAO+/B,wBAAwBxL,aAAakL,EAAcQ,GAKnEtmB,KAAKumB,oBAAoBT,KAIjCX,EAAcnb,UAAUuc,oBAAsB,SAAUC,GAUpD,IAAK,GATDC,GAAaD,EAAYh+B,iBAAiB,MAC1C29B,EAAYnmB,KAAK3Z,OAAO+/B,wBAAwB52B,cAAc,oBAC9DiB,EAAQwG,OAAO8R,iBAAiBod,EAAW,MAC3CO,EAASzd,WAAWxY,EAAM8yB,iBAAiB,kBAC3CoD,EAAQ1d,WAAWxY,EAAM8yB,iBAAiB,iBAC1CqD,EAAqBT,EAAU9c,YAAcqd,EAASC,EACtDb,EAAe9lB,KAAK3Z,OAAOsJ,cAAc,MAAQC,UAAW,oBAC5Di3B,EAAkB,EAClBC,KACK3hC,EAAI,EAAGA,EAAIshC,EAAWrhC,OAAQD,IAAK,CACxC,GAAI6b,GAAQylB,EAAWthC,GAAG4hC,WAC1BD,GAAiBxhC,KAAK0b,GACtB6lB,GAAoC7lB,EAEnCykB,oBAAkBU,IACnBz9B,SAAOy9B,EAEX,IAAIa,GAAkBhnB,KAAK3Z,OAAOsJ,cAAc,MAChDq3B,GAAgBlR,aAAa,QAAS,gBACtC,IAAI1xB,GAAK4b,KAAK3Z,OAAOrB,QAAQZ,GHhFd,UGiFX6iC,EAAct3B,gBAAc,SAAWvL,GAAIA,EAC3C4a,OAASkoB,aAAc,MAAOC,aAAc52B,EAAcyP,KAAK3Z,OAAQ,YAC3E2gC,GAAgB52B,YAAY62B,EAC5B,IAAIG,GAAYpnB,KAAK3Z,OAAO+/B,wBAAwB52B,cAAc,0BAClE,IAAIi2B,oBAAkB2B,GAAY,CAC9BpnB,KAAK3Z,OAAO+/B,wBAAwBh2B,YAAY42B,EAChD,IAAIK,GAAO13B,gBAAc,QAAUC,UAAW,uBAC9C+vB,gBAAat3B,IAAIg/B,EAAM,QAASrnB,KAAKsnB,YAAatnB,MAClDinB,EAAYrpB,cAAcgd,aAAayM,EAAMJ,GAC7CjnB,KAAKjY,UAAY,GAAIw/B,YACjBv/B,MAAO,GACPw/B,iBAAiB,EACjBjiB,YAAahV,EAAcyP,KAAK3Z,OAAQ,UACxCme,MAAOxE,KAAKynB,QAAQ1nB,KAAKC,MACzB0nB,KAAM1nB,KAAK2nB,OAAO5nB,KAAKC,QAE3BA,KAAKjY,UAAUuZ,SAAS,IAAMtB,KAAK3Z,OAAOrB,QAAQZ,GHjGvC,WGkGX4b,KAAK2lB,gBAAgB3lB,KAAK3Z,OAAO8C,eAAeu8B,oBAChD,IAAIpV,GAAStQ,KAAKjY,UAAU/C,QAAQ6Y,kBACpC8hB,gBAAat3B,IAAIioB,EAAQ,YAAatQ,KAAK4nB,oBAAoB7nB,KAAKC,MAAOA,MAC3E2f,eAAat3B,IAAI2X,KAAKjY,UAAU/C,QAAS,QAASgb,KAAK6nB,QAAQ9nB,KAAKC,MAAOA,MAE/E,GAAIsmB,GAAatmB,KAAK3Z,OAAO+/B,wBAAwB52B,cAAc,iBAEnE,IADAo3B,GAA2C5mB,KAAKulB,gBAAkBvlB,KAAKulB,gBAAkBe,EAAWjd,YAChGwd,EAAkBD,EAAoB,CAEtC,IADIzhC,EAAIshC,EAAWrhC,OACZD,KAAK,CACR,GAAI2iC,GAAOlB,EAAqBE,EAAiB3hC,EACjD,MAAI2iC,EAAO,IAIN,CAGD,IAAK,GADD35B,MACKo2B,EAAI,EAAGA,GAAKp/B,EAAGo/B,IAAK,CACzB,GAAIwD,GAAYtB,EAAWlC,EAC3Bp2B,GAAM7I,MACFpB,KAAM6jC,EAAU7B,UAChB8B,MAAOD,EAAU1jC,aAAa,gBAGtC,GAAI4jC,GAAYjoB,KAAK3Z,OAAOsJ,cAAc,MAAQC,UAAW,sBAEzDs4B,GAAet4B,UAAW,wBAC1Bu4B,EAAcnoB,KAAK3Z,OAAOsJ,cAAc,SAAUu4B,EACtDD,GAAU73B,YAAY+3B,GACtBrC,EAAalL,aAAaqN,EAAWnC,EAAat2B,cAAc,OAChEwQ,KAAKqmB,WAAa,GAAI+B,mBAClBj6B,MAAOA,EACP4D,SAAU,yBACV6kB,QHWK,0BGVLyR,aAAc,MACdjnB,oBAAqBpB,KAAK3Z,OAAO+a,oBACjCknB,iBAAkBtoB,KAAKuoB,qBAAqBxoB,KAAKC,MACjDla,OAAQka,KAAKwoB,wBAAwBzoB,KAAKC,QAE9CA,KAAKqmB,WAAWhlB,kBAAmB,EACnCrB,KAAKqmB,WAAW/kB,SAAS6mB,EACzB,OA9BArC,EAAalL,aAAa6L,EAAWthC,GAAI2gC,EAAat2B,cAAc,OACpEo3B,EAAqBkB,EAgC7B9nB,KAAK3Z,OAAO+/B,wBAAwBxL,aAAakL,EAAcQ,OAG/DtmB,MAAK3Z,OAAO+/B,wBAAwBxL,aAAa4L,EAAaF,IAItEnB,EAAcnb,UAAUyd,QAAU,WACnB7+B,UAAQoX,KAAKjY,UAAU/C,QAAS,kBACtCiB,UAAUoC,IAAI,YAGvB88B,EAAcnb,UAAU6d,QAAU,WAC9B7nB,KAAK3Z,OAAOU,OAAOkC,IAAqBC,KAAM8W,KAAK3Z,UAGvD8+B,EAAcnb,UAAU2d,OAAS,WAClB/+B,UAAQoX,KAAKjY,UAAU/C,QAAS,kBACtCiB,UAAUyC,OAAO,YAG1By8B,EAAcnb,UAAUwe,wBAA0B,SAAUzwB,GAExD,GAAI7O,IAASsO,OAAQO,EAAM/S,QAC3Bgb,MAAKyoB,wBAAwBv/B,IAGjCi8B,EAAcnb,UAAUue,qBAAuB,SAAUr/B,GACrDA,EAAKlE,QAAQ8wB,aAAa,aAAc3xB,WAAS,QAAS+E,EAAK0D,MAC/D,IAAI87B,GAAS1oB,KAAK3Z,OAAOsJ,cAAc,KAAOC,UAAW,eACzD1G,GAAKlE,QAAQoL,YAAYs4B,IAE7BvD,EAAcnb,UAAU2b,gBAAkB,SAAUgD,GAC5CA,GACA3oB,KAAKjY,UAAUoX,MAAQa,KAAK4nB,oBAAoB7nB,KAAKC,MACrDA,KAAKjY,UAAUsc,OAAS,OAGxBrE,KAAKjY,UAAUsc,OAASrE,KAAK4nB,oBAAoB7nB,KAAKC,MACtDA,KAAKjY,UAAUoX,MAAQ,OAG/BgmB,EAAcnb,UAAU4d,oBAAsB,SAAU1+B,GACpD,GAAIwvB,GAAQ1Y,IACPylB,qBAAkBv8B,EAAKlB,SACxBgY,KAAK3Z,OAAO4B,YAAa,EACrB+X,KAAK3Z,OAAO8C,eAAeu8B,qBAC3BzuB,OAAOC,aAAa8I,KAAKslB,aACzBtlB,KAAKslB,YAAcruB,OAAOqB,WAAW,WAAcxP,EAAkB4vB,EAAMryB,OAAQ6C,EAAKlB,OAAO,IAAW,MAG1Gc,EAAkBkX,KAAK3Z,OAAQ6C,EAAKlB,OAAO,KAIvDm9B,EAAcnb,UAAUye,wBAA0B,SAAUjpB,GACxD,GAAI2jB,GAAK3jB,EAAEhI,MACX,IAAoB,OAAhB2rB,EAAGyF,UAAqC,MAAhBzF,EAAGyF,SAAkB,CAC7C,GAAI7kC,GAAuB,OAAhBo/B,EAAGyF,SAAoBzF,EAAG0F,SAAS,GAAK1F,CACnD,KAAKsC,oBAAkB1hC,GAAO,CAC1Bic,KAAK3Z,OAAO4B,YAAa,CACzB,IAAI6gC,GAAc9oB,KAAKlc,WAAWC,EAClCic,MAAK3Z,OAAOgD,UAAYlF,WAAS6b,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,GAAI4a,KAAK3Z,OAAOG,WAChGwZ,KAAK+oB,gBAAgB/oB,KAAK3Z,OAAOgD,SAAS,IAC1CkB,GAAKyV,KAAK3Z,OAAQiY,GAAoBwqB,EACtC,IAAIE,GAAahpB,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,EAChE4a,MAAK3Z,OAAOU,OF5JK,yBE4JgCqL,OAAQ,WAAYkB,aAAc01B,OAK/F7D,EAAcnb,UAAU+e,gBAAkB,SAAU/kC,GAChD,GAAIuJ,IAAcwJ,QAAQ,EAAOvJ,YAAaxJ,EAAMoO,OAAQ,uBACrD7E,GAAUwJ,OACjBiJ,KAAK3Z,OAAOwH,QAAQ,WAAYN,IAGpC43B,EAAcnb,UAAUsd,YAAc,WAClC,GAAItnB,KAAK3Z,OAAO6L,SACZ,GAAI8N,KAAK3Z,OAAOrB,QAAQiB,UAAUC,SAAS+iC,IACvC5H,eAAarhB,KAAK3Z,OAAOrB,SAAUikC,IACnCjpB,KAAKulB,gBAAkB,SAEtB,CACD,GAAIe,GAAatmB,KAAK3Z,OAAO+/B,wBAAwB52B,cAAc,iBACnEwQ,MAAKulB,gBAAkBe,EAAWjd,YAClCuJ,YAAU5S,KAAK3Z,OAAOrB,SAAUikC,IAChCjpB,KAAKjY,UAAU/C,QAAQwf,UAInC2gB,EAAcnb,UAAUlmB,WAAa,SAAUolC,GAC3C,GACIC,GADKvgC,UAAQsgC,EAAM,MACF7kC,aAAa,aAClC2b,MAAKqlB,eAAiB8D,CACtB,IAAIC,GAAOppB,KAAKqlB,eAAe/4B,MAAM,KACjCjH,EAAM2a,KAAK3Z,OAAOzB,OAClBW,EAAQya,KAAK3Z,OAAOvB,SACxBkb,MAAK3Z,OAAOzB,UACZob,KAAK3Z,OAAOvB,YAEZ,KAAK,GADDukC,GAAU,GACLlkC,EAAI,EAAG8L,EAAMm4B,EAAKhkC,OAAS,EAAGD,EAAI8L,EAAK9L,IAC5C6a,KAAK3Z,OAAOzB,OAAOU,KAAKD,EAAIF,IAC5B6a,KAAK3Z,OAAOvB,UAAUQ,KAAKC,EAAMJ,IACjCkkC,GAAWD,EAAKjkC,GAAK,GAGzB,OADA6a,MAAK3Z,OAAO7B,eAAgBC,KAAM4kC,IAAW,GACtCA,GAEXlE,EAAcnb,UAAUsf,aAAe,WACnCtpB,KAAK4lB,eACL5lB,KAAKupB,qBAETpE,EAAcnb,UAAU2R,YAAc,WAClC3b,KAAK4lB,gBAETT,EAAcnb,UAAUwf,YAAc,WAClCxpB,KAAK4lB,gBAGTT,EAAcnb,UAAUgS,YAAc,WAClChc,KAAKspB,gBAGTnE,EAAcnb,UAAUuf,kBAAoB,WACxCvpB,KAAK3Z,OAAO4B,YAAa,GACrB+X,KAAKjY,WAAuC,KAAzBiY,KAAKjY,UAAUC,OAAiD,KAAjCgY,KAAKjY,UAAU/C,QAAQgD,QACzEgY,KAAKjY,UAAUC,MAAQ,GACvBgY,KAAKjY,UAAU/C,QAAQgD,MAAQ,GAC/BgY,KAAKjY,UAAUga,aAGvBojB,EAAcnb,UAAUyf,SAAW,WAC/BzpB,KAAK4lB,gBAETT,EAAcnb,UAAU0f,WAAa,WACjC1pB,KAAK4lB,gBAETT,EAAcnb,UAAU6I,iBAAmB,WACvC7S,KAAKqf,eAAiB,GAAIC,kBAAetf,KAAK3Z,OAAO+/B,yBACjD7G,UAAWvf,KAAKwf,iBAAiBzf,KAAKC,MACtC8S,WAAY9S,KAAK8S,WACjB7f,UAAW,YAEf+M,KAAK3Z,OAAOy4B,GAAGjB,GAAqB7d,KAAK8d,kBAAmB9d,MAC5D2f,eAAat3B,IAAI2X,KAAK3Z,OAAO+/B,wBAAyB,QAASpmB,KAAKyoB,wBAAyBzoB,MAC7FA,KAAK3Z,OAAOy4B,GAAG6K,GAAgB3pB,KAAKiQ,QAASjQ,MAC7CA,KAAK3Z,OAAOy4B,GAAGxgB,GAAoB0B,KAAKspB,aAActpB,MACtDA,KAAK3Z,OAAOy4B,GAAG5rB,GAAoB8M,KAAKspB,aAActpB,MACtDA,KAAK3Z,OAAOy4B,GAAG1zB,GAAmB4U,KAAKspB,aAActpB,MACrDA,KAAK3Z,OAAOy4B,GAAGtzB,GAAgBwU,KAAKspB,aAActpB,MAClDA,KAAK3Z,OAAOy4B,GAAG9gB,GAAkBgC,KAAK2b,YAAa3b,MACnDA,KAAK3Z,OAAOy4B,GAAGvgB,GAAkByB,KAAKwpB,YAAaxpB,MACnDA,KAAK3Z,OAAOy4B,GAAGpgB,GAAkBsB,KAAKgc,YAAahc,MACnDA,KAAK3Z,OAAOy4B,GFtTQ,kBEsTkB9e,KAAKypB,SAAUzpB,MACrDA,KAAK3Z,OAAOy4B,GAAGppB,GAAiBsK,KAAK0pB,WAAY1pB,MACjDA,KAAK3Z,OAAOy4B,GAAGR,GAAkBte,KAAKypB,SAAUzpB,MAChDA,KAAK3Z,OAAOy4B,GAAGxhB,GAAyB0C,KAAK4pB,mBAAoB5pB,MACjEA,KAAK3Z,OAAOy4B,GAAGrnB,GAAiBuI,KAAK6Z,WAAY7Z,MACjDA,KAAK3Z,OAAOy4B,GF3SO,iBE2SkB9e,KAAKypB,SAAUzpB,MACpDA,KAAK3Z,OAAOy4B,GAAG7oB,GAAiB+J,KAAK4lB,aAAc5lB,OAEvDmlB,EAAcnb,UAAUwV,iBAAmB,SAAUhgB,GACjD,OAAQA,EAAEtY,QACN,IAAK,QACD8Y,KAAKyoB,wBAAwBjpB,KAIzC2lB,EAAcnb,UAAUiM,oBAAsB,WAC1CjW,KAAKqf,eAAepP,UACpBjQ,KAAK3Z,OAAOs3B,IAAIrf,GAAoB0B,KAAKspB,cACzCtpB,KAAK3Z,OAAOs3B,IAAIzqB,GAAoB8M,KAAKspB,cACzCtpB,KAAK3Z,OAAOs3B,IAAIvyB,GAAmB4U,KAAKspB,cACxCtpB,KAAK3Z,OAAOs3B,IAAInyB,GAAgBwU,KAAKspB,cACrCtpB,KAAK3Z,OAAOs3B,IAAIjoB,GAAiBsK,KAAK0pB,YACtC1pB,KAAK3Z,OAAOs3B,IAAI3f,GAAkBgC,KAAK2b,aACvC3b,KAAK3Z,OAAOs3B,IAAIpf,GAAkByB,KAAKwpB,aACvCxpB,KAAK3Z,OAAOs3B,IAAIjf,GAAkBsB,KAAKgc,aACvChc,KAAK3Z,OAAOs3B,IF/UQ,kBE+UmB3d,KAAKypB,UAC5CzpB,KAAK3Z,OAAOs3B,IAAIW,GAAkBte,KAAKypB,UACvCzpB,KAAK3Z,OAAOs3B,IAAIrgB,GAAyB0C,KAAK4pB,oBAC9C5pB,KAAK3Z,OAAOs3B,IAAIlmB,GAAiBuI,KAAK6Z,YACtC7Z,KAAK3Z,OAAOs3B,IFnUO,iBEmUmB3d,KAAKypB,UAC3CzpB,KAAK3Z,OAAOs3B,IAAI1nB,GAAiB+J,KAAK4lB,eAG1CT,EAAcnb,UAAU6P,WAAa,SAAU3wB,GAC3C,GAAI8W,KAAK3Z,OAAO4E,eAAiB+U,KAAK8Z,gBAAiB,CACnD,GAAI+P,GAAQ3gC,EAAKsO,OAAO5O,QAAQ,KAChCoX,MAAK3Z,OAAO4N,SAAW+L,KAAKlc,WAAY+lC,EAAMhB,SAAS,IACvD7oB,KAAK3Z,OAAOoO,SAAWtQ,WAAS6b,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,GAAI4a,KAAK3Z,OAAOG,UAC/FwZ,KAAK+oB,gBAAgB/oB,KAAK3Z,OAAOoO,SACjC,IAAIu0B,GAAahpB,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,EAChE4a,MAAK3Z,OAAOU,OF5RS,yBE4R4BqL,OAAQ,WAAYkB,aAAc01B,MAS3F7D,EAAcnb,UAAU8P,cAAgB,WACpC,MAAO,iBAEXqL,EAAcnb,UAAUiG,QAAU,WAC1BjQ,KAAK3Z,OAAOq3B,cAGhB1d,KAAKiW,sBAEAwP,oBAAkBzlB,KAAKqmB,aACxBrmB,KAAKqmB,WAAWpW,UAEfwV,oBAAkBzlB,KAAKjY,YACxBiY,KAAKjY,UAAUkoB,YAGvBkV,EAAcnb,UAAU4f,mBAAqB,SAAU1gC,GACnD8W,KAAKjY,UAAU/C,QAAQugB,YAAyD,MAA1CvF,KAAK3Z,OAAO8C,eAAeoc,YAAuBvF,KAAK3Z,OAAO8C,eAAeoc,YAAchV,EAAcyP,KAAK3Z,OAAQ,UAAY,IAAMkK,EAAcyP,KAAK3Z,OAAQ6C,EAAK0L,IAAI3G,KAAKL,aAEpNu3B,KC5YP2E,GAA6B,WAO7B,QAASA,GAAYzjC,GACjB2Z,KAAK+pB,gBACL/pB,KAAKgqB,eAAiB,KACtBhqB,KAAKiqB,iBACLjqB,KAAK3Z,OAASA,EACd2Z,KAAKyV,SA8kBT,MA5kBAqU,GAAY9f,UAAUyL,OAAS,WAC3BzV,KAAK8S,YACDoX,UAAW,YACXC,QAAS,YAEbnqB,KAAKoqB,YAAc,GAAIC,gBACnBlpB,UAAWnB,KAAK3Z,OAAO8a,UACvBzP,OAAQsO,KAAK3Z,OAAOqL,OACpB8F,OAAQ,IAAMwI,KAAK3Z,OAAOrB,QAAQZ,GAClCgd,oBAAqBpB,KAAK3Z,OAAO+a,oBACjCknB,iBAAkBtoB,KAAKsqB,mBAAmBvqB,KAAKC,MAC/Cla,OAAQka,KAAKuqB,SAASxqB,KAAKC,MAC3BH,WAAYG,KAAKwqB,aAAazqB,KAAKC,MACnCE,YAAaF,KAAKyqB,cAAc1qB,KAAKC,MACrCjO,SAAUF,EAAYmO,KAAK3Z,OAAQ0a,MAEvCf,KAAKoqB,YAAY/oB,kBAAmB,EACpCrB,KAAKoqB,YAAY9oB,SAAS,IAAMtB,KAAK3Z,OAAOrB,QAAQZ,GJhB/B,gBIiBrB4b,KAAK6S,oBAGTiX,EAAY9f,UAAUsgB,mBAAqB,SAAUphC,GACjD,GAAIA,EAAK0D,KAAKxI,KAAO4b,KAAK0qB,UAAU,kBAAmB,CAC/CC,EAAWh7B,gBAAc,SACzB3K,EAAUkE,EAAKlE,SACX41B,aAAa+P,EAA+B,eAArB3qB,KAAK3Z,OAAOoE,KAAwBzF,EAAQ61B,WAAW,GAAK71B,EAAQ61B,WAAW,IAC9G8P,EAAS7U,aAAa,QAAS8U,GAAiB,IAAMC,IAE1D,GAAI3hC,EAAK0D,KAAKxI,KAAO4b,KAAK0qB,UAAU,eAAgB,CAChD,GAAIC,GAAWh7B,gBAAc,QACzB3K,EAAUkE,EAAKlE,OACnBA,GAAQ41B,aAAa+P,EAA+B,YAArB3qB,KAAK3Z,OAAOoE,KAAqBzF,EAAQ61B,WAAW,GAAK71B,EAAQ61B,WAAW,IAC3G8P,EAAS7U,aAAa,QAASgV,GAAgB,IAAMD,MAG7Df,EAAY9f,UAAUygB,cAAgB,WAClCzqB,KAAK+qB,WAAa,MAGtBjB,EAAY9f,UAAUwgB,aAAe,SAAUthC,GAC3C,GAAIwvB,GAAQ1Y,IACZA,MAAKiqB,gBACL,IACIe,GAEAhnC,EAHAu3B,GAAW,EAIX0P,GAAa,EACbzzB,EAAStO,EAAK6O,MAAMP,MACxBwI,MAAK+qB,WAAa/qB,KAAKkrB,kBAAoB1zB,EAC3CwI,KAAKgqB,eAAiB9gC,EAAKlE,QACvBwS,EAAOvR,UAAUC,SAAS,oBAC1BsR,EAASwI,KAAK3Z,OAAOyP,qBAAqBq1B,WAAWC,uBJuI5C,aIvIgF,GACzFprB,KAAK+qB,WAAa/qB,KAAKkrB,kBAAoB1zB,GAE/CwI,KAAKqrB,cAAqC,YAArBrrB,KAAK3Z,OAAOoE,KAAqB7B,UAAQ4O,EAAQ,YAAcA,EAChFwI,KAAK3Z,OAAO6wB,uBAAyB1f,EAAOvR,UAAUC,SAAS,qBAAuBsR,EAAOvR,UAAUC,SAAS,qBAChHsR,EAASA,EAAOoG,cAAchV,QAAQ,OAE1C,IAAI6B,GAAOuV,KAAKsrB,cAAc9zB,EAG9B,IAFAwI,KAAKurB,qBAED/zB,EAAOvR,UAAUC,SAASC,KAAkByC,UAAQ4O,EAAQ,OAC3D5O,UAAQ4O,EAAQ,IAAMwI,KAAK3Z,OAAOrB,QAAQZ,GAAKiL,KAC/CzG,UAAQ4O,EAAQ,IAAMwI,KAAK3Z,OAAOrB,QAAQZ,GJtF/B,YIuFZ8E,EAAK6N,QAAS,MAGb,IAA2B,eAArBiJ,KAAK3Z,OAAOoE,MAA0BuV,KAAKqrB,eAClDrrB,KAAKqrB,cAAcplC,UAAUC,SAAS,cACtC8Z,KAAKwrB,cAAch0B,OAGlB,IAAI5O,UAAQ4O,EAAQ,IAAM/H,IAC3BuQ,KAAKwrB,cAAch0B,OAGlB,KAAKA,EAAOvR,UAAUC,SJwCZ,iBIvCVsR,EAAOvR,UAAUC,SAAS2kC,MAAmBrzB,EAAOvR,UAAUC,SJ2CjD,WI3C6E,CAG3F,GAAyB,eAArB8Z,KAAK3Z,OAAOoE,MAA0BlG,oBAAMqE,UAAQ4O,EAAQ,QAAW5O,UAAQ4O,EAAQ,IAAMwI,KAAK3Z,OAAOrB,QAAQZ,GJjG5G,SI0GCG,oBAAMqE,UAAQ4O,EAAQ,aAWvB5O,UAAQ4O,EAAQ,IAAMwI,KAAK3Z,OAAOrB,QAAQZ,GJrH1C,WIsHL4mC,EAAMpiC,UAAQ4O,EAAQ,MAAMnT,aAAa,YACzC4mC,GAAa,IAZbD,EAAMhrB,KAAKqrB,cAAchnC,aAAa,YAEtCL,EAAOgc,KAAK3Z,OAAO6D,kBAAkBC,QAAQshC,oBAAoBT,GAAKhnC,KAClEO,oBAAMyb,KAAKqrB,cAAchnC,aAAa,mBAEtC2b,KAAK3Z,OAAO6D,kBAAkBC,QAAQuhC,YAAYpI,SAAStjB,KAAKqrB,cAAchnC,aAAa,iBAAkB,MAEjHk3B,GAAW,OAjByH,CACpI,GAAIuB,IAAYC,SAAS,EAAMC,UAAU,EACpCp0B,WAAQ4O,EAAQ,MAAMvR,UAAUC,SAAS,aAC1C8Z,KAAK3Z,OAAOgE,qBAAqB4yB,YAAYzlB,EAAQslB,GAGzD94B,EAAOgc,KAAK3Z,OAAOi+B,YACnB/I,GAAW,EAkBXA,GACiC,IAA7Bp3B,WAAS,SAAUH,GACnBgc,KAAK2rB,cAGL3rB,KAAK4rB,eAAc,GAIlBX,GACLjrB,KAAK4rB,eAAc,GACfZ,IAAQhrB,KAAK3Z,OAAOzB,OAAO,IAC3Bob,KAAKiqB,cAAc3kC,KAAK,SAAU,SAAU,MAAO,SAKzC,aAATmF,GAAgC,aAATA,GAAgC,cAATA,EACnDuV,KAAKwrB,cAAch0B,GAInBtO,EAAK6N,QAAS,EAGtB,GAAI80B,GAAW/lC,SAAO,IAAMka,KAAK0qB,UAAU,SAAU1qB,KAAKoqB,YAAYplC,QAKtE,IAJKkE,EAAK6N,QAAWiJ,KAAK3Z,OAAOS,cAC7B+kC,GAAaA,EAAS5lC,UAAUC,SAAS,eACzC8Z,KAAKiqB,cAAc3kC,KAAK,SAExB4D,EAAK6N,OAEL,YADAiJ,KAAK+qB,WAAa/qB,KAAKgqB,eAAiB,KAG5ChqB,MAAKoqB,YAAYroB,UACjB,IAAI+pB,IAAY,GACZt0B,EAAOvR,UAAUC,SJzBN,gBI0BXsR,EAAOvR,UAAUC,SAAS2kC,KAAkBrzB,EAAOvR,UAAUC,SJtB/C,cIuBd4lC,GAAY,GAEhB9rB,KAAK8Q,aAAegb,EAAY9rB,KAAK8Q,aAAe9Q,KAAK+rB,iBACzD,IAAIx+B,IACAC,aAAcwS,KAAK8Q,cACnB9rB,QAASkE,EAAKlE,QACdwS,OAAQA,EACRrJ,MAAO29B,EAAY5iC,EAAKiF,MAAQ6R,KAAKoqB,YAAYj8B,MACjD69B,WAAYhsB,KAAKoqB,YACjBrzB,QAAQ,EACRk1B,SAAUjsB,KAAKisB,SACfH,UAAWA,EAEf9rB,MAAK+pB,aAAex8B,EAAUY,MAC9B6R,KAAK3Z,OAAOwH,QAAQ,WAAYN,EAAW,SAAU2+B,GAC5CJ,IACDpT,EAAM0R,YAAYroB,WAClB2W,EAAM0R,YAAYj8B,MAAQ+9B,EAAa/9B,MACvCuqB,EAAM0R,YAAYroB,YAEtB2W,EAAMyT,YAAYzT,EAAMuR,eAAe,GAAO,GAC9C/gC,EAAK6N,OAASm1B,EAAan1B,OACvBm1B,EAAan1B,SACb2hB,EAAMqS,WAAarS,EAAMwS,kBAAoBxS,EAAMsR,eAAiB,SAIhFF,EAAY9f,UAAUuhB,mBAAqB,WACvCvrB,KAAK3Z,OAAOkB,aAAeqB,UAAQoX,KAAK+qB,WAAY,IAAM/qB,KAAK3Z,OAAOrB,QAAQZ,GJ5LjE,SI6LT,iBAAmBwE,UAAQoX,KAAK+qB,WAAY,IAAM/qB,KAAK3Z,OAAOrB,QAAQZ,GAAKgoC,IAC3E,cAAgBxjC,UAAQoX,KAAK+qB,WAAY,IAAM/qB,KAAK3Z,OAAOrB,QAAQZ,GAAKuuB,IACxE,iBAAmB3S,KAAK3Z,OAAOkB,cASvCuiC,EAAY9f,UAAUshB,cAAgB,SAAU9zB,GAC5C,MAAOA,GAAOvR,UAAUC,SAASC,IAC7B,WAAaqR,EAAOvR,UAAUC,SAASiK,IACvC,WAAaqH,EAAOvR,UAAUC,SJ5DnB,iBI6DX,YAAcsR,EAAOvR,UAAUC,SAAS8E,IACxC,YAAc,IAEtB8+B,EAAY9f,UAAUqiB,aAAe,SAAUz/B,GAE3C,IAAK,GADD0/B,GAAStsB,KAAK0qB,UAAU99B,GACnBzH,EAAI,EAAGA,EAAI6a,KAAK+pB,aAAa3kC,OAAQD,IAC1C,GAAK6a,KAAK+pB,aAAa5kC,GAAGf,KAAOkoC,GAAYtsB,KAAK+pB,aAAa5kC,GAAGf,KAAOwI,EACrE,MAAOzH,EAGf,QAAQ,GAEZ2kC,EAAY9f,UAAUuiB,YAAc,SAAUp+B,GACrB,IAAjBA,EAAM/I,SACN4a,KAAKiqB,cAAgBjqB,KAAKiqB,cAAcuC,OAAOr+B,KAGvD27B,EAAY9f,UAAUmiB,YAAc,SAAUh+B,EAAOs+B,EAAQC,GACzD,IAAK,GAAIvnC,GAAI,EAAGA,EAAIgJ,EAAM/I,OAAQD,IACQ,IAAlC6a,KAAK2sB,eAAex+B,EAAMhJ,IAC1B6a,KAAKoqB,YAAY+B,aAAansB,KAAK0qB,UAAUv8B,EAAMhJ,KAAMsnC,EAAQC,GAE1B,IAAlC1sB,KAAK2sB,eAAex+B,EAAMhJ,KAC/B6a,KAAKoqB,YAAY+B,aAAah+B,EAAMhJ,IAAKsnC,EAAQC,IAI7D5C,EAAY9f,UAAU4hB,cAAgB,SAAUgB,GAI5C,GAHA5sB,KAAKisB,SAAW,SAChBjsB,KAAKoqB,YAAYj8B,MAAQ6R,KAAK6sB,YAAY7sB,KAAK3Z,OAAOymC,oBAAoBtL,OAAOpb,IAAI,SAAUxZ,GAAQ,MAAOA,GAAKmgC,UACnH/sB,KAAKoqB,YAAYroB,WACb6qB,EAAQ,CACR,GAAII,GAAmBlnC,SAAO,cAAgBka,KAAK3Z,OAAOyP,qBAAqBC,QAAQnP,cAAc,GAAK,KAAMoZ,KAAK3Z,OAAOyP,qBAAqBC,QAAQ/Q,QACrJgb,MAAK3Z,OAAOvB,UAAUkb,KAAK3Z,OAAOvB,UAAUM,OAAS,KAAO4nC,EAAiBx9B,cAAc,gBAAgBc,WAA0C,mBAA7B0P,KAAK3Z,OAAOkB,cACpIyY,KAAKiqB,cAAc3kC,KAAK,YAGc,KAArC0a,KAAK3Z,OAAO8B,cAAc/C,QAA6C,mBAA7B4a,KAAK3Z,OAAOkB,cAC3DyY,KAAKiqB,cAAc3kC,KAAK,SAAU,UAG1CwkC,EAAY9f,UAAU2hB,YAAc,WAChC3rB,KAAKisB,SAAW,OAChBjsB,KAAKoqB,YAAYj8B,MAAQ6R,KAAK6sB,YAAY7sB,KAAK3Z,OAAOymC,oBAAoBjhC,KAAKua,IAAI,SAAUxZ,GAAQ,MAAOA,GAAKmgC,UACjH/sB,KAAKoqB,YAAYroB,WACwB,IAArC/B,KAAK3Z,OAAO8B,cAAc/C,QAC1B4a,KAAKiqB,cAAc3kC,KAAK,WAGhCwkC,EAAY9f,UAAUwhB,cAAgB,SAAUh0B,GAC5CwI,KAAKisB,SAAW,SAChBjsB,KAAKoqB,YAAYj8B,MAAQ6R,KAAK6sB,YAAY7sB,KAAK3Z,OAAOymC,oBAAoBG,OAAO7mB,IAAI,SAAUxZ,GAAQ,MAAOA,GAAKmgC,UACnH/sB,KAAKoqB,YAAYroB,aACZ/B,KAAK3Z,OAAO84B,qBAA8C,eAArBnf,KAAK3Z,OAAOoE,MAC6D,IAA9G7B,UAAQ4O,EAAQ,IAAMwI,KAAK3Z,OAAOrB,QAAQZ,GAAKuuB,IAAkByY,uBAAuB37B,IAAWrK,QAC3E,YAArB4a,KAAK3Z,OAAOoE,MAC8F,IAAzG7B,UAAQ4O,EAAQ,IAAMwI,KAAK3Z,OAAOrB,QAAQZ,GAAKgoC,IAAahB,uBAAuB37B,IAAWrK,SACnG4a,KAAKiqB,cAAc3kC,KAAK,aAEa,IAArC0a,KAAK3Z,OAAOO,cAAcxB,QAC1B4a,KAAKiqB,cAAc3kC,KAAK,SAE5B0a,KAAKoqB,YAAYroB,YAErB+nB,EAAY9f,UAAU2iB,eAAiB,SAAUO,GAC7C,MAAK3oC,qBAAMuB,SAAO,IAAMka,KAAK0qB,UAAUwC,GAAUltB,KAAKgqB,iBAG5CzlC,oBAAMuB,SAAO,IAAMonC,EAASltB,KAAKgqB,kBAI/B,EAHD,EAHA,GAUfF,EAAY9f,UAAU+hB,gBAAkB,WACpC,GAAsB,WAAlB/rB,KAAKisB,SACL,MAAO3iC,GAAc0W,KAAK3Z,OAI1B,IAAI6C,IAASsO,OAAQwI,KAAK+qB,WAE1B,OADA/qB,MAAK3Z,OAAOU,OAAOo3B,GAAqBj1B,GACjC8W,KAAK3Z,OAAOgD,SAAS,IAIpCygC,EAAY9f,UAAUugB,SAAW,SAAUrhC,GACvC,GAAIwvB,GAAQ1Y,IACZ,KAAIzb,oBAAM2E,EAAK0D,OAAU1D,EAAK0D,KAAKxI,GAAnC,CAGA,GAEI4V,GAFAuc,EAAWrtB,EAAK0D,KAAKxI,GAAGkiB,QAAQtG,KAAK3Z,OAAOrB,QAAQZ,GAAK,QAAQgB,OAGpD,aAAbmxB,GAAuC,cAAbA,GAAyC,WAAbA,GACtDvc,GAAW1Q,EAAc0W,KAAK3Z,SAC9B2Z,KAAK3Z,OAAOgD,SAAW2Q,IAGvBgG,KAAK3Z,OAAOU,OHtOE,oBGwOViT,EAD6B,mBAA7BgG,KAAK3Z,OAAOkB,cAAkD,SAAbgvB,GACtCvW,KAAK8Q,cAGN9Q,KAAK3Z,OAAOgD,SAG9B,IAAIkE,IACAwJ,QAAQ,EACR/R,QAASkE,EAAKlE,QACdwI,YAAawM,EACbpN,KAAM1D,EAAK0D,KAEfoT,MAAK3Z,OAAOwH,QAAQ,YAAaN,EAAW,SAAU4/B,GAClD,GAAIC,EACJ,KAAKD,EAAcp2B,OAEf,OAAQwf,GACJ,IAAK,MACD5qB,EAAS+sB,EAAMryB,OACf,MACJ,KAAK,OACDoF,EAAUitB,EAAMryB,OAChB,MACJ,KAAK,QACsB,WAAnBqyB,EAAMuT,WAC6B,mBAA9BvT,EAAMryB,OAAOkB,cAAqE,gBAA9BmxB,EAAMryB,OAAOkB,cAClEmxB,EAAMryB,OAAOoN,WAAa3F,EAAY4qB,EAAMryB,OAAQqyB,EAAM5H,aAAc4H,EAAMryB,OAAO5B,MAOzFi0B,EAAMryB,OAAOoN,WAAa,GAE9BF,EAAamlB,EAAMryB,OACnB,MACJ,KAAK,SACD,IAAK,GAAIk+B,GAAI,EAAGA,EAAIvqB,EAAQ5U,OAAQm/B,IAChC,IAAKtrB,GAAce,EAAQuqB,IAEvB,WADAl5B,IAAmBqtB,EAAMryB,OAAQ2T,EAAQuqB,GAAIrrB,GAIrDrF,IAAa6kB,EAAMryB,OAAQ,SAC3B,MAEJ,KAAK,WACD,IAAK,GAAIlB,GAAI,EAAGA,EAAI6U,EAAQ5U,OAAQD,IAChC,IAAKiU,GAAkBY,EAAQ7U,IAE3B,WADAkG,IAAmBqtB,EAAMryB,OAAQ2T,EAAQ7U,GAAIkU,GAInB,oBAA9Bqf,EAAMryB,OAAOkB,aACbmxB,EAAMryB,OAAOU,OHvQf,oBGyQO2xB,EAAMryB,OAAO8B,cAAc/C,OAAS,GACzCkU,GAASof,EAAMryB,OAAQqyB,EAAMryB,OAAO5B,KAAMi0B,EAAMryB,OAAO8B,cAE3D,MACJ,KAAK,SACI8Q,GAAce,EAAQ,KAIvB0e,EAAMryB,OAAOU,OAAOm3B,OACpBrqB,GAAa6kB,EAAMryB,OAAQ,WAJ3BgF,GAAmBqtB,EAAMryB,OAAQ2T,EAAQ,GAAId,GAMjD,MACJ,KAAK,YAEDwf,EAAMryB,OAAOU,OH1UV,qBG2UH,MACJ,KAAK,UACDmE,EAAQwtB,EAAMryB,OACd,MACJ,KAAK,OACGqyB,EAAMryB,OAAOqvB,aAA6C,mBAA9BgD,EAAMryB,OAAOkB,aACzCmxB,EAAMryB,OAAOU,OAAO62B,IAAmBpmB,OAAQkhB,EAAMryB,OAAOqvB,cAEzB,mBAA9BgD,EAAMryB,OAAOkB,eACdmxB,EAAMryB,OAAOqvB,aACbgD,EAAMryB,OAAOU,OAAO62B,IAAmBpmB,OAAQkhB,EAAMryB,OAAOqvB,cAEhEgD,EAAMryB,OAAOyP,qBAAqBu3B,2BAA2BzkC,UAAQ8vB,EAAMwS,kBAAmB,OAElG,MACJ,KAAK,UACDxS,EAAMryB,OAAOU,OAAO43B,OACpByO,EAAS1U,EAAMryB,OAAO8B,cACY,mBAA9BuwB,EAAMryB,OAAOkB,eACb6lC,MAEJzxB,GAAW+c,EAAMryB,OAAQ+mC,EAAQ1U,EAAMryB,OAAO5B,KAAM,UACpD,MACJ,KAAK,YACDsV,GAAgB2e,EAAMryB,OACtB,MACJ,KAAK,SACD6T,GAAWwe,EAAMryB,OACjB,MAEJ,KAAK,OAGL,IAAK,OAGL,IAAK,OAGL,IAAK,YAGL,IAAK,aAKL,IAAK,OAED2L,EAAmB0mB,EAAMryB,OAAQ6C,EACjC,MAGJ,KAAK,iBACDsB,EAAakuB,EAAMryB,OAAQ,aAC3B,MAGJ,KAAK,cACDmE,EAAakuB,EAAMryB,OAAQ,gBAM/CyjC,EAAY9f,UAAU8T,kBAAoB,SAAUte,GAChD,GAAIA,EAAEpN,SAAW4N,KAAK8Z,iBAAgC,WAAbta,EAAEpN,OAI3C,IAAK,GAAI4sB,GAAK,EAAGC,EAAKtmB,OAAOD,KAAK8G,EAAE0f,SAAUF,EAAKC,EAAG75B,OAAQ45B,IAE1D,OADWC,EAAGD,IAEV,IAAK,WACDhf,KAAKoqB,YAAYr4B,SAAWF,EAAYmO,KAAK3Z,OAAQ0a,MAKrE+oB,EAAY9f,UAAU6I,iBAAmB,WACrC7S,KAAK3Z,OAAOy4B,GAAG6K,GAAgB3pB,KAAKiQ,QAASjQ,MAC7CA,KAAK3Z,OAAOy4B,GAAGjB,GAAqB7d,KAAK8d,kBAAmB9d,MAC5DA,KAAKqf,eAAiB,GAAIC,kBAAetf,KAAKoqB,YAAYplC,SACtDu6B,UAAWvf,KAAKwf,iBAAiBzf,KAAKC,MACtC8S,WAAY9S,KAAK8S,WACjB7f,UAAW,aAGnB62B,EAAY9f,UAAUiM,oBAAsB,WACxCjW,KAAK3Z,OAAOs3B,IAAIgM,GAAgB3pB,KAAKiQ,SACrCjQ,KAAK3Z,OAAOs3B,IAAIE,GAAqB7d,KAAK8d,mBAC1C9d,KAAKqf,eAAepP,WAExB6Z,EAAY9f,UAAUwV,iBAAmB,SAAUhgB,GAC/C,OAAQA,EAAEtY,QACN,IAAK,UACL,IAAK,YACDsY,EAAE0H,mBASd4iB,EAAY9f,UAAU8P,cAAgB,WAClC,MAAO,eAEXgQ,EAAY9f,UAAUiG,QAAU,WACxBjQ,KAAK3Z,OAAOq3B,cAGhB1d,KAAKiW,sBACLjW,KAAKoqB,YAAYna,UACjBjQ,KAAKqrB,cAAgB,OAGzBvB,EAAY9f,UAAU6iB,YAAc,SAAU7oC,GAE1C,IAAK,GADDmK,MACKhJ,EAAI,EAAGA,EAAInB,EAAKoB,OAAQD,IAAK,CAClC,GAAIyH,OAAO,GACP0/B,EAAStsB,KAAK0qB,UAAU1mC,EAAKmB,IAC7BoxB,EAAWhmB,EAAcyP,KAAK3Z,OAAQrC,EAAKmB,GAC/C,QAAQnB,EAAKmB,IACT,IAAK,IACDyH,GAAS0gC,WAAW,EACpB,MACJ,KAAK,OACD1gC,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJ5WlC,oBI6WH,MACJ,KAAK,SACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJ7WhC,sBI8WL,MACJ,KAAK,MACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QAAS2W,GAC9C,MACJ,KAAK,OACD3gC,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJ/WlC,oBIgXH,MACJ,KAAK,QACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJhXjC,qBIiXJ,MACJ,KAAK,SACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJjXhC,sBIkXL,MACJ,KAAK,SACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJlXhC,sBImXL,MACJ,KAAK,YACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJnX7B,yBIoXR,MACJ,KAAK,UACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJpX/B,uBIqXN,MACJ,KAAK,SACDhqB,GACIxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJtX1B,oBIuXFzoB,QAEQ/J,GAAI4b,KAAK0qB,UAAU,QAASxmC,KAAMqM,EAAcyP,KAAK3Z,OAAQ,QAC7DuwB,QAAgC,SAAvB5W,KAAK3Z,OAAOkI,OAAoBi/B,GAAoB,OAG7DppC,GAAI4b,KAAK0qB,UAAU,QAASxmC,KAAMqM,EAAcyP,KAAK3Z,OAAQ,QAC7DuwB,QAAgC,SAAvB5W,KAAK3Z,OAAOkI,OAAoBi/B,GAAoB,OAG7DppC,GAAI4b,KAAK0qB,UAAU,QAASxmC,KAAMqM,EAAcyP,KAAK3Z,OAAQ,gBAC7DuwB,QAAgC,iBAAvB5W,KAAK3Z,OAAOkI,OAA4Bi/B,GAAoB,OAEvEF,WAAW,IAETlpC,GAAI4b,KAAK0qB,UAAU,aAAcxmC,KAAMqM,EAAcyP,KAAK3Z,OAAQ,aAClEuwB,QAAmC,cAA1B5W,KAAK3Z,OAAOgI,UAA4Bo/B,GAAqB,OAGtErpC,GAAI4b,KAAK0qB,UAAU,cAAexmC,KAAMqM,EAAcyP,KAAK3Z,OAAQ,cACnEuwB,QAAmC,eAA1B5W,KAAK3Z,OAAOgI,UAA6Bo/B,GAAqB,OAGvErpC,GAAI4b,KAAK0qB,UAAU,QAASxmC,KAAMqM,EAAcyP,KAAK3Z,OAAQ,QAC7DuwB,QAAmC,SAA1B5W,KAAK3Z,OAAOgI,UAAuBo/B,GAAqB,OAI7E,MAEJ,KAAK,OACD7gC,GACIxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QAA8B,YAArB5W,KAAK3Z,OAAOoE,KAAqBqgC,GAAgBF,GACtFz8B,QAEQ/J,GAAI4b,KAAK0qB,UAAU,kBAAmBxmC,KAAMqM,EAAcyP,KAAK3Z,OAAQ,mBACvEuwB,QAA8B,YAArB5W,KAAK3Z,OAAOoE,KAAqB,KAAOgjC,KAGjDrpC,GAAI4b,KAAK0qB,UAAU,eAAgBxmC,KAAMqM,EAAcyP,KAAK3Z,OAAQ,gBACpEuwB,QAA8B,YAArB5W,KAAK3Z,OAAOoE,KAAqBgjC,GAAqB,OAI3E,MACJ,KAAK,UACD7gC,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJna/B,uBIoaN,MACJ,KAAK,YACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJpa7B,sBIqaR,MAEJ,KAAK,WACDhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAUK,QJta9B,wBIuaP,MAEJ,SACIhqB,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,GAGnCpoB,EAAM7I,KAAKsH,GAEf,MAAOuB,IAEX27B,EAAY9f,UAAU0gB,UAAY,SAAUtmC,GACxC,MAAO4b,MAAK3Z,OAAOrB,QAAQZ,GAAK,OAASA,EAAGgI,eAEzC09B,KCnmBA4D,IACPC,UAAa,aACbC,OAAU,SACVn0B,OAAU,SACVo0B,OAAU,SACVv0B,SAAY,WACZw0B,IAAO,MACPC,KAAQ,OACRC,MAAS,QACTC,OAAU,UACVC,QAAW,UACXC,iBAAkB,gBAClBC,kBAAmB,iBACnBC,KAAQ,OACRC,QAAW,UACXC,UAAa,aACbC,KAAQ,OACRC,oBAAqB,aACrBC,iBAAkB,SAClBC,iBAAkB,SAClBC,iBAAkB,SAClBC,mBAAoB,WACpBC,cAAe,MACfC,eAAgB,OAChBC,gBAAiB,QACjBC,iBAAkB,UAClBC,kBAAmB,UACnBC,oBAAqB,kBACrBC,eAAgB,OAChBC,kBAAmB,UACnBC,oBAAqB,aACrBC,KAAQ,OACRC,KAAQ,OACRC,aAAgB,WAChBC,YAAe,eACfC,KAAQ,OACRC,SAAY,WACZC,QAAW,UACXC,SAAY,WACZC,KAAQ,OACRC,WAAc,aACdC,UAAa,YACbC,WAAc,aACdC,KAAQ,OACRC,kBAAmB,cACnBC,eAAgB,UAChB1mC,OAAU,SACV2mC,YAAa,KACbC,gBAAiB,SACjBC,aAAc,MACdC,YAAa,KACbC,gBAAiB,SACjBC,cAAe,OACfC,mBAAoB,SACpBC,oBAAqB,yBACrBC,gBAAiB,SACjBC,iBAAkB,sBAClBC,6BAA8B,sBAC9BC,8BAA+B,2GAE/BC,gBAAiB,cACjBC,iBAAkB,6CAClBC,uBAAwB,gBACxBC,wBAAyB,+CACzBC,yBAA0B,wBAC1BC,0BAA2B,mDAC3BC,mBAAoB,qBACpBC,oBAAqB,uDACrBC,gBAAiB,eACjBC,MAAS,QACTC,mBAAoB,2CACpBC,qBAAsB,kNAGtBC,8BAA+B,qDAC/BC,2BAA4B,wDAC5BC,eAAgB,uBAChBC,cAAe,4BACfC,eAAgB,mBAChBC,aAAc,8BACdC,eAAgB,mBAChBC,aAAc,4BACdC,mBAAoB,gEACpBC,oBAAqB,2DACrBC,gBAAiB,gBACjBC,iBAAkB,mDAClBC,eAAgB,sBAChBC,gBAAiB,kFACjBC,mBAAoB,YACpBC,iBAAkB,UAClBC,cAAe,OACfC,iBAAkB,gCAClBC,GAAM,KACNC,iBAAkB,wEAClBC,gBAAiB,iEACjBC,eAAgB,sCCnGhB7pB,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgB5Q,OAAO+Q,iBAChBC,uBAA2BzL,QAAS,SAAUsL,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIG,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,MACpDJ,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASK,KAAO9J,KAAK+J,YAAcP,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEQ,UAAkB,OAANP,EAAa9Q,OAAOsR,OAAOR,IAAMK,EAAGE,UAAYP,EAAEO,UAAW,GAAIF,QAGnFI,GAA0C,SAAUC,EAAY3S,EAAQlR,EAAK8jB,GAC7E,GAA2HZ,GAAvHa,EAAIC,UAAUllB,OAAQmlB,EAAIF,EAAI,EAAI7S,EAAkB,OAAT4S,EAAgBA,EAAOzR,OAAO6R,yBAAyBhT,EAAQlR,GAAO8jB,CACrH,IAAuB,gBAAZK,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASP,EAAY3S,EAAQlR,EAAK8jB,OACpH,KAAK,GAAIjlB,GAAIglB,EAAW/kB,OAAS,EAAGD,GAAK,EAAGA,KAASqkB,EAAIW,EAAWhlB,MAAIolB,GAAKF,EAAI,EAAIb,EAAEe,GAAKF,EAAI,EAAIb,EAAEhS,EAAQlR,EAAKikB,GAAKf,EAAEhS,EAAQlR,KAASikB,EAChJ,OAAOF,GAAI,GAAKE,GAAK5R,OAAOgS,eAAenT,EAAQlR,EAAKikB,GAAIA,GAoC5D6oB,GAA6B,SAAUvoB,GAEvC,QAASuoB,GAAY1zB,EAAS1a,GAC1B,GAAI0zB,GAAQ7N,EAAO8M,KAAK3X,KAAMN,EAAS1a,IAAYgb,IAmDnD,OAjDA0Y,GAAM7d,WAAa,KACnB6d,EAAM9xB,iBACN8xB,EAAMzjB,kBAENyjB,EAAMrjB,oBACNqjB,EAAM2a,gBACN3a,EAAM4a,YACN5a,EAAM3vB,gBAAiB,EACvB2vB,EAAMhuB,uBACNguB,EAAMrR,UAAY,KAClBqR,EAAMxe,cACNwe,EAAM6a,iBACN7a,EAAM5f,QAAS,EACf4f,EAAMhyB,OAAQ,EACdgyB,EAAMvxB,aAAc,EACpBuxB,EAAMljB,cAAe,EACrBkjB,EAAMpjB,cAAe,EACrBojB,EAAMjlB,WAAa,GACnBilB,EAAM8a,cAAe,EACrB9a,EAAMzwB,YAAa,EAEnBywB,EAAM3uB,iBAAkB,EACxB2uB,EAAM5xB,aAAc,EACpB4xB,EAAM+a,aAAc,EACpB/a,EAAM9U,aACN8U,EAAMgb,UAAW,EACjBhb,EAAMtV,eAAgB,EACtBsV,EAAMjjB,YAAa,EAEnBijB,EAAM2D,iBACN3D,EAAMxV,cACNwV,EAAM/W,aAAc,EAEpB+W,EAAMlkB,YACNkkB,EAAMrkB,aACNqkB,EAAMxkB,SAAW,GACjBwkB,EAAMzkB,SAAW,GACjBykB,EAAMllB,YAAa,EACnBklB,EAAM1hB,gBAAkB,KACxB0hB,EAAMS,oBAAuBwa,KAAM,GAAI1kC,IAAK,IAC5CypB,EAAMnjB,WAAY,EAClBmjB,EAAMhhB,UAAY,EAElBghB,EAAMtjB,kBACNsjB,EAAMkb,eAAiB,EACvBlb,EAAMmb,cAAgB,EAEtBnb,EAAMxD,OAAQ,EACd4e,EAAcC,OAAO5O,GAAe/S,GAAgB0X,IAC7CpR,EArDXpP,GAAU8pB,EAAavoB,GAuDvBipB,EAAgBV,EAOhBA,EAAYppB,UAAU8P,cAAgB,WAClC,MAAO,eAOXsZ,EAAYppB,UAAUgqB,UAAY,YAC1BzvC,oBAAMyb,KAAKhb,QAAQZ,KAA2B,KAApB4b,KAAKhb,QAAQZ,KACvC4b,KAAKhb,QAAQ8wB,aAAa,KAAMme,cAAY,gBAEhDj0B,KAAKk0B,aACLl0B,KAAKxZ,YACLwZ,KAAKlR,WACLqlC,oBAAQn0B,KAAKhb,SAAWgc,MAASozB,aAAWp0B,KAAKgB,OAAQmH,OAAUisB,aAAWp0B,KAAKmI,UACnFnI,KAAKqgB,SAAWgU,UAAQhU,SACxBrgB,KAAK9N,SAAW8N,KAAKs0B,cACjBt0B,KAAK9N,UACL8N,KAAKxb,eAAgB+vC,wBAA0B52B,SAAS,KAAW,EAEvE,IAAIlH,GAAM7N,UAAQoX,KAAKhb,QAAS,YAChCgb,MAAKw0B,WAAW/9B,EAChBuJ,KAAKzY,aAA8B,eAAdyY,KAAKvV,KAAyB,iBAAmB,cACtEgqC,iBAAgBj9B,OAAQwI,KAAKhb,SAAW2K,iBACxCqQ,KAAK00B,aACL10B,KAAK8S,YACD6hB,KAAM,QACNC,GAAI,KACJC,WAAY,eACZC,WAAY,eACZC,MAAO,UAEX/0B,KAAKrO,UAAY,GAAIqjC,QAAKh1B,KAAK8Z,gBAAiB4T,GAAe1tB,KAAKtO,SAQxE0hC,EAAYppB,UAAUirB,eAAiB,WACnC,GAAIC,IAAa,OAAQ,OAAQ,gBACjC,OAAOl1B,MAAKm1B,aAAaD,IAQ7B9B,EAAYppB,UAAUorB,gBAAkB,WACpC,GAAIC,KAuCJ,OAtCAA,GAAQ/vC,MACJgwC,OAAQ,gBACRpsC,MAAO8W,QAEXq1B,EAAQ/vC,MACJgwC,OAAQ,iBACRpsC,MAAO8W,QAEPA,KAAKu1B,gBAAgB53B,SACrB03B,EAAQ/vC,MACJgwC,OAAQ,UACRpsC,MAAO8W,QAGXA,KAAKu0B,uBAAuB52B,SAC5B03B,EAAQ/vC,MACJgwC,OAAQ,iBACRpsC,MAAO8W,QAGXA,KAAKvV,MACL4qC,EAAQ/vC,MACJgwC,OAAQ,cACRpsC,MAAO8W,QAGXA,KAAK8sB,oBAAoBnvB,UAAYqC,KAAKqgB,UAC1CgV,EAAQ/vC,MACJgwC,OAAQ,cACRpsC,MAAO8W,QAGXA,KAAKkX,sBACLme,EAAQ/vC,MACJgwC,OAAQ,iBACRpsC,MAAO8W,QAGRq1B,GAQXjC,EAAYppB,UAAUyL,OAAS,WAC3BzV,KAAKw1B,YACL,IAAIC,GAAUlxC,oBAAMyb,KAAK7X,kBACrB6X,KAAKmf,oBAAsBnf,KAAK7X,cAAgB6X,KAAK7X,cAAcuvB,MAAM1X,KAAK7X,cAAc/C,OAAS,EACzG4a,MAAKxb,eAAgB2D,cAAestC,IAAW,GAC/Cz1B,KAAK01B,SAAW11B,KAAKvV,KACrBuV,KAAKkV,MAAQygB,UAAUC,SAASC,cAAcxpC,QAAQ,QAAU,EAChE2T,KAAK81B,OAAO91B,KAAKmB,WACjBnB,KAAK+1B,oBACLxrC,GAAKyV,KAAOA,KAAKvb,OAASub,KAAKjN,aAAgBI,GAAoBD,GAAoB8M,KAAKvb,MAC5Fub,KAAKmX,eACD5yB,oBAAMyb,KAAKlK,wBACXkK,KAAKg2B,YAAYC,SAASj2B,KAAKmB,UAAY,EAAI,GACrCrb,SAAO,eAAqBka,KAAKhb,SACvCiB,UAAUoC,IAAI4uB,KAEtBjX,KAAKoY,aACLpY,KAAKk2B,kBAET9C,EAAYppB,UAAUkqB,WAAa,WAC/B,GAAIpL,GAAc9oB,KAAKvb,IACnBF,qBAAMukC,KACNA,EAAc,KAEdA,EAAYt2B,YAAY,OAAUs2B,EAAY1jC,OAAS,IACvD0jC,GAA4B,KAEhC9oB,KAAKjN,aAAe+1B,CACpB,IAAIjD,GAAQiD,EAAYx8B,MAAM,IAC9B0T,MAAKxb,eAAgBC,KAAMohC,EAAM,GAAK,MAAO,GAC7C7lB,KAAKlb,aACLkb,KAAKpb,QAAU,WACfob,KAAK3W,aAET+pC,EAAYppB,UAAUwrB,WAAa,WAC3Bx1B,KAAK9N,UACL0gB,YAAU5S,KAAKhb,SNlMP,eMoMRgb,KAAKmf,qBACLvM,YAAU5S,KAAKhb,SNzMD,kBM2MlBgb,KAAKm2B,YAAY,KAAMn2B,KAAKjO,UAC5BiO,KAAKo2B,oBAEThD,EAAYppB,UAAU0qB,WAAa,WAC/B,GAAI2B,GAAar2B,KAAKrQ,cAAc,OAASvL,GAAI4b,KAAKhb,QAAQZ,GNhQ9C,YMiQhB4b,MAAKhb,QAAQoL,YAAYimC,EACzB,IAAIC,GAAat2B,KAAKrQ,cAAc,OAChCvL,GAAI4b,KAAKhb,QAAQZ,GAAK+K,GAAeS,UNtM7B,YMwMZoQ,MAAKhb,QAAQoL,YAAYkmC,EACzB,IAAIC,GAAiBv2B,KAAKrQ,cAAc,OACpCvL,GAAI4b,KAAKhb,QAAQZ,GNnQF,cMmQ0BwL,UNxM7B,iBM0MZ4mC,EAAWx2B,KAAKrQ,cAAc,OAC9BvL,GAAI4b,KAAKhb,QAAQZ,GNpQR,SMsQbmyC,GAAenmC,YAAYomC,EAC3B,IAAIC,GAAcz2B,KAAKrQ,cAAc,OACjCvL,GAAI4b,KAAKhb,QAAQZ,GAAKkT,GAAgB1H,UN7MtB,oBM+MpBoQ,MAAKomB,wBAA0BpmB,KAAKrQ,cAAc,OAC9CvL,GAAI4b,KAAKhb,QAAQZ,GAAKiL,GACtBO,UNzEa,cM2EjB6mC,EAAYrmC,YAAY4P,KAAKomB,wBAC7B,IAAIsQ,GAAW12B,KAAKrQ,cAAc,OAC9BvL,GAAI4b,KAAKhb,QAAQZ,GAAKgoC,IAE1BqK,GAAYrmC,YAAYsmC,EACxB,IAAIC,GAAgB32B,KAAKrQ,cAAc,OACnCvL,GAAI4b,KAAKhb,QAAQZ,GAAKuuB,GACtB/iB,UAAW5E,GAAiBgU,OAAS43B,KAAQ,UAEjDH,GAAYrmC,YAAYumC,EACxB,IAAIE,GAAU72B,KAAKrQ,cAAc,QAAUC,UNrE9B,gBMsEb6mC,GAAYrmC,YAAYymC,EACxB,IAAIC,EACC92B,MAAKmB,WAYNm1B,EAAWlmC,YAAYqmC,GACvBH,EAAWlmC,YAAYmmC,GACvBO,IACM7wB,KAAM,MAAO8wB,IAAK,UAEhB9wB,KAAM,MAAO8wB,IAAK/2B,KAAKu0B,uBAAuBjpB,SAAS1d,WACvDopC,IAAKh3B,KAAKu0B,uBAAuB0C,SAASrpC,eAjBlD0oC,EAAWlmC,YAAYmmC,GACvBD,EAAWlmC,YAAYqmC,GACvBK,IAEQ7wB,KAAM,MAAO8wB,IAAK/2B,KAAKu0B,uBAAuBjpB,SAAS1d,WACvDopC,IAAKh3B,KAAKu0B,uBAAuB0C,SAASrpC,aAE5CqY,KAAM,MAAO8wB,IAAK,WAc5B/2B,KAAKg2B,YAAc,GAAIkB,aACnBJ,aAAcA,EACd91B,MAAO,OACPG,WAAW,EACXC,oBAAqBpB,KAAKoB,oBAC1BqH,SAAUzI,KAAKm3B,eAAep3B,KAAKC,QAEvCA,KAAKg2B,YAAY30B,kBAAmB,EACpCrB,KAAKg2B,YAAY10B,SAASg1B,EAC1B,IAAIc,GAAap3B,KAAKrQ,cAAc,OAASvL,GAAI4b,KAAKhb,QAAQZ,GAAKmd,IACnEvB,MAAKhb,QAAQoL,YAAYgnC,EACzB,IAAIC,GAAWr3B,KAAKrQ,cAAc,MAAQvL,GAAI4b,KAAKhb,QAAQZ,GN1StC,gBM2SrB4b,MAAKhb,QAAQoL,YAAYinC,EACzB,IAAIC,GAAgBt3B,KAAKrQ,cAAc,OAASvL,GAAI4b,KAAKhb,QAAQZ,GAAKwkB,IACtE5I,MAAKhb,QAAQoL,YAAYknC,EACzB,IAAIC,GAAiBv3B,KAAKrQ,cAAc,OAASvL,GAAI4b,KAAKhb,QAAQZ,GAAK0d,IACvE9B,MAAKhb,QAAQoL,YAAYmnC,EACzB,IAAIC,GAAmBx3B,KAAKrQ,cAAc,OAASvL,GAAI4b,KAAKhb,QAAQZ,GNpT9C,kBMqTtB4b,MAAKhb,QAAQoL,YAAYonC,IAE7BpE,EAAYppB,UAAUmN,aAAe,WACjC,GAAIsgB,GAAU3xC,SAAO,IAAMka,KAAKhb,QAAQZ,GN5UxB,WM4U6C4b,KAAKhb,SAC9D0yC,EAAgBD,EAAUA,EAAQnoC,aAAe,CACjD0Q,MAAKg2B,cACLh2B,KAAKg2B,YAAY7tB,QAAUnI,KAAKhb,QAAQ2yC,aAAeD,GAAe9pC,WACtEoS,KAAKg2B,YAAYj0B,aAIzBqxB,EAAYppB,UAAUmtB,eAAiB,WACnCn3B,KAAKjZ,OL1Te,uBK4TxBqsC,EAAYppB,UAAU4tB,eAAiB,WACnC,GAAIzd,GAAMr0B,SAAO,eAAqBka,KAAKhb,QACvCgb,MAAKu0B,uBAAuB52B,SAC5BqC,KAAKg2B,YAAY6B,OAAO73B,KAAKmB,UAAY,EAAI,GAC7CgZ,EAAIl0B,UAAUyC,OAAOuuB,MAGrBjX,KAAKg2B,YAAYC,SAASj2B,KAAKmB,UAAY,EAAI,GAC/CgZ,EAAIl0B,UAAUoC,IAAI4uB,MAG1Bmc,EAAYppB,UAAUmsB,YAAc,SAAU2B,EAAQC,GAC7CxzC,oBAAMuzC,IAAsB,KAAXA,GAClBzW,eAAarhB,KAAKhb,SAAU8yC,EAAOxrC,MAAM,MAExC/H,oBAAMwzC,IAAsB,KAAXA,GAClBnlB,YAAU5S,KAAKhb,SAAU+yC,EAAOzrC,MAAM,OAG9C8mC,EAAYppB,UAAU4L,YAAc,WAChCA,cAAY5V,KAAKhb,UAErBouC,EAAYppB,UAAUuO,YAAc,WAChCA,cAAYvY,KAAKhb,UAErBouC,EAAYppB,UAAUguB,cAAgB,SAAUx4B,GAC5CA,EAAE0H,kBAENksB,EAAYppB,UAAUsqB,YAAc,WAChC,MAAQ,kFAAkF5sB,KAAK2sB,UAAQ4D,UAAU7rC,gBAC1G,UAAUsb,KAAK2sB,UAAQ4D,UAAU7rC,gBAE5CgnC,EAAYppB,UAAUosB,iBAAmB,WACrC,GAAIhyC,GAAK4b,KAAKhb,QAAQZ,GAAKgW,GACvB89B,EAAYl4B,KAAKrQ,cAAc,SAAWvL,GAAIA,EAAI4a,OAAS/Q,KAAM,cAAe8N,KAAM,SAC1FiE,MAAKhb,QAAQoL,YAAY8nC,GACzBl4B,KAAKm4B,gBAAkB,GAAIv4B,WACvBQ,OAAQ7P,EAAcyP,KAAM,iBAC5BK,QAAS63B,EACT33B,mBAAqBC,OAAQ,QAC7BC,eAAe,EACfC,eAAe,EACf/C,SAAS,EACTiD,SAAS,EACTI,MAAO,QACPxJ,OAAQwI,KAAKa,YAAcb,KAAKa,YAAc,IAAMb,KAAKhb,QAAQZ,GACjE2N,SAAUF,EAAYmO,KAAMA,KAAK9N,SAAW4O,GAAgBC,IAC5DrP,OAAQsO,KAAKtO,OACbiP,eAAe,EACf0H,UAAYC,EAAG,SAAUC,EAAG,UAC5BpH,UAAWnB,KAAKmB,UAChBC,oBAAqBpB,KAAKoB,oBAC1BH,KAAMjB,KAAKo4B,OAAOr4B,KAAKC,MACvBkB,MAAOlB,KAAKq4B,QAAQt4B,KAAKC,MACzBH,WAAYG,KAAKwqB,aAAazqB,KAAKC,MACnCE,YAAaF,KAAKyqB,cAAc1qB,KAAKC,QAEzCA,KAAKm4B,gBAAgB72B,SAAS,IAAMtB,KAAKhb,QAAQZ,GN5X3B,kBM6XtB4b,KAAKs4B,mBAETlF,EAAYppB,UAAUsuB,gBAAkB,WACpC,GAAIC,GAAYv4B,KAAKjT,aAAawrC,UAAYv4B,KAAKjT,aAAawrC,UAAYv4B,KAAKjT,aAAaC,GAC9FgT,MAAK5I,UAAY,GAAIohC,aACjBnhC,SAAUvR,SAAO,IAAMka,KAAKhb,QAAQZ,GAAKkT,GAAgB0I,KAAKhb,SAC9DyzC,eACIC,QAASH,EACTI,UAAWJ,GAEf7mC,OAAQsO,KAAKtO,OACbyP,UAAWnB,KAAKmB,UAChBy3B,UAAW54B,KAAK64B,YAAY94B,KAAKC,MACjC84B,SAAU94B,KAAK+4B,WAAWh5B,KAAKC,MAC/Bg5B,UAAWh5B,KAAKi5B,SAASl5B,KAAKC,MAC9Bk5B,SAAUl5B,KAAKm5B,WAAWp5B,KAAKC,MAC/Bub,SAAUvb,KAAKo5B,WAAWr5B,KAAKC,MAC/Bq5B,QAASr5B,KAAKs5B,gBAAgBv5B,KAAKC,MACnCu5B,QAASv5B,KAAKw5B,gBAAgBz5B,KAAKC,MACnCy5B,WAAYz5B,KAAK05B,eAAeD,WAChCE,YAAa35B,KAAK05B,eAAeC,YACjCC,YAAa55B,KAAK05B,eAAeE,YACjCC,kBAAmB75B,KAAK05B,eAAeG,kBACvCC,gBAAiB95B,KAAK05B,eAAeI,gBACrCC,kBAAmB/5B,KAAKg6B,iBAAiBj6B,KAAKC,QAElDA,KAAK5I,UAAUkK,SAAS,IAAMtB,KAAKhb,QAAQZ,GAAKgW,KAEpDg5B,EAAYppB,UAAUgwB,iBAAmB,SAAU9wC,GAC/C8W,KAAKnS,QAAQ,mBAAoB3E,IAErCkqC,EAAYppB,UAAUiwB,eAAiB,WACnCj6B,KAAK5I,UAAUqiC,WAAaz5B,KAAK05B,eAAeD,WAChDz5B,KAAK5I,UAAUuiC,YAAc35B,KAAK05B,eAAeC,YACjD35B,KAAK5I,UAAUwiC,YAAc55B,KAAK05B,eAAeE,YACjD55B,KAAK5I,UAAUyiC,kBAAoB75B,KAAK05B,eAAeG,kBACvD75B,KAAK5I,UAAU0iC,gBAAkB95B,KAAK05B,eAAeI,gBACrD95B,KAAK5I,UAAU2K,YAEnBqxB,EAAYppB,UAAUwgB,aAAe,SAAUthC,GAC3C,GAAIqE,IACAwJ,OAAQ7N,EAAK6N,OAAQoL,UAAW,SAAUC,YAAapC,KAAKm4B,gBAEhEn4B,MAAKnS,QAAQ,kBAAmBN,EAAW,SAAU8U,GACjDnZ,EAAK6N,OAASsL,EAAUtL,UAGhCq8B,EAAYppB,UAAUygB,cAAgB,SAAUvhC,GAC5C,GAAIqE,IACAwJ,OAAQ7N,EAAK6N,OAAQoL,UAAW,SAAUC,YAAapC,KAAKm4B,gBAEhEn4B,MAAKnS,QAAQ,mBAAoBN,EAAW,SAAU8U,GAClDnZ,EAAK6N,OAASsL,EAAUtL,UAGhCq8B,EAAYppB,UAAUouB,OAAS,WAC3Bp4B,KAAK0zB,UAAW,EAChB1zB,KAAKm4B,gBAAgBnzC,QAAQwf,OAC7B,IAAItb,IACAkZ,YAAapC,KAAKm4B,gBAAiBh2B,UAAW,SAC9Cnd,QAASgb,KAAKm4B,gBAAgBnzC,QAElCgb,MAAKnS,QAAQ,YAAa3E,IAE9BkqC,EAAYppB,UAAUquB,QAAU,WAC5Br4B,KAAK0zB,UAAW,EAChB1zB,KAAK5I,UAAU8iC,UACf,IAAIhxC,IACAkZ,YAAapC,KAAKm4B,gBAAiBh2B,UAAW,SAC9Cnd,QAASgb,KAAKm4B,gBAAgBnzC,QAElCgb,MAAKnS,QAAQ,aAAc3E,IAG/BkqC,EAAYppB,UAAU6uB,YAAc,SAAU3vC,GAC1C,GAAIhC,GAAS,MACb,IAA+B,IAA1B8Y,KAAK4D,UAAUxe,OAChB,IAAK,GAAID,GAAI,EAAGA,EAAI6a,KAAK4D,UAAUxe,OAAQD,IACnC+D,EAAKixC,SAASlsC,OAAS+R,KAAK4D,UAAUze,GAAG0G,KAAKoC,OAC9C/G,EAAS8Y,KAAK4D,UAAUze,GAAG+B,OAC3B8Y,KAAK4D,UAAUL,OAAOpe,EAAG,GACzBA,EAAI6a,KAAK4D,UAAUxe,OAI/B,IAAIpB,GAAOmY,KAAKC,UAAUjY,WAAS6b,KAAKpb,OAAOob,KAAKpb,OAAOQ,OAAS,GAAI4a,KAAKxZ,UAC7E0C,GAAKkxC,iBAAoB31C,KAAQub,KAAKvb,OAAUyC,OAAUA,IAAYlD,KAAQA,IAAUq2C,SAAYnxC,EAAKixC,SAASlsC,MAClH,IAEIlB,IACAC,IAHYgT,KAAKjT,aAAawrC,UAAYv4B,KAAKjT,aAAawrC,UAAYv4B,KAAKjT,aAAaC,IAI1F+O,KAAM,OACNC,MAAM,EACNC,SAAU,KACVC,YAAa,KACblY,KAAMmY,KAAKC,UAAUlT,EAAKkxC,gBAC1B/9B,UAAW,KACXC,UAAW,KACXC,WAAY,KAEhByD,MAAKs6B,iBAAoBpzC,OAAQ,SAAU6F,aAAcA,EAAcgK,QAAQ,GAC/EiJ,KAAKnS,QAAQ,aAAcmS,KAAKs6B,gBAAiB,SAAUA,GACvDpxC,EAAKkxC,eAAiBj+B,KAAKU,MAAM1Y,WAAS,OAAQm2C,EAAgBvtC,eAClE7D,EAAK6N,OAASujC,EAAgBvjC,MAE9B,IAAIxJ,IACAwJ,QAAQ,EACRwjC,YAAarxC,EAAKsxC,eAE8C,mBAAzDr2C,YAAS,aAAcm2C,EAAgBvtC,gBAC9C5I,WAAS,aAAcm2C,EAAgBvtC,cAAcQ,GACjDpJ,WAAS,SAAUoJ,KACnBrE,EAAK6N,OAAS5S,WAAS,SAAUoJ,QAKjD6lC,EAAYppB,UAAU+uB,WAAa,WAC/B/4B,KAAKy6B,qBAAsBtlC,MAAO,IACW,IAAzC6K,KAAK5I,UAAUsjC,eAAet1C,QAC9B4a,KAAKm4B,gBAAgBr6B,QAI7Bs1B,EAAYppB,UAAUivB,SAAW,SAAU/vC,GACvC,GAAIlF,GAAOmY,KAAKC,UAAUjY,WAAS6b,KAAKpb,OAAOob,KAAKpb,OAAOQ,OAAS,GAAI4a,KAAKxZ,UAC7E0C,GAAKkxC,iBAAoB31C,KAAQub,KAAKvb,OAAUyC,OAAU,WAAclD,KAAQA,KAGpFovC,EAAYppB,UAAUmvB,WAAa,WAC3Bn5B,KAAK0zB,UACL1zB,KAAKm4B,gBAAgBr6B,QAI7Bs1B,EAAYppB,UAAUovB,WAAa,SAAUlwC,GACzC,GAA8B,IAA1BA,EAAKyxC,UAAUv1C,OAAnB,CAGA4a,KAAK4zB,eAAiB1qC,EAAKyxC,UAAUv1C,OACrC4a,KAAK6zB,cAAgB,CAErB,IAAI75B,GAAU1Q,EAAc0W,KAC5B,KAAKlG,GAAgBE,GAGjB,MAFA9Q,GAAK6N,QAAS,MACd1L,IAAmB2U,KAAMhG,EAASM,GAGtC0F,MAAKm4B,gBAAgBn2B,SAGzBoxB,EAAYppB,UAAUywB,oBAAsB,SAAUvxC,GAClD8W,KAAK6zB,cAAgB7zB,KAAK6zB,cAAgB3qC,EAAKiM,MAC3C6K,KAAK05B,eAAekB,WAAc56B,KAAK4zB,iBAAmB5zB,KAAK6zB,eAC/D7zB,KAAKm4B,gBAAgBr6B,QAK7Bs1B,EAAYppB,UAAUsvB,gBAAkB,SAAUtvC,GAC9C,GAAId,IAAShC,OAAQ,SAAU4J,OAAQ9G,EACvCgW,MAAKnS,QAAQ,UAAW3E,GACxB8W,KAAK3W,UAAYlF,WAAS6b,KAAKpb,OAAOob,KAAKpb,OAAOQ,OAAS,GAAI4a,KAAKxZ,WACpE+D,GAAKyV,KAAM1B,GAAoB0B,KAAKvb,MACpCub,KAAKy6B,qBAAsBtlC,MAAO,IACsC,kBAA7DhR,YAAS,YAAa6b,KAAKs6B,gBAAgBvtC,eAClD5I,WAAS,YAAa6b,KAAKs6B,gBAAgBvtC,iBAKnDqmC,EAAYppB,UAAUwvB,gBAAkB,SAAUxvC,GAE9C,GAAI6wC,GAAW12C,WAAS,WAAY6F,GAChC8wC,EAAa32C,WAAS,aAAc02C,EACrB,MAAfC,GACA5pC,WAAS,aAAc4pC,EAAY9wC,EAEvC,IAAId,IAAShC,OAAQ,SAAUmJ,MAAOrG,EACtCgW,MAAKnS,QAAQ,UAAW3E,GACiB,MAArC/E,WAAS,aAAc02C,KACvB76B,KAAKkD,WAAW5d,KAAKnB,WAAS,OAAQ6F,IACjCgW,KAAKoD,eACN3E,GAAgBuB,KAAM,gBAG0C,kBAA7D7b,YAAS,YAAa6b,KAAKs6B,gBAAgBvtC,eAClD5I,WAAS,YAAa6b,KAAKs6B,gBAAgBvtC,iBAGnDqmC,EAAYppB,UAAU+wB,aAAe,WACjCnoC,EAAYoN,KAAMA,KAAKvb,OAE3B2uC,EAAYppB,UAAU+rB,kBAAoB,WACtC/1B,KAAK8e,GAAGriB,GAAsBuD,KAAK4V,YAAa5V,MAChDA,KAAK8e,GAAGhiB,GAAqBkD,KAAKuY,YAAavY,MAC/CA,KAAK8e,GAAG3rB,GAAmB6M,KAAK+6B,aAAc/6B,MAC9CA,KAAK8e,GAAGH,GAAoB3e,KAAK4e,cAAe5e,MAChDA,KAAK8e,GAAGtb,GAAmBxD,KAAKy6B,oBAAqBz6B,MACrD2f,eAAat3B,IAAI2X,KAAKhb,QAAS,cAAegb,KAAKg4B,cAAeh4B,OAEtEozB,EAAYppB,UAAUgxB,qBAAuB,WACrCh7B,KAAK0d,cAGT1d,KAAK2d,IAAIlhB,GAAsBuD,KAAK4V,aACpC5V,KAAK2d,IAAI7gB,GAAqBkD,KAAKuY,aACnCvY,KAAK2d,IAAIxqB,GAAmB6M,KAAK+6B,cACjC/6B,KAAK2d,IAAIgB,GAAoB3e,KAAK4e,eAClC5e,KAAK2d,IAAIna,GAAmBxD,KAAKy6B,qBACjC9a,eAAaj3B,OAAOsX,KAAKhb,QAAS,cAAegb,KAAKg4B,iBAE1D5E,EAAYppB,UAAU4U,cAAgB,WAC9Br6B,oBAAMyb,KAAKzY,gBACXyY,KAAK3W,UAAYlF,WAAS6b,KAAKpb,OAAOob,KAAKpb,OAAOQ,OAAS,GAAI4a,KAAKxZ,aAG5E4sC,EAAYppB,UAAUuU,cAAgB,WAClCve,KAAKmX,eACLnX,KAAKjZ,OAAOu3B,QAEhB8U,EAAYppB,UAAUwV,iBAAmB,SAAUhgB,GAE/C,OAAQA,EAAEtY,QACN,IAAK,OACDsY,EAAE0H,iBACFlH,KAAK3W,UAAYC,EAAc0W,OAC1BnG,GAAiBmG,KAAK3W,SAAS,IAIhCwK,GAAamM,KAAM,aAHnB3U,GAAmB2U,KAAMA,KAAK3W,SAAS,GAAI4Q,GAK/C,MACJ,KAAK,KACDuF,EAAE0H,iBACFhc,EAAQ8U,KACR,MAEJ,KAAK,aACDR,EAAE0H,iBACFlH,KAAK01B,SAAW,UAChB11B,KAAKxb,eAAgBiG,KAAM,YAAa,GACxCmrB,cAAY5V,KAAKhb,SACjBwF,EAAawV,KAAM,UACnB,MAEJ,KAAK,aACDR,EAAE0H,iBACFlH,KAAK01B,SAAW,aAChB11B,KAAKxb,eAAgBiG,KAAM,eAAgB,GAC3CmrB,cAAY5V,KAAKhb,SACjBwF,EAAawV,KAAM,aACnB,MACJ,KAAK,QACDR,EAAE0H,kBACmD,GAAjDlH,KAAKu1B,gBAAgBpnC,MAAM9B,QAAQ,WACvBvG,SAAO,IAAMka,KAAKhb,QAAQZ,GAAKgW,GAAe4F,KAAKhb,SACrDqV,UAK1B+4B,EAAYppB,UAAUoO,WAAa,WAC/BuH,eAAat3B,IAAI4O,OAAQ,SAAU+I,KAAKue,cAAeve,MACvDA,KAAKqf,eAAiB,GAAIC,kBAAetf,KAAKhb,SAC1Cu6B,UAAWvf,KAAKwf,iBAAiBzf,KAAKC,MACtC8S,WAAY9S,KAAK8S,WACjB7f,UAAW,aAGnBmgC,EAAYppB,UAAUgM,aAAe,WACjC2J,eAAaj3B,OAAOuO,OAAQ,SAAU+I,KAAKue,eAC3Cve,KAAKqf,eAAepP,WAExBmjB,EAAYppB,UAAUixB,QAAU,WAC5Bj7B,KAAKxb,eAAgB2D,mBAAqB,GAC1C6X,KAAKk0B,aACLl0B,KAAKjZ,OAAOsM,IAAwBC,aAAc0M,KAAKpb,OAAO,KAC9D2F,GAAKyV,KAAOA,KAAKvb,OAASub,KAAKjN,aAAgBI,GAAoBD,GAAoB8M,KAAKvb,OAYhG2uC,EAAYppB,UAAU8T,kBAAoB,SAAUoB,EAASgc,GAEzD,IAAK,GADD/yB,GACK6W,EAAK,EAAGC,EAAKtmB,OAAOD,KAAKwmB,GAAUF,EAAKC,EAAG75B,OAAQ45B,IAExD,OADWC,EAAGD,IAEV,IAAK,eACDhf,KAAKm7B,oBAAoBjc,EACzB,MACJ,KAAK,mBACDlf,KAAKnI,iBAAmBqnB,EAAQrnB,iBAChCmI,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,SAAU8sB,QAASA,EAASgc,QAASA,GAChF,MACJ,KAAK,sBACGl7B,KAAKmf,oBACLvM,YAAU5S,KAAKhb,SNjpBb,mBMopBEgb,KAAK7X,cAAc/C,OAAS,GAC5B4a,KAAKxb,eAAgB2D,cAAe6X,KAAK7X,cAAcuvB,MAAM1X,KAAK7X,cAAc/C,OAAS,KAAM,GAEnGi8B,eAAarhB,KAAKhb,SNvpBhB,mBMypBNgb,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,SAAU8sB,QAASA,EAASgc,QAASA,GAChF,MACJ,KAAK,WACDl7B,KAAKm2B,YAAY+E,EAAQnpC,SAAUmtB,EAAQntB,UAC3CiO,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,SAAU8sB,QAASA,EAASgc,QAASA,GAChF,MACJ,KAAK,sBACDl7B,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,cAAe8sB,QAASA,EAASgc,QAASA,GACrF,MACJ,KAAK,YACDl7B,KAAKmB,UAAY+d,EAAQ/d,UACzBnB,KAAK9U,SACL,MACJ,KAAK,gBACD8U,KAAKjD,cAAgBmiB,EAAQniB,cAC7BiD,KAAK9U,SACL,MACJ,KAAK,SACDid,EAAU5jB,oBAAM26B,EAAQ/W,QAAuC+W,EAAQ/W,OAArCisB,aAAWlV,EAAQ/W,QACrDgsB,oBAAQn0B,KAAKhb,SAAWmjB,OAAUA,IAClCnI,KAAKmX,eACLnX,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,SAAU8sB,QAASA,EAASgc,QAASA,GAChF,MACJ,KAAK,SACI32C,oBAAM26B,EAAQ/d,YACfnB,KAAKxb,eAAgB2c,UAAW+d,EAAQ/d,YAAa,GAEzDnB,KAAKo7B,qBAAqBlc,EAC1B,MACJ,KAAK,yBACDlf,KAAK43B,iBACL53B,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,iBAAkB8sB,QAASA,EAASgc,QAASA,GACxF,MACJ,KAAK,OACDl7B,KAAKi7B,SACL,MACJ,KAAK,iBACIxV,oBAAkBvG,EAAQ/1B,eAAeu8B,sBAC1C1lB,KAAKxb,eAAgB2E,gBAAkBu8B,oBAAqBxG,EAAQ/1B,eAAeu8B,uBAAyB,GAE5GD,oBAAkBvG,EAAQ/1B,eAAeK,aACzCwW,KAAKxb,eAAgB2E,gBAAkBK,WAAY01B,EAAQ/1B,eAAeK,cAAgB,GAE1Fi8B,oBAAkBvG,EAAQ/1B,eAAeC,aACzC4W,KAAKxb,eAAgB2E,gBAAkBC,WAAY81B,EAAQ/1B,eAAeC,cAAgB,GAE9F4W,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,gBAAiB8sB,QAASA,EAASgc,QAASA,GACvF,MACJ,KAAK,gBACiB,YAAdl7B,KAAKvV,KACLuV,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,cAAe8sB,QAASA,EAASgc,QAASA,IAElE,eAAdl7B,KAAKvV,MACVuV,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,iBAAkB8sB,QAASA,EAASgc,QAASA,GAE5F,MACJ,KAAK,oBAGL,IAAK,kBACDl7B,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,SAAU8sB,QAASA,EAASgc,QAASA,GAChF,MACJ,KAAK,gBACDl7B,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,iBAAkB8sB,QAASA,EAASgc,QAASA,GACxF,MACJ,KAAK,kBACDl7B,KAAKmX,eACLnX,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,UAAW8sB,QAASA,EAASgc,QAASA,GACjF,MACJ,KAAK,iBACDl7B,KAAKi6B,gBACL,MACJ,KAAK,OACoB,YAAjB/a,EAAQz0B,KACRuV,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,cAAe8sB,QAASA,EAASgc,QAASA,IAE/D,eAAjBhc,EAAQz0B,MACbuV,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,iBAAkB8sB,QAASA,EAASgc,QAASA,GAE5F,MACJ,KAAK,QACD/G,oBAAQn0B,KAAKhb,SAAWgc,MAAUzc,oBAAM26B,EAAQle,OAAqCke,EAAQle,MAApCozB,aAAWlV,EAAQle,SAC5EhB,KAAKjZ,OAAO82B,IAAuBzrB,OAAQ,SAAU8sB,QAASA,EAASgc,QAASA,GAChF,MACJ,KAAK,YACDhwC,EAAQ8U,MACRA,KAAKjZ,OAAOsL,MACZ,MACJ,KAAK,SACDnH,EAAQ8U,MACRA,KAAKjZ,OAAOsL,OACM,YAAd2N,KAAKvV,MACLuV,KAAKjZ,OAAOoL,MAEhB,MACJ,KAAK,cACG6N,KAAKm4B,kBACLn4B,KAAKm4B,gBAAgB3gC,OAAS0nB,EAAQre,aAEtCb,KAAKtC,YACLsC,KAAKtC,UAAUlG,OAAS0nB,EAAQre,aAEhCb,KAAK4B,eACL5B,KAAK4B,aAAapK,OAAS0nB,EAAQre,aAEnCb,KAAKkI,YACLlI,KAAKkI,UAAU1Q,OAAS0nB,EAAQre,eAOpDuyB,EAAYppB,UAAUmxB,oBAAsB,SAAUjc,GAC7CuG,oBAAkBvG,EAAQnyB,aAAaC,MACxCgT,KAAKxb,eAAgBuI,cAAgBC,IAAKkyB,EAAQnyB,aAAaC,OAAS,GAEvEy4B,oBAAkBvG,EAAQnyB,aAAawrC,YACxCv4B,KAAKxb,eAAgBuI,cAAgBwrC,UAAWrZ,EAAQnyB,aAAawrC,aAAe,GAEnF9S,oBAAkBvG,EAAQnyB,aAAa8R,cACxCmB,KAAKxb,eAAgBuI,cAAgB8R,YAAaqgB,EAAQnyB,aAAa8R,eAAiB,GAEvF4mB,oBAAkBvG,EAAQnyB,aAAaJ,cACxCqT,KAAKxb,eAAgBuI,cAAgBJ,YAAauyB,EAAQnyB,aAAaJ,eAAiB,GAE5FqT,KAAKxb,eAAgBC,KAAM,MAAO,GAClCub,KAAKxb,eAAgB2D,mBAAqB,GAC1C0iB,EAAOb,UAAU9e,QAAQysB,KAAK3X,OAGlCozB,EAAYppB,UAAUoxB,qBAAuB,SAAUlc,GACnDlf,KAAK5I,UAAU1F,OAASwtB,EAAQxtB,OAChCmZ,EAAOb,UAAU9e,QAAQysB,KAAK3X,OAOlCozB,EAAYppB,UAAUiG,QAAU,WACxBjQ,KAAK0d,cAGJ1d,KAAKq7B,YACNr7B,KAAKjZ,OAAO4iC,OAEhB3pB,KAAK5I,UAAU6Y,UACfjQ,KAAK5I,UAAY,KACjB4I,KAAKm4B,gBAAgBloB,UACrBjQ,KAAKm4B,gBAAkB,KACvBn4B,KAAKg2B,YAAY/lB,UACjBjQ,KAAKg2B,YAAc,KACfh2B,KAAKtC,YACLsC,KAAKtC,UAAUuS,UACfjQ,KAAKtC,UAAY,MAEjBsC,KAAKkI,YACLlI,KAAKkI,UAAU+H,UACfjQ,KAAKkI,UAAY,MAEjBlI,KAAK4B,eACL5B,KAAK4B,aAAaqO,UAClBjQ,KAAK4B,aAAe,MAExB5B,KAAKhb,QAAQo1B,gBAAgB,SAC7Bpa,KAAKhb,QAAQo1B,gBAAgB,YAC7Bpa,KAAKg7B,uBACLh7B,KAAKgW,eACLhW,KAAKm2B,YAAYn2B,KAAKjO,SAAU,MAChCsvB,eAAarhB,KAAKhb,UAAWs2C,GN/zBjB,cAJM,mBMo0BlBt7B,KAAKhb,QAAQsL,UAAY,GACzB0P,KAAKomB,wBAA0B,KAC/BpmB,KAAK5Y,eAAiB,KACtB4Y,KAAKoX,qBAAuB,KAC5BpX,KAAKpJ,mBAAqB,KAC1BoJ,KAAK0V,YAAc,KACnB7K,EAAOb,UAAUiG,QAAQ0H,KAAK3X,MAC9BA,KAAKlK,qBAAuB,KAC5BkK,KAAKu7B,cAAgB,KACrBv7B,KAAKw7B,kBAAoB,KACzBx7B,KAAK3V,qBAAuB,KAC5B2V,KAAK9V,kBAAoB,KACzB8V,KAAKlY,oBAAsB,OAS/BsrC,EAAYppB,UAAUvP,aAAe,SAAUxM,GAC3C+R,KAAKjZ,OAAOg3B,IAAqB72B,OAAQ,gBAEzC,IAAI8S,IAAW1Q,EAAc0W,MAC7BA,MAAK3W,SAAW2Q,EACZ/L,EACI,gBAAeyZ,KAAKzZ,GASpB4F,GAAamM,KAAM,SAPfhW,MAAO,KACPqG,OACIyD,KAAM,MACNC,QAASxD,EAAcyP,KAAM,sBAAsB1S,QAAQ,MAAO,IAAMW,EAAO,KAC/E+F,WAAY,QAMf6F,GAAiBG,EAAQ,IAI1BS,GAAauF,KAAM/R,GAHnB5C,GAAmB2U,KAAMhG,EAAQ,GAAIC,IAQ7CF,GAAgBiG,OAaxBozB,EAAYppB,UAAU2a,YAAc,SAAUt/B,GAC1C2a,KAAKjZ,OAAOg3B,IAAqB72B,OAAQ,cAAe7B,IAAKA,KAQjE+tC,EAAYppB,UAAUyxB,oBAAsB,SAAUttC,GAC7C5J,oBAAM4J,IACP6R,KAAKu7B,cAAcpP,YAAYh+B,GAAO,IAa9CilC,EAAYppB,UAAU4a,cAAgB,SAAUv/B,GAC5C2a,KAAKjZ,OAAOg3B,IAAqB72B,OAAQ,gBAAiB7B,IAAKA,KAQnE+tC,EAAYppB,UAAU0xB,mBAAqB,SAAUvtC,GAC5C5J,oBAAM4J,IACP6R,KAAKu7B,cAAcpP,YAAYh+B,GAAO,IAS9CilC,EAAYppB,UAAU2xB,iBAAmB,SAAUxtC,GAC1C5J,oBAAM4J,IAAW5J,oBAAMyb,KAAKw7B,kBAAkBpR,cAC/CpqB,KAAKw7B,kBAAkBjP,YAAYp+B,IAS3CilC,EAAYppB,UAAU4xB,iBAAmB,SAAUhvC,GAC/C,MAAIoT,MAAKw7B,kBACEx7B,KAAKw7B,kBAAkBnP,aAAaz/B,IAGnC,GAShBwmC,EAAYppB,UAAU6xB,oBAAsB,SAAUjvC,GAClD,MAAIoT,MAAKu7B,cACEv7B,KAAKu7B,cAAclP,aAAaz/B,IAG/B,GAYhBwmC,EAAYppB,UAAU8xB,YAAc,SAAUjhC,GAC1CmF,KAAKnF,WAAaA,GAA0B,KAC5CmF,KAAKxb,eAAgB2D,mBAAqB,GAC1C6X,KAAKjZ,OAAOyW,OACZwC,KAAK/X,YAAa,EACuC,KAArD+X,KAAKlY,oBAAoBC,UAAU/C,QAAQgD,QAC3CgY,KAAKlY,oBAAoBC,UAAU/C,QAAQgD,MAAQ,IAEvD8B,GAAOkW,KLngCQ,eK2gCnBozB,EAAYppB,UAAU+xB,iBAAmB,WAErC,MADA/7B,MAAKjZ,OLp6BoB,4BKq6BlBiZ,KAAK3W,UAWhB+pC,EAAYppB,UAAU6a,SAAW,SAAUzgC,GACvC4b,KAAKjZ,OAAOg3B,IAAqB72B,OAAQ,WAAY9C,GAAIA,KAO7DgvC,EAAYppB,UAAUgyB,aAAe,WACjC9wC,EAAQ8U,OAOZozB,EAAYppB,UAAUiyB,cAAgB,WAClCj8B,KAAKmX,eACLnX,KAAKjZ,OL5gCc,sBKmhCvBqsC,EAAYppB,UAAUpD,UAAY,WAC9B5G,KAAKjZ,OAAOg3B,IAAqB72B,OAAQ,eAO7CksC,EAAYppB,UAAUmT,eAAiB,WACnCnd,KAAKjZ,OAAOg3B,IAAqB72B,OAAQ,oBAe7CksC,EAAYppB,UAAU8a,WAAa,SAAU1gC,EAAI6J,GAC7C+R,KAAKjZ,OAAOg3B,IAAqB72B,OAAQ,aAAc9C,GAAIA,EAAI8W,QAASjN,KAO5EmlC,EAAYppB,UAAUkyB,YAAc,WAEhC,GAAIliC,IAAW1Q,EAAc0W,MAC7BA,MAAK3W,SAAW2Q,EAChBE,GAAW8F,OAQfozB,EAAYppB,UAAU8rB,OAAS,SAAUqG,GACjCA,EACAn8B,KAAKm2B,YAAY,KAAMmF,IAGvBt7B,KAAKm2B,YAAYmF,GAAS,MAE1Bt7B,KAAK5I,YACL4I,KAAKm4B,gBAAgBh3B,UAAYg7B,EACjCn8B,KAAK5I,UAAU+J,UAAYg7B,GAGnC,IAAIrI,EA0JJ,OAzJA5pB,KACIkyB,aAAYxxB,KACbwoB,EAAYppB,UAAW,mBAAgB,IAC1CE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,uBAAoB,IAC9CE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,0BAAuB,IACjDE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,yBAAsB,IAChDE,IACIkyB,aAAYpwB,KACbonB,EAAYppB,UAAW,0BAAuB,IACjDE,IACIa,WAAS,KACVqoB,EAAYppB,UAAW,eAAY,IACtCE,IACIkyB,aAAYxwB,KACbwnB,EAAYppB,UAAW,0BAAuB,IACjDE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,0BAAuB,IACjDE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,wBAAqB,IAC/CE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,2BAAwB,IAClDE,IACIa,WAAS,UACVqoB,EAAYppB,UAAW,aAAU,IACpCE,IACIa,WAAS,eACVqoB,EAAYppB,UAAW,WAAQ,IAClCE,IACIkyB,aAAYnwB,KACbmnB,EAAYppB,UAAW,6BAA0B,IACpDE,IACIa,WAAS,MACVqoB,EAAYppB,UAAW,WAAQ,IAClCE,IACIa,WAAS,OACVqoB,EAAYppB,UAAW,kBAAe,IACzCE,IACIkyB,aAAYjxB,KACbioB,EAAYppB,UAAW,qBAAkB,IAC5CE,IACIa,cACDqoB,EAAYppB,UAAW,oBAAiB,IAC3CE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,wBAAqB,IAC/CE,IACIa,WAAS,OACVqoB,EAAYppB,UAAW,oBAAiB,IAC3CE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,sBAAmB,IAC7CE,IACIa,YAAS,IACVqoB,EAAYppB,UAAW,oBAAiB,IAC3CE,IACIa,WAAS,cACVqoB,EAAYppB,UAAW,gBAAa,IACvCE,IACIa,WAAS,SACVqoB,EAAYppB,UAAW,aAAU,IACpCE,IACIkyB,aAAYlxB,KACbkoB,EAAYppB,UAAW,sBAAmB,IAC7CE,IACIkyB,aAAYlwB,KACbknB,EAAYppB,UAAW,qBAAkB,IAC5CE,IACIa,WAAS,SACVqoB,EAAYppB,UAAW,YAAS,IACnCE,IACImyB,WACDjJ,EAAYppB,UAAW,eAAY,IACtCE,IACImyB,WACDjJ,EAAYppB,UAAW,eAAY,IACtCE,IACImyB,WACDjJ,EAAYppB,UAAW,qBAAkB,IAC5CE,IACImyB,WACDjJ,EAAYppB,UAAW,sBAAmB,IAC7CE,IACImyB,WACDjJ,EAAYppB,UAAW,uBAAoB,IAC9CE,IACImyB,WACDjJ,EAAYppB,UAAW,sBAAmB,IAC7CE,IACImyB,WACDjJ,EAAYppB,UAAW,iBAAc,IACxCE,IACImyB,WACDjJ,EAAYppB,UAAW,cAAW,IACrCE,IACImyB,WACDjJ,EAAYppB,UAAW,gBAAa,IACvCE,IACImyB,WACDjJ,EAAYppB,UAAW,oBAAiB,IAC3CE,IACImyB,WACDjJ,EAAYppB,UAAW,mBAAgB,IAC1CE,IACImyB,WACDjJ,EAAYppB,UAAW,mBAAgB,IAC1CE,IACImyB,WACDjJ,EAAYppB,UAAW,kBAAe,IACzCE,IACImyB,WACDjJ,EAAYppB,UAAW,oBAAiB,IAC3CE,IACImyB,WACDjJ,EAAYppB,UAAW,iBAAc,IACxCE,IACImyB,WACDjJ,EAAYppB,UAAW,gBAAa,IACvCE,IACImyB,WACDjJ,EAAYppB,UAAW,eAAY,IACtCE,IACImyB,WACDjJ,EAAYppB,UAAW,cAAW,IACrCE,IACImyB,WACDjJ,EAAYppB,UAAW,iBAAc,IACxCE,IACImyB,WACDjJ,EAAYppB,UAAW,gBAAa,IACvCE,IACImyB,WACDjJ,EAAYppB,UAAW,cAAW,IACrCE,IACImyB,WACDjJ,EAAYppB,UAAW,mBAAgB,IAC1CE,IACImyB,WACDjJ,EAAYppB,UAAW,oBAAiB,IAC3CE,IACImyB,WACDjJ,EAAYppB,UAAW,uBAAoB,IAC9CopB,EAAcU,EAAgB5pB,IAC1BoyB,yBACDlJ,IAELmJ,aCvwCEC,GAAyB,WAQzB,QAASA,GAAQn2C,GACb2Z,KAAKy8B,SAAW,SAAU,SAAU,WAAY,MAAO,OAAQ,SAC/Dz8B,KAAK08B,QAAU,SAAU,SAAU,WAAY,MAAO,QACtD18B,KAAK28B,UAAY,SAAU,WAAY,MAAO,OAAQ,WACtD38B,KAAK48B,WAAa,YAAa,SAAU,SAAU,WACnD58B,KAAK3Z,OAASA,EACd2Z,KAAKyV,SACLzV,KAAK6S,mBA0dT,MAxdA2pB,GAAQxyB,UAAUyL,OAAS,WACvB,GAAIiD,GAAQ1Y,IACZA,MAAK7R,MAAQ6R,KAAK68B,gBAAgB78B,KAAK88B,SAAS98B,KAAK3Z,OAAOkvC,gBAAgBpnC,MAAMiY,IAAI,SAAUxZ,GAAQ,MAAOA,GAAKmgC,UACpH,IAAIx/B,IAAcY,MAAO6R,KAAK7R,MAC9B6R,MAAK3Z,OAAOwH,QAAQ,gBAAiBN,EAAW,SAAUwvC,GACtDrkB,EAAMvqB,MAAQ4uC,EAAkB5uC,MAChCuqB,EAAMskB,WAAa,GAAIC,YACnB9uC,MAAOuqB,EAAMvqB,MACb+uC,QAASxkB,EAAMykB,qBAAqBp9B,KAAK2Y,GACzC0kB,aAAc,QACdC,QAAS3kB,EAAM4kB,UAAUv9B,KAAK2Y,GAC9BtX,oBAAqBsX,EAAMryB,OAAO+a,oBAClCD,UAAWuX,EAAMryB,OAAO8a,YAE5BuX,EAAMskB,WAAW37B,kBAAmB,EACpCqX,EAAMskB,WAAW17B,SAAS,IAAMoX,EAAMryB,OAAOrB,QAAQZ,GP1CzC,eO6CpBo4C,EAAQxyB,UAAUqiB,aAAe,SAAUz/B,GAEvC,IAAK,GADD0/B,GAAStsB,KAAKu9B,MAAM3wC,GACfzH,EAAI,EAAGA,EAAI6a,KAAK7R,MAAM/I,OAAQD,IACnC,GAAI6a,KAAK7R,MAAMhJ,GAAGf,KAAOkoC,EACrB,MAAOnnC,EAGf,QAAQ,GAEZq3C,EAAQxyB,UAAU8yB,SAAW,SAAU3uC,GACnC,GAAIqvC,GAAYrvC,EAAMupB,OAItB,OAHI1X,MAAK3Z,OAAOg6B,UAAYrgB,KAAK3Z,OAAO84B,qBACpCqe,EAAUl4C,KAAK,aAEZk4C,GAGXhB,EAAQxyB,UAAUszB,UAAY,SAAUp0C,GACpC,GAAIwvB,GAAQ1Y,IACZ,KAAIzb,oBAAM2E,EAAK0D,OAAU1D,EAAK0D,KAAKxI,GAAnC,CAGA,GAEI4V,GAFAyjC,EAAOv0C,EAAK0D,KAAKxI,GAAGkiB,QAAQtG,KAAK3Z,OAAOrB,QAAQZ,GAAK,QAAQgB,OAGpD,aAATq4C,GAA+B,cAATA,GAAiC,WAATA,GAC9CzjC,GAAW1Q,EAAc0W,KAAK3Z,SAC9B2Z,KAAK3Z,OAAOgD,SAAW2Q,IAGvBgG,KAAK3Z,OAAOU,ONME,oBMLdiT,EAAUgG,KAAK3Z,OAAOgD,SAE1B,IAAIkE,IAAcwJ,QAAQ,EAAOvJ,YAAawM,EAASpN,KAAM1D,EAAK0D,KAClEoT,MAAK3Z,OAAOwH,QAAQ,eAAgBN,EAAW,SAAUmwC,GACrD,GAAItQ,GACA51B,CACJ,KAAKkmC,EAAiB3mC,OAClB,OAAQ0mC,GACJ,IAAK,UACDjmC,EAAS5O,UAAQM,EAAKk3B,cAAc5oB,OAAQ,qBAC9BA,EAAOvR,UAAUC,SAAS,qBACpCgD,EAAK6N,QAAS,EAElB,MACJ,KAAK,YACDgD,GAAgB2e,EAAMryB,OACtB,MACJ,KAAK,MACDsF,EAAS+sB,EAAMryB,OACf,MACJ,KAAK,OACDoF,EAAUitB,EAAMryB,OAChB,MACJ,KAAK,SACD,IAAK,GAAIlB,GAAI,EAAGA,EAAI6U,EAAQ5U,OAAQD,IAChC,IAAK8T,GAAce,EAAQ7U,IAEvB,WADAkG,IAAmBqtB,EAAMryB,OAAQ2T,EAAQ7U,GAAI+T,GAIrDrF,IAAa6kB,EAAMryB,OAAQ,SAC3B,MACJ,KAAK,UACDqyB,EAAMryB,OAAOU,OAAO43B,OACpByO,EAAS1U,EAAMryB,OAAO8B,cACY,mBAA9BuwB,EAAMryB,OAAOkB,eACb6lC,MAEJzxB,GAAW+c,EAAMryB,OAAQ+mC,EAAQ1U,EAAMryB,OAAO5B,KAAM,UACpD,MACJ,KAAK,QACDi0B,EAAMryB,OAAOoN,WAAa,GAC1BF,EAAamlB,EAAMryB,OACnB,MACJ,KAAK,UACD6E,EAAQwtB,EAAMryB,OACd,MACJ,KAAK,WACD8S,GAAWuf,EAAMryB,OACjB,MACJ,KAAK,SACI4S,GAAce,EAAQ,KAIvB0e,EAAMryB,OAAOU,OAAOm3B,OACpBrqB,GAAa6kB,EAAMryB,OAAQ,WAJ3BgF,GAAmBqtB,EAAMryB,OAAQ2T,EAAQ,GAAId,GAMjD,MACJ,KAAK,SACDgB,GAAWwe,EAAMryB,OACjB,MACJ,KAAK,YACDqyB,EAAMryB,OAAOU,ONpFV,qBMqFH,MACJ,KAAK,YACD2xB,EAAMryB,OAAOU,ONrFX,0BM2FtBy1C,EAAQxyB,UAAUmzB,qBAAuB,WACrC,IAAK54C,oBAAMuB,SAAO,IAAMka,KAAKu9B,MAAM,UAAWv9B,KAAK3Z,OAAOrB,UAAW,CACjE,GAAImJ,KACE/J,GAAI4b,KAAK29B,WAAW,QAASz5C,KAAMqM,EAAcyP,KAAK3Z,OAAQ,QAC5DuwB,QAAgC,SAAvB5W,KAAK3Z,OAAOkI,OAAoBi/B,GAAoB,KAC/DppC,GAAI4b,KAAK29B,WAAW,QAASz5C,KAAMqM,EAAcyP,KAAK3Z,OAAQ,QAC5DuwB,QAAgC,SAAvB5W,KAAK3Z,OAAOkI,OAAoBi/B,GAAoB,KAC/DppC,GAAI4b,KAAK29B,WAAW,QAASz5C,KAAMqM,EAAcyP,KAAK3Z,OAAQ,gBAC5DuwB,QAAgC,iBAAvB5W,KAAK3Z,OAAOkI,OAA4Bi/B,GAAoB,KACvEF,WAAW,IACXlpC,GAAI4b,KAAK29B,WAAW,aAAcz5C,KAAMqM,EAAcyP,KAAK3Z,OAAQ,aACjEuwB,QAAmC,cAA1B5W,KAAK3Z,OAAOgI,UAA4Bo/B,GAAqB,KACxErpC,GAAI4b,KAAK29B,WAAW,cAAez5C,KAAMqM,EAAcyP,KAAK3Z,OAAQ,cAClEuwB,QAAmC,eAA1B5W,KAAK3Z,OAAOgI,UAA6Bo/B,GAAqB,KACzErpC,GAAI4b,KAAK29B,WAAW,QAASz5C,KAAMqM,EAAcyP,KAAK3Z,OAAQ,QAC5DuwB,QAAmC,SAA1B5W,KAAK3Z,OAAOgI,UAAuBo/B,GAAqB,IAEzEztB,MAAK49B,UAAY,GAAIxV,mBACjBj6B,MAAOA,EAAO4D,SAAUF,EAAYmO,KAAK3Z,OAAQ0a,IACjDjb,OAAQkM,EAAmB+N,KAAKC,KAAMA,KAAK3Z,QAC3C+a,oBAAqBpB,KAAK3Z,OAAO+a,oBACjCD,UAAWnB,KAAK3Z,OAAO8a,UAAWyV,QPAxB,sBOEd5W,KAAK49B,UAAUv8B,kBAAmB,EAClCrB,KAAK49B,UAAUt8B,SAAS,IAAMtB,KAAKu9B,MAAM,WAE7C,IAAKh5C,oBAAMuB,SAAO,IAAMka,KAAKu9B,MAAM,QAASv9B,KAAK3Z,OAAOrB,UAAW,CAC/D,GAEI+mB,KAEI3nB,GAAI4b,KAAK29B,WAAW,SAAUz5C,KAHlB,uDAGwCqM,EAAcyP,KAAK3Z,OAAQ,mBAC/EuwB,QAA8B,YAArB5W,KAAK3Z,OAAOoE,KAAqB,GAAKgjC,KAG/CrpC,GAAI4b,KAAK29B,WAAW,WAAYz5C,KARzB,sDAQ0CqM,EAAcyP,KAAK3Z,OAAQ,gBAC5EuwB,QAA8B,YAArB5W,KAAK3Z,OAAOoE,KAAqBgjC,GAAqB,IAGvEztB,MAAK69B,aAAe,GAAIzV,mBACpBxR,QAA8B,YAArB5W,KAAK3Z,OAAOoE,KAAqBqgC,GAAgBF,GAC1D74B,SAAUF,EAAYmO,KAAK3Z,OAAQ,gBAAkB0a,IACrD5S,MAAO4d,EAAajmB,OAAQka,KAAK2Q,aAAa5Q,KAAKC,MACnDmB,UAAWnB,KAAK3Z,OAAO8a,UACvBd,QAAS,iCAAmC9P,EAAcyP,KAAK3Z,OAAQ,QAAU,YAErF2Z,KAAK69B,aAAax8B,kBAAmB,EACrCrB,KAAK69B,aAAav8B,SAAS,IAAMtB,KAAKu9B,MAAM,SAEhDv9B,KAAK89B,UAAU99B,KAAKy8B,SAAS,GAC7Bz8B,KAAK+9B,YAeL,KAAK,GAdDj3B,GAAaF,YAAU,SAAU5G,KAAKg9B,WAAWh4C,SAc5C+hB,EAAW,EAAGA,EAAWD,EAAW1hB,OAAQ2hB,KAbvC,SAAUA,GAEpBD,EAAWC,GAAUC,UAAY,SAAUxH,GACrB,KAAdA,EAAEyH,SAAmBzH,EAAEhI,OAAOvR,UAAUC,SAAS,eACjDsZ,EAAE0H,kBAGVJ,EAAWC,GAAUjC,QAAU,SAAUtF,GACnB,KAAdA,EAAEyH,SAAmBzH,EAAEhI,OAAOvR,UAAUC,SAAS,eACjD4gB,EAAWC,GAAU1M,UAKrB0M,EAEZ/G,MAAK3Z,OAAO41C,iBAEhBO,EAAQxyB,UAAUg0B,mBAAqB,WACnC,GAAIh+B,KAAK49B,UAEL,IAAK,GADDzvC,GAAQ6R,KAAK49B,UAAUzvC,MAClB8vC,EAAY,EAAGA,EAAY9vC,EAAM/I,OAAQ64C,IAC1C9vC,EAAM8vC,GAAW75C,KAAO4b,KAAK29B,WAAW,QACxCxvC,EAAM8vC,GAAWrnB,QAAiC,SAAvB5W,KAAK3Z,OAAOkI,OAAoBi/B,GAAoB,GAE1Er/B,EAAM8vC,GAAW75C,KAAO4b,KAAK29B,WAAW,QAC7CxvC,EAAM8vC,GAAWrnB,QAAiC,SAAvB5W,KAAK3Z,OAAOkI,OAAoBi/B,GAAoB,GAE1Er/B,EAAM8vC,GAAW75C,KAAO4b,KAAK29B,WAAW,QAClB,iBAAvB39B,KAAK3Z,OAAOkI,QAAoD,gBAAvByR,KAAK3Z,OAAOkI,OACrDJ,EAAM8vC,GAAWrnB,QAAU5W,KAAK3Z,OAAOkI,SAAWyR,KAAK3Z,OAAOkI,OAASi/B,GAAoB,GAG3Fr/B,EAAM8vC,GAAWrnB,QAAiC,iBAAvB5W,KAAK3Z,OAAOkI,OAA4Bi/B,GAAoB,GAGtFr/B,EAAM8vC,GAAW75C,KAAO4b,KAAK29B,WAAW,aAC7CxvC,EAAM8vC,GAAWrnB,QAAoC,cAA1B5W,KAAK3Z,OAAOgI,UAA4Bo/B,GAAqB,GAEnFt/B,EAAM8vC,GAAW75C,KAAO4b,KAAK29B,WAAW,cAC7CxvC,EAAM8vC,GAAWrnB,QAAoC,eAA1B5W,KAAK3Z,OAAOgI,UAA6Bo/B,GAAqB,GAEpFt/B,EAAM8vC,GAAW75C,KAAO4b,KAAK29B,WAAW,UAC7CxvC,EAAM8vC,GAAWrnB,QAAoC,SAA1B5W,KAAK3Z,OAAOgI,UAAuBo/B,GAAqB,KAKnG+O,EAAQxyB,UAAU2zB,WAAa,SAAUv5C,GACrC,MAAO4b,MAAK3Z,OAAOrB,QAAQZ,GAAK,QAAUA,EAAGgI,eAEjDowC,EAAQxyB,UAAU2G,aAAe,SAAUznB,GACd,YAArB8W,KAAK3Z,OAAOoE,KACRvB,EAAK0D,KAAKxI,KAAO4b,KAAK29B,WAAW,UACjCnzC,EAAawV,KAAK3Z,OAAQ,cAI1B6C,EAAK0D,KAAKxI,KAAO4b,KAAK29B,WAAW,YACjCnzC,EAAawV,KAAK3Z,OAAQ,YAItCm2C,EAAQxyB,UAAU6yB,gBAAkB,SAAU74C,GAC1C,GAAImK,MACA6N,EAAO,MACPgE,MAAK3Z,OAAO6L,WACZ8J,EAAO,WAEX,KAAK,GAAI7W,GAAI,EAAGA,EAAInB,EAAKoB,OAAQD,IAAK,CAClC,GAAIyH,OAAO,GACP0/B,EAAStsB,KAAKu9B,MAAMv5C,EAAKmB,IACzBoxB,EAAWhmB,EAAcyP,KAAK3Z,OAAQrC,EAAKmB,IAC3C+4C,EAAc3tC,EAAcyP,KAAK3Z,OAAQ,WAAarC,EAAKmB,IAC3Dg5C,EAAc,iDAAmD5nB,EAAW,SAChF,QAAQvyB,EAAKmB,IACT,IAAK,IACDyH,GAASmP,KAAM,YACf,MACJ,KAAK,SACDnP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WP/H1D,sBO+HuFC,WAAYtiC,EACxG,MACJ,KAAK,SACDpP,GACIxI,GAAIkoC,EAAQ8R,YAAaF,EACzB1yB,SAAU,eAAiB8gB,EAAS,iDAAmD6R,EAAc,YAEzG,MACJ,KAAK,UACDvxC,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WPtHzD,uBOsHuFC,WAAYtiC,EACzG,MACJ,KAAK,YACDpP,GACIxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaK,WP5GtD,qBO4GkFC,SAAU,OAC5FC,MAAO,QAEX,MACJ,KAAK,OACD7xC,GACIxI,GAAIkoC,EAAQ8R,YAAaF,EAAaG,WAAiC,YAArBr+B,KAAK3Z,OAAOoE,KAAqBqgC,GAAgBF,GACnG4T,SAAU,OAAQC,MAAO,QAASv6C,KAAMqyB,EAAU+nB,WAAY,WAC9D9yB,SAAU,eAAiB8gB,EAAS,4DAChC/7B,EAAcyP,KAAK3Z,OAAQ,QAAU,aAE7C,MACJ,KAAK,UACDuG,GACIxI,GAAIkoC,EAAQ8R,YAAaF,EAAaG,WP5IpC,uBO4IkEG,SAAU,OAAQC,MAAO,QAC7Fv6C,KAAMqyB,EAAU+nB,WAAY,WAEhC,MACJ,KAAK,YACD1xC,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WPnJvD,yBOmJuFC,WAAYtiC,EAC3G,MACJ,KAAK,MACDpP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WAAY9Q,GAAc+Q,WAAYtiC,EACrG,MACJ,KAAK,OACDpP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WPjK5D,oBOiKuFC,WAAYtiC,EACtG,MACJ,KAAK,QACDpP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WPlK3D,qBOkKuFC,WAAYtiC,EACvG,MACJ,KAAK,SACDpP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WPnK1D,sBOmKuFC,WAAYtiC,EACxG,MACJ,KAAK,SACDpP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WPpK1D,sBOoKuFC,WAAYtiC,EACxG,MACJ,KAAK,WACDpP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WP3JxD,wBO2JuFC,WAAYtiC,EAC1G,MACJ,KAAK,YACDpP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,EAAaG,WPhKvD,sBOgKuFC,WAAYtiC,EAC3G,MACJ,SACIpP,GAASxI,GAAIkoC,EAAQpoC,KAAMqyB,EAAU6nB,YAAaF,GAG1D/vC,EAAM7I,KAAKsH,GAEf,MAAOuB,IAEXquC,EAAQxyB,UAAUuzB,MAAQ,SAAUn5C,GAChC,MAAO4b,MAAK3Z,OAAOrB,QAAQZ,GAAK,OAASA,EAAGgI,eAEhDowC,EAAQxyB,UAAU6I,iBAAmB,WACjC7S,KAAK3Z,OAAOy4B,GAAGjB,GAAqB7d,KAAK8d,kBAAmB9d,MAC5DA,KAAK3Z,OAAOy4B,GAAGthB,GAAyBwC,KAAK0+B,mBAAoB1+B,MACjEA,KAAK3Z,OAAOy4B,GAAGl1B,GAAqBoW,KAAK8a,eAAgB9a,MACzDA,KAAK3Z,OAAOy4B,GAAGl3B,GAAkBoY,KAAKkR,UAAWlR,MACjDA,KAAK3Z,OAAOy4B,GAAG93B,GAAkBgZ,KAAKmR,UAAWnR,MACjDA,KAAK3Z,OAAOy4B,GAAG6K,GAAgB3pB,KAAKiQ,QAASjQ,MAC7CA,KAAK3Z,OAAOy4B,GAAGzsB,GAAqB2N,KAAKg+B,mBAAoBh+B,OAEjEw8B,EAAQxyB,UAAU20B,gBAAkB,SAAUn/B,GAC1C,GAAIkZ,GAAQ1Y,IACZ,QAAwCmG,KAApC3G,EAAE0f,QAAQqW,gBAAgBpnC,MAAqB,CAC/C6R,KAAK7R,MAAQ6R,KAAK68B,gBAAgB78B,KAAK88B,SAASt9B,EAAE0f,QAAQqW,gBAAgBpnC,MAAMiY,IAAI,SAAUxZ,GAAQ,MAAOA,GAAKmgC,UAClH,IAAIx/B,IAAcY,MAAO6R,KAAK7R,MAC9B6R,MAAK3Z,OAAOwH,QAAQ,gBAAiBN,EAAW,SAAUwvC,GAClDrkB,EAAMklB,WACNllB,EAAMklB,UAAU3tB,UAEhByI,EAAMmlB,cACNnlB,EAAMmlB,aAAa5tB,UAEvByI,EAAMvqB,MAAQ4uC,EAAkB5uC,MAChCuqB,EAAMskB,WAAW7uC,MAAQuqB,EAAMvqB,MAC/BuqB,EAAMskB,WAAWj7B,WACjB2W,EAAMykB,2BAIlBX,EAAQxyB,UAAU00B,mBAAqB,WACnC1+B,KAAK+9B,aACL/9B,KAAK89B,UAAU99B,KAAK08B,QAAQ,GAC5B18B,KAAK89B,UAAU99B,KAAK48B,WAAW,GACU,IAArC58B,KAAK3Z,OAAO8B,cAAc/C,QAC1B4a,KAAK89B,UAAU99B,KAAK08B,QAAQ,GAC5B18B,KAAK89B,UAAU99B,KAAK48B,WAAW,IAE1B58B,KAAK3Z,OAAO8B,cAAc/C,OAAS,IACxC4a,KAAK89B,UAAU99B,KAAK28B,UAAU,GAC9B38B,KAAK89B,UAAU99B,KAAK48B,WAAW,GAEnC,IAAInmC,GAAM3Q,SAAO,IAAMka,KAAKu9B,MAAM,aAAcv9B,KAAKg9B,WAAWh4C,QAChE,IAAIgb,KAAK3Z,OAAO8B,cAAc/C,OAAS,GAAKqR,IAAQuJ,KAAK3Z,OAAO6wB,qBAAsB,CAClF,GAAI7R,OAAM,EAENA,GADqC,IAArCrF,KAAK3Z,OAAO8B,cAAc/C,OACpB4a,KAAK3Z,OAAO8B,cAAc/C,OAAS,IAAMmL,EAAcyP,KAAK3Z,OAAQ,kBAGpE2Z,KAAK3Z,OAAO8B,cAAc/C,OAAS,IAAMmL,EAAcyP,KAAK3Z,OAAQ,mBAE9EP,SAAO,mBAAoB2Q,GAAKzQ,YAAcqf,EAC9CrF,KAAKg9B,WAAW4B,SAASnoC,EAAImH,eAAe,KAGpD4+B,EAAQxyB,UAAU8zB,UAAY,SAAUe,EAAOC,GAC3C,IAAK,GAAI35C,GAAI,EAAGA,EAAI05C,EAAMz5C,OAAQD,IAAK,CACnC,GAAIsR,GAAM3Q,SAAO,IAAMka,KAAKu9B,MAAMsB,EAAM15C,IAAK6a,KAAK3Z,OAAOrB,QACrDyR,IACAuJ,KAAKg9B,WAAW4B,SAASnoC,EAAImH,cAAekhC,KAIxDtC,EAAQxyB,UAAU+zB,WAAa,WAC3B,GAAItnC,GAAM3Q,SAAO,IAAMka,KAAKu9B,MAAM,aAAcv9B,KAAKg9B,WAAWh4C,QAC5DyR,IACAuJ,KAAKg9B,WAAW4B,SAASnoC,EAAImH,eAAe,IAGpD4+B,EAAQxyB,UAAUkH,UAAY,WAC1BlR,KAAK89B,WAAW,UAAU,IAE9BtB,EAAQxyB,UAAUmH,UAAY,WAC1BnR,KAAK89B,WAAW,UAAU,IAE9BtB,EAAQxyB,UAAU8Q,eAAiB,WAC/B,GAAI9a,KAAK69B,aAAc,CACnB79B,KAAK69B,aAAajnB,QAA+B,YAArB5W,KAAK3Z,OAAOoE,KAAqBqgC,GAAgBF,EAE7E,KAAK,GADDz8B,GAAQ6R,KAAK69B,aAAa1vC,MACrB8vC,EAAY,EAAGA,EAAY9vC,EAAM/I,OAAQ64C,IAC1C9vC,EAAM8vC,GAAW75C,KAAO4b,KAAK29B,WAAW,SACxCxvC,EAAM8vC,GAAWrnB,QAA+B,eAArB5W,KAAK3Z,OAAOoE,KAAwBgjC,GAAqB,GAE/Et/B,EAAM8vC,GAAW75C,KAAO4b,KAAK29B,WAAW,aAC7CxvC,EAAM8vC,GAAWrnB,QAA+B,YAArB5W,KAAK3Z,OAAOoE,KAAqBgjC,GAAqB,MAKjG+O,EAAQxyB,UAAUiM,oBAAsB,WACpCjW,KAAK3Z,OAAOs3B,IAAIE,GAAqB7d,KAAK8d,mBAC1C9d,KAAK3Z,OAAOs3B,IAAIngB,GAAyBwC,KAAK0+B,oBAC9C1+B,KAAK3Z,OAAOs3B,IAAI/zB,GAAqBoW,KAAK8a,gBAC1C9a,KAAK3Z,OAAOs3B,IAAI/1B,GAAkBoY,KAAKkR,WACvClR,KAAK3Z,OAAOs3B,IAAI32B,GAAkBgZ,KAAKmR,WACvCnR,KAAK3Z,OAAOs3B,IAAIgM,GAAgB3pB,KAAKiQ,SACrCjQ,KAAK3Z,OAAOs3B,IAAItrB,GAAqB2N,KAAKg+B,qBAQ9CxB,EAAQxyB,UAAU8P,cAAgB,WAC9B,MAAO,WAEX0iB,EAAQxyB,UAAU8T,kBAAoB,SAAUte,GAC5C,GAAIA,EAAEpN,SAAW4N,KAAK8Z,iBAAgC,WAAbta,EAAEpN,OAI3C,IAAK,GAAI4sB,GAAK,EAAGC,EAAKtmB,OAAOD,KAAK8G,EAAE0f,SAAUF,EAAKC,EAAG75B,OAAQ45B,IAE1D,OADWC,EAAGD,IAEV,IAAK,WACGhf,KAAK49B,YACL59B,KAAK49B,UAAU7rC,SAAWF,EAAYmO,KAAK3Z,OAAQ0a,KAEnDf,KAAK69B,eACL79B,KAAK69B,aAAa9rC,SAAWF,EAAYmO,KAAK3Z,OAAQ,gBAAkB0a,IAE5E,MACJ,KAAK,SACL,IAAK,QACDf,KAAKg9B,WAAW+B,iBAChB,MACJ,KAAK,kBACD/+B,KAAK2+B,gBAAgBn/B,KAKrCg9B,EAAQxyB,UAAUiG,QAAU,WACpBjQ,KAAK3Z,OAAOq3B,cAGhB1d,KAAKiW,sBACDjW,KAAK49B,WACL59B,KAAK49B,UAAU3tB,UAEfjQ,KAAK69B,cACL79B,KAAK69B,aAAa5tB,UAEtBjQ,KAAKg9B,WAAW/sB,UAChBjQ,KAAK3Z,OAAO41C,kBAEhBO,EAAQxyB,UAAUmiB,YAAc,SAAUh+B,EAAO6wC,GAC7C,IAAK,GAAI75C,GAAI,EAAGA,EAAIgJ,EAAM/I,OAAQD,IAAK,CACnC,GAAIsR,GAAM3Q,SAAO,IAAMka,KAAKu9B,MAAMpvC,EAAMhJ,IAAK6a,KAAK3Z,OAAOrB,QACrDyR,IACAuJ,KAAKg9B,WAAW7Q,YAAY11B,EAAImH,cAAeohC,KAIpDxC,KCnfPyC,GAAgC,WAChC,QAASA,GAAeh7C,GACpB+b,KAAKk/B,oBAAsBj7C,EAC3B+b,KAAKm/B,kBAAoBl7C,EAASoG,qBAiPtC,MA5OA40C,GAAej1B,UAAUqN,oBAAsB,WAE3C,GAAI+nB,GAAmBp/B,KAAKm/B,kBAAkBhxC,MAE1CwzB,EAAYyd,EAAiB1nB,MAAM,EAAG,GAEtCJ,EAAeC,WAASC,mBAAmB7nB,gBAAegyB,EAAW3hB,KAAKm/B,kBAAkBppB,QAEhG/V,MAAKyX,SAAWvZ,MAAM8L,UAAU0N,MAAMC,KAAK/Q,YAAU,IAAMhhB,GAAe0xB,IAE1EtX,KAAKm/B,kBAAkBn6C,QAAQoL,YAAYknB,GAE3CtX,KAAKi+B,UAAYj+B,KAAKmY,aAAaxf,OAAOD,KAAKsH,KAAKm/B,kBAAkB70C,UAAUlF,QAEhF4a,KAAKm/B,kBAAkBn6C,QAAQq6C,WAAW32C,SAE1CsX,KAAKm/B,kBAAkBhxC,MAAQixC,EAAiB1nB,MAAM,EAAG1X,KAAKi+B,YAMlEgB,EAAej1B,UAAUqO,mBAAqB,WAE1CrY,KAAKs/B,cAAgBt/B,KAAKm/B,kBAAkB70C,SAASlF,OAAS4a,KAAKi+B,WAAaj+B,KAAKu/B,cAChFv/B,KAAKm/B,kBAAkB70C,SAASlF,OAAS4a,KAAKi+B,WAAaj+B,KAAKu/B,aAAev/B,KAAKu/B,aAEzFv/B,KAAKw/B,WAAax/B,KAAKk/B,oBAAoBvvC,cAAc,OACzDqQ,KAAKw/B,WAAWv5C,UAAUoC,IAAI,iBAC9B2X,KAAKm/B,kBAAkBn6C,QAAQ21B,kBAAkBC,aAAa5a,KAAKw/B,WAAYx/B,KAAKm/B,kBAAkBn6C,QAAQ21B,kBAAkB0kB,YAChIr/B,KAAKy/B,cAAgBz/B,KAAKk/B,oBAAoBvvC,cAAc,OAC5DqQ,KAAKy/B,cAAcx5C,UAAUoC,IAAI,oBACjC2X,KAAKm/B,kBAAkBn6C,QAAQ21B,kBAAkBC,aAAa5a,KAAKy/B,cAAe,KAElF,IAAIpc,GAAcC,SAASrsB,OAAO8R,iBAAiB/I,KAAKm/B,kBAAkB1nB,SAAS,IAAI8L,iBAAiB,cAAe,IACnHD,SAASrsB,OAAO8R,iBAAiB/I,KAAKm/B,kBAAkB1nB,SAAS,IAAI8L,iBAAiB,iBAAkB,GAE5GvjB,MAAK0/B,eAAiB1/B,KAAKm/B,kBAAkB1nB,SAAS,GAAG+L,wBAAwBrb,OAASkb,EAE1FrjB,KAAK2/B,YAAehnC,OAAOD,KAAKsH,KAAKm/B,kBAAkB70C,UAAUlF,OAAS4a,KAAKu/B,aAAgBv/B,KAAK0/B,eAEpG1/B,KAAKw/B,WAAW/uC,MAAM0X,OAAS,MAC/BnI,KAAKy/B,cAAchvC,MAAM0X,OAASnI,KAAK2/B,YAAc,KAErD3/B,KAAK4/B,iBAAmB,EACxB5/B,KAAK6/B,oBAAsB7/B,KAAK2/B,YAEhC3/B,KAAK8/B,SAAW,EAEhB9/B,KAAK+/B,cAAgB//B,KAAKi+B,WAO9BgB,EAAej1B,UAAUmO,aAAe,SAAU6nB,GAE9C,GAAIC,GAAc3c,SAASrsB,OAAO8R,iBAAiB/I,KAAKyX,SAAS,IAAI8L,iBAAiB,gBAAiB,IACnGD,SAASrsB,OAAO8R,iBAAiB/I,KAAKyX,SAAS,IAAI8L,iBAAiB,eAAgB,GAExFvjB,MAAKu/B,aAAeW,KAAKC,MAAMl3B,WAAWmrB,aAAWp0B,KAAKm/B,kBAAkBn6C,QAAQ21B,kBAAkBoM,eAAiB/mB,KAAKyX,SAAS,GAAGpO,YAAc42B,GAEtJ,IAAIhC,GAAYj+B,KAAKu/B,aAAgBW,KAAKE,MAAMn3B,WAAWmrB,aAAWp0B,KAAKm/B,kBAAkBn6C,QAAQ2yC,eAAiB33B,KAAKyX,SAAS,GAAGnoB,aAKvI,OAHI2uC,GAAY+B,IACZ/B,EAAY+B,GAET/B,GAMXgB,EAAej1B,UAAUsO,gBAAkB,SAAUrI,GAC5CA,EAMD0P,eAAaj3B,OAAOsX,KAAKm/B,kBAAkBn6C,QAAQ21B,kBAAmB,SAAU3a,KAAKqgC,mBAJrF1gB,eAAat3B,IAAI2X,KAAKm/B,kBAAkBn6C,QAAQ21B,kBAAmB,SAAU3a,KAAKqgC,kBAAmBrgC,OAW7Gi/B,EAAej1B,UAAUq2B,kBAAoB,WACzC,GAAIphB,EAIJjf,MAAKsgC,eAAiB7a,oBAAkBzlB,KAAKsgC,gBAAkB,EAAItgC,KAAKsgC,cACxE,IAAIC,GAASvgC,KAAKwgC,kBAHG,EAarB,IARAxgC,KAAK4/B,iBAAmB5/B,KAAK0/B,eAAiBQ,KAAKC,MAAMI,EAASvgC,KAAK0/B,gBAEvE1/B,KAAK6/B,oBAAsB7/B,KAAK2/B,YAAc3/B,KAAK4/B,iBAGnD3gB,EAAKshB,GAAUvgC,KAAK2/B,aACf3/B,KAAK4/B,iBAAkB5/B,KAAK6/B,sBAAwB7/B,KAAK2/B,YAAa,GAAI3/B,KAAK4/B,iBAAmB3gB,EAAG,GAAIjf,KAAK6/B,oBAAsB5gB,EAAG,GAExIjf,KAAK4/B,mBAAqB32B,WAAWjJ,KAAKw/B,WAAW/uC,MAAM0X,QAI3D,GAHAnI,KAAKw/B,WAAW/uC,MAAM0X,OAASnI,KAAK4/B,iBAAmB,KACvD5/B,KAAKy/B,cAAchvC,MAAM0X,OAASnI,KAAK6/B,oBAAsB,KAEzDU,EAASvgC,KAAKsgC,eAAgB,CAE1BR,EAAWI,KAAKE,MAAQpgC,KAAK4/B,iBAAmB5/B,KAAK0/B,eAAkB1/B,KAAK8/B,SAChF9/B,MAAKygC,eAAeX,GAAU,OAE7B,CAED,GAAIA,GAAWI,KAAKE,MAAOpgC,KAAK8/B,SAAY9/B,KAAK4/B,iBAAmB5/B,KAAK0/B,eACzE1/B,MAAKygC,eAAeX,GAAU,GAItC9/B,KAAK8/B,SAAWI,KAAKE,MAAMpgC,KAAK4/B,iBAAmB5/B,KAAK0/B,gBACxD1/B,KAAKsgC,eAAiBC,EAEtBvgC,KAAKm/B,kBAAkB1nB,SAAWvZ,MAAM8L,UAAU0N,MAAMC,KAAK/Q,YAAU,IAAMhhB,GAAeoa,KAAKm/B,kBAAkBn6C,UACnHgb,KAAKm/B,kBAAkBhxC,MAAQ6R,KAAKm/B,kBAAkB70C,SAASotB,MAAM1X,KAAK+/B,cACtE//B,KAAKi+B,UAAWj+B,KAAK+/B,gBAO7Bd,EAAej1B,UAAUw2B,kBAAoB,SAAUE,GAGnD,MAAS1gC,MAAKm/B,kBAAkBn6C,QAAQ21B,kBAAkBoH,UAAY2e,GAAmB,EAAK,EACzF1gC,KAAKm/B,kBAAkBn6C,QAAQ21B,kBAAkBoH,UAAY2e,GAOtEzB,EAAej1B,UAAUy2B,eAAiB,SAAUX,EAAUa,GAE1D,IAAK,GAAIx7C,GAAI,EAAGA,EAAI26C,EAAU36C,IAC1B6a,KAAK4gC,SAASD,IAOtB1B,EAAej1B,UAAU42B,SAAW,SAAUD,GAC1C,GAAIjoB,GAAQ1Y,IACZ,IAAI2gC,GAIA,GAFA3gC,KAAK7R,MAAQ6R,KAAKm/B,kBAAkB70C,SAASotB,MAAM1X,KAAK+/B,cAAe//B,KAAK+/B,cAAgB//B,KAAKu/B,cAE7Fv/B,KAAK7R,MAAM/I,OAAS,EAAG,CACnBkyB,EAAeC,WAASC,mBAAmB7nB,gBAAeqQ,KAAK7R,MAAO6R,KAAKm/B,kBAAkBppB,QACjG/V,MAAKyX,SAAWvZ,MAAM8L,UAAU0N,MAAMC,KAAK/Q,YAAU,IAAMhhB,GAAe0xB,IAC1EtX,KAAKyX,SAASopB,QAAQ,SAAUhX,GAC5BnR,EAAMymB,kBAAkBn6C,QAAQ21B,kBAAkBC,aAAaiP,EAAOnR,EAAM+mB,iBAGhFz/B,KAAK+/B,cAAiB//B,KAAKm/B,kBAAkB70C,SAASlF,QAAU4a,KAAK+/B,cAAgB//B,KAAKu/B,aACtFv/B,KAAK+/B,cAAgB//B,KAAKu/B,aAAev/B,KAAK+/B,cAAgB//B,KAAKs/B,YAEvE,KAASn6C,EAAI,EAAGA,EAAI6a,KAAKu/B,aAAcp6C,IACnCoS,SAAOyI,KAAKw/B,WAAW3hC,yBAI9B,CAED,GAAIijC,OAAgB,GAChBC,MAAgB,EAChB/gC,MAAK+/B,gBAAkB//B,KAAKm/B,kBAAkB70C,SAASlF,QAEvD07C,EAAgB9gC,KAAK+/B,eAAiB//B,KAAKi+B,UAAYj+B,KAAKu/B,aAAev/B,KAAKs/B,cAEhFt/B,KAAK+/B,cAAkB//B,KAAK+/B,cAAgB//B,KAAKs/B,aAAgBt/B,KAAKi+B,UAClEj+B,KAAKi+B,UAAaj+B,KAAK+/B,cAAgB//B,KAAKs/B,aAEhDyB,GAAgB,IAIhBD,EAAgB9gC,KAAK+/B,cAAgB//B,KAAKi+B,UAE1Cj+B,KAAK+/B,cAAkB//B,KAAK+/B,cAAgB//B,KAAKu/B,aAAgBv/B,KAAKi+B,UAClEj+B,KAAKi+B,UAAaj+B,KAAK+/B,cAAgB//B,KAAKu/B,aAGpD,IAAIyB,GAAkBF,EAAgB9gC,KAAKu/B,aAAe,EAAKuB,EAAgB9gC,KAAKu/B,aAAe,CAGnG,IADAv/B,KAAK7R,MAAQ6R,KAAKm/B,kBAAkB70C,SAASotB,MAAMspB,EAAgBF,GAC/D9gC,KAAK7R,MAAM/I,OAAS,EAAG,CAEvB,GAAIkyB,GAAeC,WAASC,mBAAmB7nB,gBAAeqQ,KAAK7R,MAAO6R,KAAKm/B,kBAAkBppB,QAEjG/V,MAAKyX,SAAWvZ,MAAM8L,UAAU0N,MAAMC,KAAK/Q,YAAU,IAAMhhB,GAAe0xB,GAE1E,KAAK,GAAIrmB,GAAM+O,KAAKyX,SAASryB,OAAQ6L,EAAM,EAAGA,IAC1C+O,KAAKm/B,kBAAkBn6C,QAAQ21B,kBAAkBC,aAAa5a,KAAKyX,SAASxmB,EAAM,GAAI+O,KAAKw/B,WAAW3hC,mBAG1G,KAAK,GAAI1Y,GAAI,EAAGA,GAAK,EAAkB6a,KAAKs/B,aAAet/B,KAAKu/B,cAAep6C,IAC3EoS,SAAOyI,KAAKy/B,cAAcwB,2BAW1ChC,EAAej1B,UAAU8P,cAAgB,WACrC,MAAO,kBAKXmlB,EAAej1B,UAAUiG,QAAU,WAE3BjQ,KAAKk/B,oBAAoBxhB,aAIxB+H,oBAAkBzlB,KAAKm/B,kBAAkBn6C,QAAQ21B,oBAClD3a,KAAKsY,iBAAgB,IAGtB2mB,KCzOPiC,GAAgC,WAQhC,QAASA,GAAe76C,GACpB2Z,KAAKmhC,eACLnhC,KAAKohC,aACLphC,KAAKqhC,YAAa,EAClBrhC,KAAKshC,QAAS,EACdthC,KAAKuhC,eAAgB,EACrBvhC,KAAKwhC,gBAAiB,EACtBxhC,KAAKyhC,cAAe,EACpBzhC,KAAK0hC,mBAAoB,EACzB1hC,KAAK2hC,oBAAqB,EAC1B3hC,KAAK4hC,aAAe,KAEpB5hC,KAAK6hC,iBAAmB,KAExB7hC,KAAK8hC,mBAAoB,EAEzB9hC,KAAK+hC,mBAAoB,EACzB/hC,KAAK3Z,OAASA,EACd2Z,KAAK6S,mBACL7S,KAAK8S,YACDgC,SAAU,YACVC,IAAK,SACLC,IAAK,SACLC,MAAOjV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrCC,MAAOnV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrCE,MAAOpV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrC8sB,WAAY,eACZC,SAAU,YACV5sB,GAAI,MAy0BZ,MAt0BA6rB,GAAel3B,UAAUk4B,OAAS,WAC9B,GAAK39C,oBAAMyb,KAAKjK,SAAhB,CAIA,GAAIosC,GAAWh+C,WAAS6b,KAAK3Z,OAAOzB,OAAO,GAAIob,KAAK3Z,OAAOG,SAC3D0K,YAAS,WAAY,cAAeixC,EAEpC,IAAIC,MACAh+C,EAAKD,WAAS,KAAMg+C,EACnB59C,qBAAMH,IACP8M,WAAS,UAAW9M,EAAIg+C,GAEvBnpC,GAAckpC,IACfjxC,WAAS,QAASyI,GAAewoC,GAAWC,GAE3C79C,oBAAM69C,IACPlxC,WAAS,eAAgBkxC,EAAMD,GAEnCniC,KAAKjK,QAAU,GAAIssC,aACf1rB,QACIvsB,YAAa+3C,GAAW/9C,GAAI,SAAUk+C,SAAU,UAAWC,SAAU,eAAgBhnB,SAAU,eAAgBr3B,KAAM,OACrHs+C,YAAa,WAAY5rB,QAAS,WAAYC,eAAgB,eAAgB4rB,QAAS,QAE3FrhC,oBAAqBpB,KAAK3Z,OAAO+a,oBACjC/S,UAAW2R,KAAK3Z,OAAOkuC,uBAAuBlmC,UAC9Cq0C,cAAe1iC,KAAK2iC,gBAAgB5iC,KAAKC,MACzC4iC,aAAc5iC,KAAK6iC,eAAe9iC,KAAKC,MACvC8iC,cAAe9iC,KAAK+iC,aAAahjC,KAAKC,MACtCgjC,YAAahjC,KAAKijC,cAAcljC,KAAKC,MACrCkjC,cAAc,EACdC,YAAanjC,KAAKojC,cAAcrjC,KAAKC,MACrCqjC,SAAUrjC,KAAKsjC,WAAWvjC,KAAKC,MAC/BmB,UAAWnB,KAAK3Z,OAAO8a,UACvBoiC,UAAWvjC,KAAKwjC,YAAYzjC,KAAKC,QAErCA,KAAKjK,QAAQsL,kBAAmB,EAChCrB,KAAKjK,QAAQuL,SAAS,IAAMtB,KAAK3Z,OAAOrB,QAAQZ,GTjFnC,SSkFb4b,KAAKoY,eAET8oB,EAAel3B,UAAUw5B,YAAc,WACnC,GAAI9qB,GAAQ1Y,MACPA,KAAK3Z,OAAO6L,UAAY8N,KAAKjK,UAC1BiK,KAAK3Z,OAAOwR,kBACRmI,KAAKpI,SACLoI,KAAKpI,QAAQqY,UAEjBjQ,KAAKpI,QAAU,GAAI+gB,aAAU3Y,KAAKjK,QAAQ/Q,SACtCk0B,SAAUlZ,KAAK3Z,OAAO8yB,mBACtBJ,WAAY,aACZF,SAAU,EACVO,SAAUpZ,KAAK3Z,OAAOrB,QACtBs0B,KAAMlhB,GAAgB2H,KAAKC,KAAMA,KAAK3Z,QACtCmzB,UAAW,SAAUtwB,GACjByO,GAAiB+gB,EAAMryB,OAAQ6C,EAAMwvB,EAAM9gB,UAE/CyhB,SAAUxiB,GAAgBkJ,KAAKC,KAAMA,KAAK3Z,QAC1CuyB,gBAAgB,EAChBE,kBAAkB,EAClBE,OAAQhZ,KAAKiZ,WAAWlZ,KAAKC,UAG3BA,KAAK3Z,OAAOwR,kBAAoBmI,KAAKpI,SAC3CoI,KAAKpI,QAAQqY,YAIzBixB,EAAel3B,UAAUiP,WAAa,SAAU/vB,GAC5C,GAAI6vB,GAAa7vB,EAAKuwB,OAAOjiB,MAC7B,KAAKuhB,EAAW9yB,UAAUC,ST0Fb,aSzFT,MAAO,KAEX,IAAIwzB,GAAS9wB,UAAQmwB,EAAY,KAYjC,OAXA/Y,MAAK3Z,OAAO6N,SAAW,GACvB8L,KAAK3Z,OAAOmO,YACZwL,KAAK3Z,OAAOe,kBACZ4Y,KAAK3Z,OAAOe,gBAAkBsyB,GAC9B1Z,KAAK3Z,OAAOgO,aACZ3M,EAAUsY,KAAK3Z,OAAQqzB,GAEvB1Z,KAAK3Z,OAAOmO,SAAWwL,KAAKyjC,YAAY/pB,GACxC1Z,KAAK3Z,OAAO6N,SAAW8L,KAAK0jC,YAAYhqB,EAAQ1Z,KAAK3Z,OAAOmO,SAAS,GAAGvG,MACxE+R,KAAK3Z,OAAOgO,UAAU/O,KAAK0a,KAAK3Z,OAAOmO,SAAS,GAAGvG,MACnDmI,GAAyB4J,KAAK3Z,QACvB2Z,KAAK3Z,OAAOuQ,oBAEvBsqC,EAAel3B,UAAU05B,YAAc,SAAUhqB,EAAQx1B,GAErD,MAAOuD,GADIuY,KAAK2jC,YAAYjqB,EAAQx1B,KAGxCg9C,EAAel3B,UAAU25B,YAAc,SAAU5/C,EAAMG,GACnD,GAAIE,GAAKL,EAAKM,aAAa,UAE3B,OAAOK,GAAQX,EADDic,KAAK3Z,OAAO1B,MAAQP,EAAKF,EACT8b,KAAK3Z,OAAO1B,QAE9Cu8C,EAAel3B,UAAUs5B,WAAa,SAAUp6C,GAC5C,GAAIqE,IACAvI,QAASkE,EAAKnF,KACdyJ,YAAatE,EAAK06C,SAClBxxC,OAAQ,iBAEZ4N,MAAK3Z,OAAOwH,QAAQ,WAAYN,IAGpC2zC,EAAel3B,UAAU65B,SAAW,SAAU75C,EAAOwN,EAAQssC,GAEzD,GAAIC,GAAcpzC,EAAe3G,EACjC,IAAI+5C,EAAY3+C,OAAS,IACS,MAA7B2+C,EAAY,GAAGhrC,YAAgE,MAA1CiH,KAAKyjC,YAAYjsC,GAAQ,GAAGuB,YAAsBgrC,EAAY,GAAGhrC,aAAeiH,KAAKyjC,YAAYjsC,GAAQ,GAAGuB,YAAa,CAI/J,IAHA,GAAIkiB,GAAW,EAEXnoB,EAAUixC,EACP9oB,EAAW8oB,EAAY3+C,QAAQ,CAElC0N,EAAQmoB,GAAU+oB,SAAW,aAE7B,IAAI5B,MACAh+C,EAAKD,WAAS,KAAM2O,EAAQmoB,GAC3B12B,qBAAMH,IACP8M,WAAS,UAAW9M,EAAIg+C,GAEvBnpC,GAAcnG,EAAQmoB,KACvB/pB,WAAS,QAASyI,GAAe7G,EAAQmoB,IAAYmnB,GAEpD79C,oBAAM69C,IACPlxC,WAAS,eAAgBkxC,EAAMtvC,EAAQmoB,IAE3CA,IAGJjb,KAAKjK,QAAQkuC,SAASF,EAAavsC,EAAQ,KAAMssC,KAIzD5C,EAAel3B,UAAU24B,gBAAkB,SAAUz5C,GACjD,IAAKA,EAAKoZ,eAAiBtC,KAAKyhC,eAAiBzhC,KAAK0hC,oBAAsB1hC,KAAKuhC,gBAAkBvhC,KAAKwhC,gBAAkBxhC,KAAK+hC,kBAG3H,MAFA/hC,MAAK+hC,mBAAoB,OACzB/hC,KAAK8hC,mBAAoB,EAG7B,KAAK9hC,KAAK4hC,aAAc,CACpB5hC,KAAK3Z,OAAOkB,aAAe,gBAE3B,IAAIq8C,GAAW5jC,KAAKyjC,YAAYt/C,WAAS,KAAM+E,EAAK06C,UACpD,IAAI16C,EAAKnF,KAAKM,aAAa,cAAgB2b,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,KAAO4a,KAAKyhC,eAAiBzhC,KAAK8hC,mBAAqB9hC,KAAK0hC,kBAAmB,CAErK,GADA1hC,KAAK8hC,mBAAoB,GACpB9hC,KAAK0hC,kBAAmB,CACzB1hC,KAAK0hC,mBAAoB,CACrBwC,IAAmBh9C,OAAQgC,EAAKhC,OAAQsG,YAAao2C,EAAS,GAAIthC,aAAcpZ,EAAKoZ,aACzFtC,MAAK3Z,OAAOwH,QAAQ,aAAcq2C,GAEtC,IAAKlkC,KAAKyhC,aAAc,CACpB,GAAIl0C,IAAcwJ,QAAQ,EAAOvJ,YAAao2C,EAAS,GAAIxxC,OAAQ,iBACnE4N,MAAK3Z,OAAOwH,QAAQ,WAAYN,GAChCrE,EAAK6N,OAASxJ,EAAUwJ,OAExB7N,EAAK6N,SACLiJ,KAAK+hC,oBAAoB/hC,KAAK8hC,mBAAoB9hC,KAAK6hC,iBAAiB,KAAO34C,EAAKnF,KAAKM,aAAa,YACtG2b,KAAK8hC,mBAAoB,EACzB9hC,KAAK0hC,mBAAoB,EACzB1hC,KAAK6hC,iBAAmB7hC,KAAKjK,QAAQnP,cACrCoZ,KAAKjK,QAAQnP,eAAiBsC,EAAKnF,KAAKM,aAAa,kBAGxD,IAAI2b,KAAK6hC,iBAAiB,KAAO34C,EAAKnF,KAAKM,aAAa,YAAa,CACtE,GAAI6/C,IAAmBh9C,OAAQgC,EAAKhC,OAAQsG,YAAao2C,EAAS,GAAIthC,aAActC,KAAK8hC,kBACzF9hC,MAAK3Z,OAAOwH,QAAQ,aAAcq2C,MAK9ChD,EAAel3B,UAAUqjB,2BAA6B,SAAUtpC,GAC5D,GAAIC,GAAOgc,KAAKjK,QAAQ0tC,YAAY1/C,EAEpCic,MAAK3Z,OAAO8B,iBACZ6X,KAAK3Z,OAAOgD,SAAWrF,EACvBgc,KAAKmrB,WAAapnC,EAClBic,KAAK3Z,OAAOkB,aAAe,gBAC3B,IAAIgG,IAAcwJ,QAAQ,EAAOvJ,YAAaxJ,EAAK,GAAIoO,OAAQ,iBAC/D4N,MAAK3Z,OAAOwH,QAAQ,WAAYN,GAChCyS,KAAK8hC,mBAAoB,EACpBv0C,EAAUwJ,SACXjT,EAAWC,EAAMic,KAAK3Z,OAAOgD,SAAS,GAAI2W,KAAK3Z,QAC/CkE,GAAKyV,KAAK3Z,OAAQ2Z,KAAKuhC,cAAgB7rC,GAAkB4I,GAAoB0B,KAAK3Z,OAAO5B,MACzFub,KAAK3Z,OAAOqvB,YAAc3xB,EAC1Bic,KAAKuhC,cAAgBvhC,KAAKwhC,eAAiBxhC,KAAKyhC,cAAe,EAC/DzhC,KAAKjK,QAAQnP,eAAiB7C,EAAKM,aAAa,eAGxD68C,EAAel3B,UAAU64B,eAAiB,SAAU35C,GAOhD,GANI8W,KAAK3Z,OAAOyB,qBAAuBkY,KAAK3Z,OAAOyB,oBAAoBC,YAAciY,KAAK4hC,eACtF5hC,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,MAAQ,GAC1DgY,KAAK3Z,OAAO4B,YAAa,EACzB+X,KAAK8hC,mBAAoB,GAE7B9hC,KAAK3Z,OAAOg2B,mBACPnzB,EAAKoZ,cAAiBtC,KAAKyhC,cAAiBzhC,KAAK0hC,mBAAsB1hC,KAAKuhC,eAAkBvhC,KAAKwhC,gBAEpG,YADAxhC,KAAK3Z,OAAOzB,OAASC,EAAUqE,EAAKnF,MAGxCic,MAAKmrB,WAAajiC,EAAKnF,KACvBic,KAAK3Z,OAAOkB,aAAe,gBAE3B,IAAIq8C,GAAW5jC,KAAKyjC,YAAYt/C,WAAS,KAAM+E,EAAK06C,UACpD5jC,MAAK3Z,OAAO8B,iBACZ6X,KAAK3Z,OAAOgD,SAAWu6C,CACvB,IAAIvQ,GAAerzB,KAAK3Z,OAAO5B,KAC3B0/C,EAAQr+C,SAAO,cAAgBka,KAAKjK,QAAQnP,cAAc,GAAK,KAAMoZ,KAAKjK,QAAQ/Q,UACjFgb,KAAKyhC,cAAgBzhC,KAAK0hC,mBAAqByC,EAAM30C,cAAc,gBAAgBc,YAAc0P,KAAK3Z,OAAOvB,UAAUkb,KAAK3Z,OAAOvB,UAAUM,OAAS,GACvJtB,EAAWoF,EAAKnF,KAAMic,KAAK3Z,OAAOgD,SAAS,GAAI2W,KAAK3Z,SAGpD2Z,KAAK3Z,OAAOzB,OAASC,EAAUqE,EAAKnF,MACpCic,KAAK3Z,OAAOqvB,YAAcxsB,EAAKnF,MAEnCic,KAAKokC,iBAAmB,KACpBl7C,EAAKnF,KAAKyL,cAAc,aAAqE,OAAjDtG,EAAKnF,KAAKyL,cAAc,IAAM5J,MAC1Eoa,KAAKokC,iBAAmB,OAExB/Q,IAAiBrzB,KAAK3Z,OAAO5B,QACxBub,KAAKyhC,cAAgBzhC,KAAK0hC,oBAC3Bn3C,GAAKyV,KAAK3Z,OAAQ2Z,KAAKuhC,cAAgB7rC,GAAkB4I,GAAoB0B,KAAK3Z,OAAO5B,MACzFub,KAAK8hC,mBAAoB,GAE7B9hC,KAAK3Z,OAAOqvB,YAAcxsB,EAAKnF,MAEnCic,KAAKuhC,cAAgBvhC,KAAKwhC,eAAiBxhC,KAAKyhC,aAAezhC,KAAK0hC,mBAAoB,GAI5FR,EAAel3B,UAAUq6B,WAAa,SAAUn7C,GAC5C8W,KAAKuhC,eAAgB,EACrBvhC,KAAKskC,iBAAiBp7C,EAAK,KAG/Bg4C,EAAel3B,UAAU+4B,aAAe,SAAU75C,GAC9C,IAAKA,EAAKoZ,cAAiBtC,KAAKshC,SAGqB,OAAjDp4C,EAAKnF,KAAKyL,cAAc,IAAM5J,IAAyB,CACvD,GAAI1B,GAAOC,WAAS,OAAQ+E,EAAK06C,UAC7Bx/C,EAAK8E,EAAKnF,KAAKM,aAAa,WAC5BmB,GAAOjB,oBAAMH,GACbE,EAAUC,oBAAMH,GAAMF,EAAOE,EAC7BK,EAAOC,EAAQwE,EAAKnF,KAAMO,EAASkB,EACvCwa,MAAKokC,iBAAmBl7C,EAAKnF,KAAKM,aAAa,YAC/C2b,KAAK3Z,OAAOuP,WAAaoK,KAAKokC,iBAC9BpkC,KAAK3Z,OAAOgD,SAAW2W,KAAKyjC,YAAYt/C,WAAS,KAAM+E,EAAK06C,WAC5Dr5C,GAAKyV,KAAK3Z,ORzOE,cQyOyB5B,GACrCub,KAAK2hC,oBAAqB,IAIlCT,EAAel3B,UAAUu6B,eAAiB,SAAUr7C,GAChD8W,KAAK6jC,SAAS36C,EAAKc,MAAOgW,KAAKokC,kBAAkB,GACjDpkC,KAAK3Z,OAAOuP,WAAa,KACzBoK,KAAK2hC,oBAAqB,GAE9BT,EAAel3B,UAAUi5B,cAAgB,SAAU/5C,GAI/C,GAHA8W,KAAK3Z,OAAOkB,aAAe,iBAC3ByY,KAAK6hC,iBAAmB7hC,KAAKjK,QAAQnP,cACrCoZ,KAAKmrB,WAAajiC,EAAKnF,KACG,IAArBmF,EAAK6O,MAAM6P,OAAiB1e,EAAKnF,KAAKM,aAAa,cAAgB2b,KAAKjK,QAAQnP,cAAc,GAC/FoZ,KAAKyhC,cAAe,EACpBzhC,KAAK8hC,mBAAoB,EACzB9hC,KAAKjK,QAAQnP,eAAiBsC,EAAKnF,KAAKM,aAAa,iBAEpD,IAAI6E,EAAKnF,KAAKM,aAAa,cAAgB2b,KAAKjK,QAAQnP,cAAc,IAA2C,IAArCoZ,KAAK3Z,OAAO8B,cAAc/C,OAAc,CACrH4a,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,EACjD,IAAI8kC,GAA+B,eAArBjtB,KAAK3Z,OAAOoE,KAAyB,iBAAmB,aACtEuV,MAAK3Z,OAAOU,OAAO82B,IAAuBzrB,OAAQ66B,EAAQ/N,SAAW/2B,wBAEhEe,GAAKnF,KAAKM,aAAa,cAAgB2b,KAAKjK,QAAQnP,cAAc,IAAOoZ,KAAK8hC,mBAAsB9hC,KAAK2hC,qBACrF,IAArBz4C,EAAK6O,MAAM6P,QACX5H,KAAKyhC,cAAe,GAExBzhC,KAAK0hC,mBAAoB,EACzB1hC,KAAK8hC,mBAAoB,EACzB9hC,KAAKjK,QAAQnP,eAAiBsC,EAAKnF,KAAKM,aAAa,eAI7D68C,EAAel3B,UAAUo5B,cAAgB,SAAUl6C,GAC1C3E,oBAAM2E,EAAKs7C,aACZt7C,EAAK6N,QAAS,IAGtBmqC,EAAel3B,UAAUoS,cAAgB,SAAUlzB,GAC/C8W,KAAK3Z,OAAOK,OAAQ,CAEpB,IAAImI,GAAY1K,WAAS6b,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,GAAI4a,KAAK3Z,OAAOyI,QACxF,IAA8B,QAA1BkR,KAAKokC,iBAA4B,CACjC,GAAID,GAAQr+C,SAAO,cAAgBka,KAAKjK,QAAQnP,cAAc,GAAK,KAAMoZ,KAAKjK,QAAQ/Q,SAClFmxB,EAAO5xB,oBAAM4/C,GAAiD,KAAvCr+C,SAAO,iBAAuBq+C,EACrD5/C,qBAAM4xB,IACNnW,KAAK6jC,SAAS36C,EAAKc,MAAOgW,KAAKjK,QAAQnP,cAAc,IAAKoZ,KAAKqhC,YAEnErhC,KAAKokC,iBAAmB,GAE5BpkC,KAAKqhC,YAAa,EACd98C,oBAAMsK,IACNqC,WAAS8O,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,GAAI8D,EAAKc,MAAOgW,KAAK3Z,OAAOyI,SAEpFkR,KAAK3Z,OAAO+Q,UAAU0iC,kBAAqB95B,KAAK3Z,OAAa,OAC7D2Z,KAAKykC,WAAWv7C,IAGxBg4C,EAAel3B,UAAUy6B,WAAa,SAAUv7C,GAC5C,GAAI8W,KAAKjK,QAAS,CACd,GAAI3R,GAAK4b,KAAKjK,QAAQnP,cAAc,EACpCoZ,MAAK0kC,eAAex7C,EAAM9E,KAGlC88C,EAAel3B,UAAU06B,eAAiB,SAAUx7C,EAAM9E,GACtD,GAAIugD,IAAuD,IAA5C3kC,KAAKjK,QAAQ6uC,cAAcv4C,QAAQjI,EAClD4b,MAAK6kC,iBAAiBzgD,GACtB4b,KAAK6jC,SAAS36C,EAAKc,MAAO5F,GAAKugD,IAEnCzD,EAAel3B,UAAU66B,iBAAmB,SAAUzgD,GAClD,GAAI+/C,GAAQr+C,SAAO,cAAgB1B,EAAK,KAAM4b,KAAKjK,QAAQ/Q,SACvDqB,EAASP,SAAO,iBAAuBq+C,GACvCW,EAASz+C,EAAS6X,MAAM8L,UAAU0N,MAAMC,KAAKtxB,EAAOwiC,UAAY,IAChEic,IACA9kC,KAAKjK,QAAQorC,YAAY2D,IAGjC5D,EAAel3B,UAAU+6B,UAAY,SAAU77C,GAC3C,GAAI87C,GAAQhlC,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,EAC3D4a,MAAKjK,QAAQkvC,UAAUjlC,KAAKjK,QAAQnP,eACpCoZ,KAAKjK,QAAQnP,eAAiBo+C,GAC9BhlC,KAAKokC,iBAAmB,MACxBpkC,KAAKoc,cAAclzB,IAEvBg4C,EAAel3B,UAAUuS,WAAa,SAAUrzB,GACX,mBAA7B8W,KAAK3Z,OAAOkB,cACR2B,EAAKsO,OAAOhI,cAAc,aAC1BwQ,KAAKjK,QAAQkvC,UAAUjlC,KAAKjK,QAAQnP,gBAIhDs6C,EAAel3B,UAAU+wB,aAAe,SAAU7xC,GAC9C8W,KAAKkiC,SACLliC,KAAK6jC,SAAS36C,EAAKc,MAAO7F,WAAS,SAAU+E,EAAK0L,MAAM,IAE5DssC,EAAel3B,UAAU0R,cAAgB,SAAUxyB,GAC/C8W,KAAKkiC,QACL,IAAI99C,GAAKD,WAAS,SAAU+E,EAAK0L,IACjCoL,MAAK6kC,iBAAiBzgD,GACtB4b,KAAK6jC,SAAS36C,EAAKc,MAAO5F,GAAI,GAC9B4b,KAAKjK,QAAQnP,eAAiBoZ,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,KAEjF87C,EAAel3B,UAAU2R,YAAc,SAAUzyB,GAC7C8W,KAAKykC,WAAWv7C,IAEpBg4C,EAAel3B,UAAU6R,eAAiB,WACL,mBAA7B7b,KAAK3Z,OAAOkB,cACZyY,KAAKklC,kBAGbhE,EAAel3B,UAAU+R,aAAe,WACpC,GAAiC,mBAA7B/b,KAAK3Z,OAAOkB,aAAmC,CAC/CyY,KAAKmlC,kBACL,IAAI7pB,GAASn3B,WAAS,OAAQ6b,KAAK3Z,OAAOgD,SAAS,GACnDoQ,IAAOuG,KAAK3Z,QAASi1B,GAAStb,KAAK3Z,OAAO5B,KAAM,YAIxDy8C,EAAel3B,UAAUgS,YAAc,SAAU9yB,GAC7C,GAAiC,mBAA7B8W,KAAK3Z,OAAOkB,aAAmC,CAC/C,GAAI+L,GAAe0M,KAAKjK,QAAQnP,cAAc,GAC1Cw+C,EAAct/C,SAAO,cAAgBwN,EAAe,KAAM0M,KAAKjK,QAAQ/Q,SACvEqgD,EAAkBz8C,UAAQw8C,EAAa,kBAAuBxnC,aAClEoC,MAAKjK,QAAQnP,eAAiBy+C,EAAgBhhD,aAAa,aAC3D2b,KAAKjK,QAAQgM,WAEjB/B,KAAKykC,WAAWv7C,IAEpBg4C,EAAel3B,UAAUiS,aAAe,SAAU/yB,GAC9C8W,KAAKykC,WAAWv7C,IAEpBg4C,EAAel3B,UAAUkS,aAAe,WACH,mBAA7Blc,KAAK3Z,OAAOkB,cACZyY,KAAKmc,oBAIb+kB,EAAel3B,UAAUs7B,kBAAoB,SAAUp8C,GACnD,GAAI9E,GAAK4b,KAAK4hC,aAAe5hC,KAAK4hC,aAAe5hC,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,EAIhG,IAHA4a,KAAKqhC,YAAoF,IAAvErhC,KAAKjK,QAAQ6uC,cAAcv4C,QAAQ2T,KAAKjK,QAAQnP,cAAc,IAChFoZ,KAAK0kC,eAAex7C,EAAM9E,GAC1B4b,KAAK3Z,OAAOuP,WAAa,KACrBoK,KAAK4hC,aACL5hC,KAAK4hC,aAAe,SAEnB,CAED,GAAInd,KACJ,IAAIzkB,KAAK3Z,OAAO1B,MACZ8/B,EAAa,GAAI/1B,eAAYsR,KAAKjK,QAAQ0tC,eACtC90C,cAAa,GAAIL,UAAQS,MAAM,KAAM,QAASiR,KAAK3Z,OAAOghB,WAAW,QAExE,CAED,GAAIk+B,GAAQ,GAAI72C,eAAYsR,KAAKjK,QAAQ0tC,eACrC90C,cAAa,GAAIL,UAAQS,MAAMiR,KAAKjK,QAAQ4gB,OAAOzyB,KAAM,QAAS8b,KAAK3Z,OAAO+X,YAAY,GAC1FmnC,GAAMngD,OAAS,IACfq/B,EAAa,GAAI/1B,eAAY62C,GACzB52C,cAAa,GAAIL,UAAQS,MAAM,UAAW,QAAS3K,GAAI,KAGnE,GAAIqgC,EAAWr/B,OAAS,EAAG,CACvB,GAAIogD,GAAOrhD,WAAS6b,KAAKjK,QAAQ4gB,OAAOvyB,GAAIqgC,EAAW,GACvDzkB,MAAKjK,QAAQnP,eAAiB4+C,GAC9BxlC,KAAKjK,QAAQgM,cAKzBm/B,EAAel3B,UAAUwf,YAAc,SAAUtgC,GAC7C,GAAgE,KAA5D8W,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAAiBgY,KAAK3Z,OAAO4B,WAG9E,CAED,GAAIjE,GAAOgc,KAAKjK,QAAQ0tC,cAEpBhf,IACJ,IAAIzkB,KAAK3Z,OAAO1B,MACZ8/B,EAAa,GAAI/1B,eAAY1K,GACzB2K,cAAa,GAAIL,UAAQS,MAAM,KAAM,QAASiR,KAAK3Z,OAAOghB,WAAW,QAExE,CAED,GAAIk+B,GAAQ,GAAI72C,eAAY1K,GACxB2K,cAAa,GAAIL,UAAQS,MAAMiR,KAAKjK,QAAQ4gB,OAAOzyB,KAAM,QAAS8b,KAAK3Z,OAAOwS,iBAAiB,GAC/F0sC,GAAMngD,OAAS,IACfq/B,EAAa,GAAI/1B,eAAY62C,GACzB52C,cAAa,GAAIL,UAAQS,MAAM,aAAc,QAASiR,KAAK3Z,OAAO0S,YAAY,KAGtF0rB,EAAWr/B,OAAS,IACpB4a,KAAK4hC,aAAez9C,WAAS6b,KAAKjK,QAAQ4gB,OAAO2rB,SAAU7d,EAAW,IACtEzkB,KAAK3Z,OAAOuP,WAAaoK,KAAK4hC,aAC9B5hC,KAAK3Z,OAAOgD,SAAW2W,KAAKyjC,YAAYzjC,KAAK4hC,cAC7Cr3C,GAAKyV,KAAK3Z,OAAQgY,GAAwB2B,KAAK3Z,OAAO0S,WAAWzL,QAAQ,MAAO,WAxBpF0S,MAAKykC,WAAWv7C,IA4BxBg4C,EAAel3B,UAAU8T,kBAAoB,SAAUte,GACnD,GAAIA,EAAEpN,SAAW4N,KAAK8Z,iBAAgC,WAAbta,EAAEpN,OAI3C,IAAK,GAAI4sB,GAAK,EAAGC,EAAKtmB,OAAOD,KAAK8G,EAAE0f,SAAUF,EAAKC,EAAG75B,OAAQ45B,IAE1D,OADWC,EAAGD,IAEV,IAAK,mBACDhf,KAAKwjC,aACL,MACJ,KAAK,yBACDj5C,GAAKyV,KAAK3Z,OAAQ6M,GAAoB,KAClCsM,EAAE07B,QAAQ3G,uBAAuBlmC,YAAcmR,EAAE0f,QAAQqV,uBAAuBlmC,YAChF2R,KAAKjK,QAAQ1H,UAAYmR,EAAE0f,QAAQqV,uBAAuBlmC,aAO9E6yC,EAAel3B,UAAUy7B,eAAiB,WACtCzlC,KAAK7G,cAET+nC,EAAel3B,UAAU00B,mBAAqB,SAAUl/B,GACpDQ,KAAKjK,QAAQnP,eAAiB4Y,EAAElM,eAEpC4tC,EAAel3B,UAAU07B,gBAAkB,SAAUlmC,GACjDQ,KAAK6kC,iBAAiBrlC,EAAElM,eAE5B4tC,EAAel3B,UAAU27B,UAAY,SAAUz8C,GAC3C,GAAIk4C,KAEAA,GADAphC,KAAK3Z,OAAOiP,cAAgB0K,KAAK3Z,OAAOmP,aAC5BwK,KAAK4lC,aAAa18C,EAAKc,MAAOgW,KAAK3Z,OAAOmP,aAAcwK,KAAK3Z,OAAO6N,UAGpE8L,KAAKohC,UAErBphC,KAAKjK,QAAQorC,YAAYC,IAG7BF,EAAel3B,UAAU47B,aAAe,SAAU57C,EAAO8Z,EAAMrf,GAE3D,IAAK,GADD28C,MACKj8C,EAAI,EAAGA,EAAI6E,EAAM5E,OAAQD,IAC9B,IAAK6E,EAAM7E,GAAG2T,SACLkH,KAAK3Z,OAAO1B,MAAO,CACpB,GAAIugC,GAAUl7B,EAAM7E,GAAgB,YACpC,IAAI2e,EAAM,CAEN,GAAInB,IADJle,GAAcuF,EAAM7E,GAAG0gD,cACNrzC,YAAY,IAC7B0yB,GAASzgC,EAAK8N,UAAUoQ,EAAQ,GAChCle,EAAOA,EAAK8N,UAAU,EAAGoQ,EAAQ,GAKrC,IAAK,GAFD8hB,GAAa,GAAI/1B,eAAYsR,KAAKjK,QAAQ0tC,eAC1C90C,cAAa,GAAIL,UAAQS,MAAMiR,KAAKjK,QAAQ4gB,OAAOzyB,KAAM,QAASghC,GAAQ,IACrEX,EAAI,EAAGA,EAAIE,EAAWr/B,OAAQm/B,IAAK,CACxC,GAAIn3B,GAAQjJ,WAAS,aAAcsgC,EAAWF,GAE9C,KADAn3B,EAAQA,EAAME,QAAQ,MAAO,QACf7I,EAAM,CAChB28C,EAAU97C,KAAKnB,WAAS6b,KAAKjK,QAAQ4gB,OAAOvyB,GAAIqgC,EAAWF,IAC3D,SAMpB,MAAO6c,IAEXF,EAAel3B,UAAU87B,SAAW,SAAU58C,GAC1C,GAAIk4C,KACAphC,MAAK3Z,OAAOiP,cAAgB0K,KAAK3Z,OAAOc,YACxC6Y,KAAKohC,UAAYphC,KAAK4lC,aAAa18C,EAAKc,MAAOgW,KAAK3Z,OAAOc,YAAa6Y,KAAK3Z,OAAOmB,YAGpF45C,EAAYphC,KAAKohC,UAErBphC,KAAKjK,QAAQorC,YAAYC,IAI7BF,EAAel3B,UAAUs6B,iBAAmB,SAAUyB,GAClD,GAAK/lC,KAAK3Z,OAAO1B,MAiBZ,CACD,GAAI2O,GAAe0M,KAAKjK,QAAQ0tC,cAAc35C,OAAO,SAAUk8C,GAAO,MAAOA,GAAI/3C,OAAS83C,EAAU93C,OAAS,EAC7G+R,MAAKjK,QAAQnP,eAAiBzC,WAAS,SAAUmP,IACjD0M,KAAKjK,QAAQgM,eApBO,CACpB,GAAItd,GAAON,WAAS,aAAc4hD,GAC9BE,EAAW9hD,WAAS,OAAQ4hD,GAE5B/hD,EAAO,GAAI0K,eAAYsR,KAAKjK,QAAQ0tC,eACpC90C,cAAa,GAAIL,UAAQS,MAAMiR,KAAKjK,QAAQ4gB,OAAOzyB,KAAM,QAAS+hD,GAAU,GAChF,IAAIjiD,EAAKoB,OAAS,EAAG,CAEjB,GAAIq/B,GAAa,GAAI/1B,eAAY1K,GAC7B2K,cAAa,GAAIL,UAAQS,MAAM,aAAc,QAAStK,GAAM,GAChE,IAAIggC,EAAWr/B,OAAS,EAAG,CACvB,GAAIhB,GAAKD,WAAS6b,KAAKjK,QAAQ4gB,OAAOvyB,GAAIqgC,EAAW,GACrDzkB,MAAKjK,QAAQnP,eAAiBxC,GAC9B4b,KAAKjK,QAAQgM,eAU7Bm/B,EAAel3B,UAAU6U,WAAa,SAAU31B,GAC5C8W,KAAKye,WAAWv1B,GAChB8W,KAAKskC,iBAAiBtkC,KAAK3Z,OAAOoO,UAClCuL,KAAK3Z,OAAOkP,WAAayK,KAAK3Z,OAAOiP,cAEzC4rC,EAAel3B,UAAUyU,WAAa,SAAUv1B,GAE5C,GAAIu7B,KACJ,IAAIzkB,KAAK3Z,OAAO1B,MACZ8/B,EAAa,GAAI/1B,eAAYsR,KAAKjK,QAAQ0tC,eACtC90C,cAAa,GAAIL,UAAQS,MAAM,KAAM,QAAS5K,WAAS,KAAM+E,EAAK0L,MAAM,QAE3E,CAED,GAAI2wC,GAAQ,GAAI72C,eAAYsR,KAAKjK,QAAQ0tC,eACrC90C,cAAa,GAAIL,UAAQS,MAAMiR,KAAKjK,QAAQ4gB,OAAOzyB,KAAM,QAASC,WAAS,OAAQ+E,EAAK0L,MAAM,GAC9F2wC,GAAMngD,OAAS,IACfq/B,EAAa,GAAI/1B,eAAY62C,GACzB52C,cAAa,GAAIL,UAAQS,MAAM,aAAc,QAAS5K,WAAS,aAAc+E,EAAK0L,MAAM,KAGpG,GAAI6vB,EAAWr/B,OAAS,EAAG,CACvB,GAAIhB,GAAKD,WAAS6b,KAAKjK,QAAQ4gB,OAAOvyB,GAAIqgC,EAAW,IACjDkgB,GAAuD,IAA5C3kC,KAAKjK,QAAQ6uC,cAAcv4C,QAAQjI,EAClD4b,MAAK6kC,iBAAiBzgD,GACtB4b,KAAK6jC,SAAS36C,EAAKc,MAAO5F,EAAIugD,GAElC3kC,KAAK3Z,OAAOuP,WAAa,KACzBoK,KAAKoc,cAAclzB,GACf8W,KAAK3Z,OAAOmN,YACZwM,KAAKkmC,cAAch9C,IAI3Bg4C,EAAel3B,UAAUk8B,cAAgB,SAAUh9C,GAC/C,GAAI8W,KAAK3Z,OAAO1B,MAGZ,MAFAqb,MAAK3Z,OAAOkP,WAAayK,KAAK3Z,OAAOiP,iBACrCK,GAAaqK,KAAK3Z,SAGsD,IAAvE2Z,KAAK3Z,OAAO4N,SAAS5H,QAAQsI,EAAiBqL,KAAK3Z,OAAQ6C,KAC5D8W,KAAK3Z,OAAOkP,WAAY,EACxBI,EAAaqK,KAAK3Z,SAGlB2Z,KAAK3Z,OAAOkP,WAAayK,KAAK3Z,OAAOiP,cAG7C4rC,EAAel3B,UAAUwU,YAAc,WAC/Bxe,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,iBAClC9Z,KAAKklC,iBAETllC,KAAKohC,YAGL,KAAK,GADD4E,GAAMhmC,KAAK3Z,OAAOmN,WAAawM,KAAK3Z,OAAOmO,SAAWwL,KAAK3Z,OAAOQ,cAC7D1B,EAAI,EAAGA,EAAI6gD,EAAI5gD,OAAQD,KACO,IAA/BhB,WAAS,SAAU6hD,EAAI7gD,KACvB6a,KAAKohC,UAAU97C,KAAKnB,WAAS,SAAU6hD,EAAI7gD,MAIvD+7C,EAAel3B,UAAU0U,cAAgB,WACjC1e,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,kBAClC9Z,KAAK3Z,OAAOwB,cAAgBmY,KAAKyjC,YAAYzjC,KAAKjK,QAAQnP,cAAc,IACxEoZ,KAAK3Z,OAAOe,gBAAkB4Y,KAAKmrB,cAG3C+V,EAAel3B,UAAU6I,iBAAmB,WACxC7S,KAAK3Z,OAAOy4B,GAAGjB,GAAqB7d,KAAK8d,kBAAmB9d,MAC5DA,KAAK3Z,OAAOy4B,GRvjBM,gBQujBkB9e,KAAKylC,eAAgBzlC,MACzDA,KAAK3Z,OAAOy4B,GAAG3rB,GAAmB6M,KAAK+6B,aAAc/6B,MACrDA,KAAK3Z,OAAOy4B,GAAG5rB,GAAoB8M,KAAK0b,cAAe1b,MACvDA,KAAK3Z,OAAOy4B,GAAGxgB,GAAoB0B,KAAKoc,cAAepc,MACvDA,KAAK3Z,OAAOy4B,GAAGppB,GAAiBsK,KAAKye,WAAYze,MACjDA,KAAK3Z,OAAOy4B,GAAG9pB,GAAegL,KAAK8lC,SAAU9lC,MAC7CA,KAAK3Z,OAAOy4B,GAAGnrB,GAAkBqM,KAAKwe,YAAaxe,MACnDA,KAAK3Z,OAAOy4B,GRtmBI,cQsmBkB9e,KAAKukC,eAAgBvkC,MACvDA,KAAK3Z,OAAOy4B,GAAG9gB,GAAkBgC,KAAK2b,YAAa3b,MACnDA,KAAK3Z,OAAOy4B,GRxlBM,gBQwlBkB9e,KAAK6b,eAAgB7b,MACzDA,KAAK3Z,OAAOy4B,GAAGrX,GAAmBzH,KAAK+b,aAAc/b,MACrDA,KAAK3Z,OAAOy4B,GAAGpgB,GAAkBsB,KAAKgc,YAAahc,MACnDA,KAAK3Z,OAAOy4B,GAAG1zB,GAAmB4U,KAAKic,aAAcjc,MACrDA,KAAK3Z,OAAOy4B,GRhlBa,wBQglBkB9e,KAAK0+B,mBAAoB1+B,MACpEA,KAAK3Z,OAAOy4B,GAAGlB,GAAiB5d,KAAKuc,WAAYvc,MACjDA,KAAK3Z,OAAOy4B,GAAGtzB,GAAgBwU,KAAK+kC,UAAW/kC,MAC/CA,KAAK3Z,OAAOy4B,GAAG6K,GAAgB3pB,KAAKiQ,QAASjQ,MAC7CA,KAAK3Z,OAAOy4B,GAAGZ,GAAmBle,KAAKkc,aAAclc,MACrDA,KAAK3Z,OAAOy4B,GAAGvgB,GAAkByB,KAAKwpB,YAAaxpB,MACnDA,KAAK3Z,OAAOy4B,GAAGzgB,GAAwB2B,KAAKslC,kBAAmBtlC,MAC/DA,KAAK3Z,OAAOy4B,GAAGzrB,GAAsB2M,KAAK0lC,gBAAiB1lC,MAC3DA,KAAK3Z,OAAOy4B,GAAGz3B,GAAoB2Y,KAAK0e,cAAe1e,MACvDA,KAAK3Z,OAAOy4B,GAAGrnB,GAAiBuI,KAAK6Z,WAAY7Z,MACjDA,KAAK3Z,OAAOy4B,GAAGX,GAAqBne,KAAKoe,eAAgBpe,MACzDA,KAAK3Z,OAAOy4B,GAAG/pB,GAAgBiL,KAAK2lC,UAAW3lC,MAC/CA,KAAK3Z,OAAOy4B,GAAGvmB,GAAiByH,KAAKmmC,WAAYnmC,MACjDA,KAAK3Z,OAAOy4B,GAAG7oB,GAAiB+J,KAAK6e,WAAY7e,MACjDA,KAAK3Z,OAAOy4B,GAAGH,GAAoB3e,KAAK4e,cAAe5e,MACvDA,KAAK3Z,OAAOy4B,GAAGjpB,GAAiBmK,KAAKqkC,WAAYrkC,OAErDkhC,EAAel3B,UAAUiM,oBAAsB,WAC3CjW,KAAK3Z,OAAOs3B,IAAIxqB,GAAmB6M,KAAK+6B,cACxC/6B,KAAK3Z,OAAOs3B,IRvlBM,gBQulBmB3d,KAAKylC,gBAC1CzlC,KAAK3Z,OAAOs3B,IAAIzqB,GAAoB8M,KAAK0b,eACzC1b,KAAK3Z,OAAOs3B,IRjnBM,gBQinBmB3d,KAAK6b,gBAC1C7b,KAAK3Z,OAAOs3B,IAAIE,GAAqB7d,KAAK8d,mBAC1C9d,KAAK3Z,OAAOs3B,IAAIrf,GAAoB0B,KAAKoc,eACzCpc,KAAK3Z,OAAOs3B,IAAIjoB,GAAiBsK,KAAKye,YACtCze,KAAK3Z,OAAOs3B,IAAI3oB,GAAegL,KAAK8lC,UACpC9lC,KAAK3Z,OAAOs3B,IAAIhqB,GAAkBqM,KAAKwe,aACvCxe,KAAK3Z,OAAOs3B,IR3mBa,wBQ2mBmB3d,KAAK0+B,oBACjD1+B,KAAK3Z,OAAOs3B,IRxoBI,cQwoBmB3d,KAAKukC,gBACxCvkC,KAAK3Z,OAAOs3B,IAAI3f,GAAkBgC,KAAK2b,aACvC3b,KAAK3Z,OAAOs3B,IAAIvyB,GAAmB4U,KAAKic,cACxCjc,KAAK3Z,OAAOs3B,IAAIC,GAAiB5d,KAAKuc,YACtCvc,KAAK3Z,OAAOs3B,IAAInyB,GAAgBwU,KAAK+kC,WACrC/kC,KAAK3Z,OAAOs3B,IAAIgM,GAAgB3pB,KAAKiQ,SACrCjQ,KAAK3Z,OAAOs3B,IAAIO,GAAmBle,KAAKkc,cACxClc,KAAK3Z,OAAOs3B,IAAIpf,GAAkByB,KAAKwpB,aACvCxpB,KAAK3Z,OAAOs3B,IAAItf,GAAwB2B,KAAKslC,mBAC7CtlC,KAAK3Z,OAAOs3B,IAAItqB,GAAsB2M,KAAK0lC,iBAC3C1lC,KAAK3Z,OAAOs3B,IAAIlW,GAAmBzH,KAAK+b,cACxC/b,KAAK3Z,OAAOs3B,IAAIjf,GAAkBsB,KAAKgc,aACvChc,KAAK3Z,OAAOs3B,IAAIt2B,GAAoB2Y,KAAK0e,eACzC1e,KAAK3Z,OAAOs3B,IAAIlmB,GAAiBuI,KAAK6Z,YACtC7Z,KAAK3Z,OAAOs3B,IAAI5oB,GAAgBiL,KAAK2lC,WACrC3lC,KAAK3Z,OAAOs3B,IAAIplB,GAAiByH,KAAKmmC,YACtCnmC,KAAK3Z,OAAOs3B,IAAI1nB,GAAiB+J,KAAK6e,YACtC7e,KAAK3Z,OAAOs3B,IAAIgB,GAAoB3e,KAAK4e,eACzC5e,KAAK3Z,OAAOs3B,IAAIQ,GAAqBne,KAAKoe,gBAC1Cpe,KAAK3Z,OAAOs3B,IAAI9nB,GAAiBmK,KAAKqkC,aAG1CnD,EAAel3B,UAAU4U,cAAgB,WACrC,GAAI5e,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,gBAAiB,CAEnD,GAAIssB,GAAUpmC,KAAKyjC,YAAYzjC,KAAKjK,QAAQnP,cAAc,GAC1DoZ,MAAK3Z,OAAOgD,SAAW+8C,IAI/BlF,EAAel3B,UAAUoU,eAAiB,SAAUl1B,GAChD,GAAI8W,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,gBAAiB,CACnD,GAAI+P,GAAQjhC,UAAQM,EAAKsO,OAAQ,KACjCwI,MAAK3Z,OAAOgD,SAAW2W,KAAKyjC,YAAY5Z,EAAMxlC,aAAa,eAInE68C,EAAel3B,UAAUm8B,WAAa,SAAUj9C,GAC5C,GAAIuN,GAAM7N,UAAQM,EAAKsO,OAAQ,KAC/B,IAAIf,EAAIxQ,UAAUC,SAAS,oBAAqB,CAC5C8Z,KAAKshC,QAAS,CACd,IAAI+E,GAAQ/iB,SAAS7sB,EAAIpS,aAAa,cAAe,GACrD2b,MAAKjK,QAAQkvC,WAAWxuC,EAAIpS,aAAa,aAAcgiD,EAAQ,GAC/DrmC,KAAKshC,QAAS,IAGtBJ,EAAel3B,UAAU6P,WAAa,SAAU3wB,GAC5C,GAAI8W,KAAK3Z,OAAO4E,eAAiB+U,KAAK8Z,gBAAiB,CACnD,GAAIC,GAASnxB,UAAQM,EAAKsO,OAAQ,KAClCwI,MAAK3Z,OAAOoO,SAAWuL,KAAKyjC,YAAY1pB,GAAQ,GAChD/Z,KAAK3Z,OAAO4N,SAAW+L,KAAK2jC,YAAY5pB,EAAQ51B,WAAS,OAAQ6b,KAAK3Z,OAAOoO,aASrFysC,EAAel3B,UAAU8P,cAAgB,WACrC,MAAO,kBAEXonB,EAAel3B,UAAUiG,QAAU,WAC3BjQ,KAAK3Z,OAAOq3B,cAGhB1d,KAAKiW,sBACDjW,KAAKjK,UACLiK,KAAKgW,eACLhW,KAAKjK,QAAQka,aAGrBixB,EAAel3B,UAAUoO,WAAa,WAClCpY,KAAKqf,eAAiB,GAAIC,kBAAetf,KAAKjK,QAAQ/Q,SAClDu6B,UAAWvf,KAAKsmC,QAAQvmC,KAAKC,MAC7B8S,WAAY9S,KAAK8S,WACjB7f,UAAW,aAGnBiuC,EAAel3B,UAAUgM,aAAe,WACpChW,KAAKqf,eAAepP,WAGxBixB,EAAel3B,UAAUs8B,QAAU,SAAU9mC,GAEzC,OADaA,EAAEtY,QAEX,IAAK,WACD8Y,KAAK3Z,OAAOU,OAAO43B,OACnBhjB,GAAWqE,KAAK3Z,UAAY2Z,KAAK3Z,OAAO5B,KAAM,UAC9C,MACJ,KAAK,MACDgC,EAAauZ,KAAK3Z,OAClB,MACJ,KAAK,MACG2Z,KAAK3Z,OAAOzB,OAAO,KAAOob,KAAKmrB,WAAW9mC,aAAa,cACvD2b,KAAKklC,iBACAjsC,GAAc+G,KAAK3Z,OAAOgD,SAAS,KAIpC2W,KAAKmhC,eACLttC,GAAamM,KAAK3Z,OAAQ,WAJ1BgF,GAAmB2U,KAAK3Z,OAAQ2Z,KAAK3Z,OAAOgD,SAAS,GAAI6P,IAOjE,MACJ,KAAK,QACDzN,EAAUuU,KAAK3Z,OACf,MACJ,KAAK,QACD2Z,KAAK3Z,OAAOoN,WAAa,GACzBF,EAAayM,KAAK3Z,OAClB,MACJ,KAAK,QACDsF,EAASqU,KAAK3Z,OACd,MACJ,KAAK,WAED,GADA2Z,KAAKklC,kBACA9rC,GAAkB4G,KAAK3Z,OAAOgD,SAAS,IAExC,WADAgC,IAAmB2U,KAAK3Z,OAAQ2Z,KAAK3Z,OAAOgD,SAAS,GAAIgQ,GAGpB,KAArC2G,KAAK3Z,OAAO8B,cAAc/C,QAC1B4a,KAAK7G,YAET,MACJ,KAAK,KACD,GAAyC,IAArC6G,KAAK3Z,OAAO8B,cAAc/C,OAAc,CAExC,GAAIpB,GAAOgc,KAAKyjC,YAAYzjC,KAAKjK,QAAQnP,cAAc,IAAI,EACtDqS,IAAcjV,IAIfgc,KAAKmc,mBACLtoB,GAAamM,KAAK3Z,OAAQ,WAJ1BgF,GAAmB2U,KAAK3Z,OAAQrC,EAAMkV,OAW1DgoC,EAAel3B,UAAUy5B,YAAc,SAAUv6C,GAG7C,IAAK,GADDlF,GAAOgc,KAAKjK,QAAQ0tC,YAAYv6C,GAC3B/D,EAAI,EAAGA,EAAInB,EAAKoB,OAAQD,IACzBZ,oBAAMJ,WAAS,WAAYH,EAAKmB,MAChC+L,WAAS,YAAY,EAAOlN,EAAKmB,GAGzC,OAAOnB,IAEXk9C,EAAel3B,UAAUmS,iBAAmB,WACxCnc,KAAKklC,iBACLllC,KAAK3Z,OAAOwS,gBAAkB1U,WAAS,OAAQ6b,KAAK3Z,OAAOgD,SAAS,KAExE63C,EAAel3B,UAAUk7B,eAAiB,WAEtC,GAAIlhD,GAAOgc,KAAKyjC,YAAYzjC,KAAKjK,QAAQnP,cAAc,IAAI,EAC3DoZ,MAAK3Z,OAAOgD,UAAYrF,GACxBgc,KAAK3Z,OAAOyS,QAAS,GAEzBooC,EAAel3B,UAAUm7B,iBAAmB,WACxCnlC,KAAKklC,gBACL,IAAI3+C,GAAUkB,EAAcuY,KAAK3Z,OAAO5B,KACxCub,MAAK3Z,OAAO7B,eAAgBC,KAAM8B,IAAW,GAC7CyZ,KAAK3Z,OAAOzB,OAAO6Y,MACnBuC,KAAK3Z,OAAOvB,UAAU2Y,OAG1ByjC,EAAel3B,UAAU7Q,WAAa,WAClC,GAAI5S,GAAUkB,EAAcuY,KAAK3Z,OAAO5B,MAEpCwJ,EADS+R,KAAKjK,QAAQnP,cAAc,KACjBoZ,KAAK3Z,OAAOzB,OAAO,GAAM,GAAKT,WAAS,OAAQ6b,KAAK3Z,OAAOgD,SAAS,GAC3FiQ,IAAS0G,KAAK3Z,OAAQE,GAAU0H,KAE7BizC,KCz2BPqF,GAA6B,WAO7B,QAASA,GAAYlgD,GACjB2Z,KAAKsC,cAAe,EACpBtC,KAAKwmC,aAAc,EACnBxmC,KAAK0S,kBAAmB,EACxB1S,KAAKymC,iBAAkB,EACvBzmC,KAAKpI,QAAU,KACfoI,KAAKghB,WAAa,KAClBhhB,KAAK0mC,eAAiB,KACtB1mC,KAAK2mC,mBAAoB,EACzB3mC,KAAK4mC,uBACL5mC,KAAK7K,MAAQ,EACb6K,KAAKuS,YAAa,EAClBvS,KAAK6mC,UAAW,EAChB7mC,KAAK8mC,aAAc,EACnB9mC,KAAK5E,gBAAiB,EACtB4E,KAAKsS,iBAAkB,EAGvBtS,KAAK+mC,cAAe,EACpBC,OAAKjT,OAAOkT,SAAQnd,cAAaod,OAAMC,iBACvCnnC,KAAK3Z,OAASA,EACd2Z,KAAKhb,QAAUc,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKgoC,GAAapsB,KAAK3Z,OAAOrB,SAC9Egb,KAAK6S,mBACL7S,KAAK8S,YACDgC,SAAU,YACVC,IAAK,SACL9B,IAAK,MACLC,SAAU,YACVI,QAAS,WACTC,SAAU,YACVC,SAAU,iBACVC,SAAU,iBACVC,UAAW,kBACXE,SAAU,YACVC,UAAW,aACXC,UAAW,kBACXG,QAAS,gBACTN,OAAQ,eACRO,MAAO,iBACPC,OAAQ,kBACRC,OAAQ,uBACRG,KAAM,qBACNC,MAAO,QACPC,UAAW,aACXC,WAAY,cACZC,QAAS,mBACT5B,IAAK,MACLC,KAAM,OACNK,OAAQ,UACR2B,IAAK,SACLC,MAAOjV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrCC,MAAOnV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrCE,MAAOpV,KAAK3Z,OAAO6uB,MAAQ,QAAU,SACrC8sB,WAAY,eACZ1sB,SAAU,eACVE,MAAO,SACPH,GAAI,KACJT,MAAO,SACPC,MAAO,SAozDf,MAhzDA0xB,GAAYv8B,UAAUyL,OAAS,SAAUvsB,GAErC,GADA0sB,cAAY5V,KAAK3Z,OAAOrB,SACC,YAArBgb,KAAK3Z,OAAOoE,KAAoB,CAChC42B,eAAarhB,KAAK3Z,OAAOrB,SV9BX,gBUgCd,IAAImJ,GAAQD,EAAc8R,KAAK3Z,OAAQ6C,EAAKc,MAC5CgW,MAAKonC,gBACL,IAAIz0C,GAAUqN,KAAKqnC,aACfC,MAAe,EACftnC,MAAK3Z,OAAO6L,SACZo1C,KAG8B,SAA1BtnC,KAAK3Z,OAAOgI,YACZi5C,IAAkBC,UAAWvnC,KAAK3Z,OAAOgI,UAAWoE,MAAOuN,KAAK3Z,OAAOkI,UAG/EyR,KAAK7V,QAAU,GAAI68C,SACf58C,WAAY+D,EACZq5C,cAAc,EACdC,aAAcznC,KAAK0nC,YAAY3nC,KAAKC,KAAM,UAC1C2nC,eAAgB3nC,KAAK0nC,YAAY3nC,KAAKC,KAAM,YAC5C4nC,YAAa5nC,KAAKo5B,WAAWr5B,KAAKC,MAClC6nC,cAAe7nC,KAAK8nC,cAAc/nC,KAAKC,MACvC+nC,cAAe/nC,KAAK3Z,OAAOqM,oBAAoBs1C,eAC/CC,mBACIlsC,KAAMiE,KAAK3Z,OAAO84B,oBAAsB,WAAa,SACrD+oB,aAAc,kBACdC,mBAAmBnoC,KAAK3Z,6BAE5B8a,UAAWnB,KAAK3Z,OAAO8a,UACvBinC,cAAgBC,SAAU,IAC1BnxB,qBAAsBlX,KAAK3Z,OAAO6wB,qBAClCoxB,kBAAmBtoC,KAAK3Z,OAAOiiD,kBAC/BC,sBAAsB,EACtBjB,cAAgBkB,aAAa,EAAO71C,QAAS20C,GAC7C30C,QAASA,EACT81C,kBAAmBzoC,KAAK0oC,eAAe3oC,KAAKC,MAC5C2oC,gBAAiB3oC,KAAK4oC,kBAAkB7oC,KAAKC,MAC7CujC,UAAWvjC,KAAK6oC,YAAY9oC,KAAKC,MACjC8oC,aAAc9oC,KAAK+oC,eAAehpC,KAAKC,MACvCgpC,YAAahpC,KAAKipC,cAAclpC,KAAKC,MACrCkpC,eAAgBlpC,KAAKmpC,iBAAiBppC,KAAKC,MAC3CgB,MAAO,OACPmH,OAASnI,KAAK3Z,4BAA+B2Z,KAAKopC,gBAAkB,OACpEC,WAAY,SAAUngD,GAAQA,EAAK6N,QAAS,GAE5CuyC,KAAM,SAAUpgD,GACZ8W,KAAKupC,YAAYt5B,WAErBve,OAAQsO,KAAK3Z,OAAOqL,SAEpBsO,KAAK3Z,OAAOmjD,UACZxpC,KAAK7V,QAAQq/C,SAAU,EACvBxpC,KAAK7V,QAAQs/C,WACbzpC,KAAK7V,QAAQ20B,GAAG,sBAAuB9e,KAAK0pC,oBAAqB1pC,OAErEA,KAAK7V,QAAQkX,kBAAmB,EAChCrB,KAAK7V,QAAQmX,SAAS,IAAMtB,KAAK3Z,OAAOrB,QAAQZ,GAAKgoC,IACrDpsB,KAAKoY,aACLpY,KAAKmX,eACLnX,KAAK2pC,UAAYzgD,IAGzBq9C,EAAYv8B,UAAU0/B,oBAAsB,SAAUxgD,GAClD8W,KAAK3Z,OAAgB,QAAI6C,EACzB8W,KAAK3Z,OAAOU,OAAO,sBAAuBiZ,KAAK3Z,OAAgB,SAC/D2Z,KAAK3Z,OAA6B,wBAOtCkgD,EAAYv8B,UAAUo/B,cAAgB,WAElC,GAAIlvB,GAAOp0B,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKkT,GAAgB0I,KAAK3Z,OAAOrB,SACzEm1B,EAAMr0B,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKiL,GAAsB2Q,KAAK3Z,OAAOrB,QAIlF,OAAQk1B,GAAK5qB,aAAe6qB,EAAI7qB,aAFV,IAI1Bi3C,EAAYv8B,UAAUo9B,eAAiB,WACnC,GAAIwC,GAAgB5pC,KAAK3Z,OAAOqM,oBAAoBC,OACpDqN,MAAK8mC,aAAc,CACnB,KAAK,GAAI3hD,GAAI,EAAGA,EAAIykD,EAAcxkD,OAAQD,IACtC,GAA+B,SAA3BykD,EAAczkD,GAAGsN,MAEjB,YADAuN,KAAK8mC,aAAeviD,oBAAMqlD,EAAczkD,GAAG6b,SAKvDulC,EAAYv8B,UAAU6/B,YAAc,SAAUl3C,EAASm3C,GACnD,IAAI9pC,KAAK8mC,aAA8B,SAAdgD,EAGzB,IAAK,GAAI3kD,GAAI,EAAGA,EAAIwN,EAAQvN,OAAQD,IAChC,GAAIwN,EAAQxN,GAAGsN,QAAUq3C,EAAW,CAChC,GAAIC,OAAY,EAKZA,GAJ4D,KAA5D/pC,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAAiBgY,KAAK3Z,OAAO4B,WAIlE+X,KAAKhb,QAAQ+hC,aAAe,IAAuB,SAAd+iB,EAAwB,QAAU,QAAW,OAHlF9pC,KAAKhb,QAAQ+hC,aAAe,IAAO,QAAU,OAK9Dp0B,EAAQxN,GAAG6b,MAAQ+oC,IAI/BxD,EAAYv8B,UAAUq9B,WAAa,WAC/B,GAAI10C,EACJ,IAAIqN,KAAK3Z,OAAO6L,SACZS,IAEQF,MAAO,OAAQ4Y,WAAY9a,EAAcyP,KAAK3Z,OAAQ,QAAS2a,MAAO,OAAQsK,SAAU,IAAK0+B,gBAAiB,OAC9Gx+B,SAAUC,wBAAsB,SAAUznB,GACtC,MAAO,0BAA8BA,EAAKiK,KAAO,gCAAoCjK,EAAKimD,aAAe,iEAAmEjmD,EAAKiiB,KAAO,kBAKnM,CACDtT,EAAUmI,YAAWkF,KAAK3Z,OAAOqM,oBAAoBC,QAAS,MAAM,GACpEqN,KAAK6pC,YAAYl3C,EAAS,OAC1B,KAAK,GAAIxN,GAAI,EAAG8L,EAAM0B,EAAQvN,OAAQD,EAAI8L,EAAK9L,IAC3CwN,EAAQxN,GAAGkmB,WAAa9a,EAAcyP,KAAK3Z,OAAQsM,EAAQxN,GAAGkmB,YAGtE,GAAI6+B,GAAWlqC,KAAK3Z,OAAO6L,UAAY8N,KAAK3Z,OAAOmuC,SAAY,KAAO,KAClEnZ,GACA5oB,MAAO,OAAQuO,MAAOkpC,EAAQ5+B,SAAU4+B,EACxC1+B,SAAUC,wBAAsB,SAAUznB,GACtC,MAAO,0BAA6BA,EAAKmmD,cAAgB,cACzDpC,eAAe,EAAOP,cAAc,EAAM97B,kBAAoBC,MAAO,kBACzEy+B,eAAgB3+B,wBAAsB,WAClC,MAAO,gDAIf,IADA9Y,EAAQ03C,QAAQhvB,GACZrb,KAAK3Z,OAAOm0B,mBAAoB,CAChC,GAAI8vB,GAAUtqC,KAAK3Z,OAAOmuC,SAAW,KAAO,KACxC+V,GACAxuC,KAAM,WAAYiF,MAAOspC,EAAQh/B,SAAUg/B,EAAQ5+B,kBAAoBC,MAAO,iBAC9Eo8B,eAAe,EAAOP,cAAc,EAEpCxnC,MAAK3Z,OAAO6L,SACZS,EAAQrN,KAAKilD,GAGb53C,EAAQ03C,QAAQE,GAGxB,IAAK,GAAIplD,GAAI,EAAG8L,EAAM0B,EAAQvN,OAAQD,EAAI8L,EAAK9L,IAC3CwN,EAAQxN,GAAGqlD,mBAAqBxqC,KAAK3Z,OAAO+a,mBAEhD,OAAOzO,IAEX4zC,EAAYv8B,UAAUmN,aAAe,WACjC,GAAKnX,KAAK7V,QAAV,CAGA,GAAI+vB,GAAOp0B,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKkT,GAAgB0I,KAAK3Z,OAAOrB,SACzEm1B,EAAMr0B,SAAO,IAAMka,KAAK3Z,OAAOrB,QAAQZ,GAAKiL,GAAsB2Q,KAAK3Z,OAAOrB,SAC9EylD,EAAa3kD,SAAO,IAAMyJ,GAAiByQ,KAAK3Z,OAAOrB,SACvDmjB,EAAU+R,EAAK5qB,aAAe6qB,EAAI7qB,aAAem7C,EAAWn7C,YAChE0Q,MAAK7V,QAAQge,OAASA,EACtBnI,KAAK7V,QAAQ4X,aAEjBwkC,EAAYv8B,UAAU0gC,eAAiB,WACnC1qC,KAAK7V,QAAQwI,QAAUqN,KAAKqnC,aAC5BrnC,KAAKymC,iBAAkB,EACvBzmC,KAAK7V,QAAQwgD,kBAEjBpE,EAAYv8B,UAAU++B,eAAiB,SAAU7/C,GAC7C,GAAI0hD,GAAK9kD,SAAO,kBAAmBoD,EAAK2hD,IACxC,KAAKD,EAED,IAAK,GADDj4C,GAAUqN,KAAK3Z,OAAOqM,oBAAoBC,QACrCxN,EAAI,EAAGA,EAAIwN,EAAQvN,OAAQD,IAChC,GAAyB,SAArBwN,EAAQxN,GAAGsN,MAAkB,CAC7Bm4C,EAAK1hD,EAAK2hD,IAAIhiB,SAAS7oB,KAAK3Z,OAAO84B,oBAAuBh6B,EAAI,EAAMA,EAAI,EACxE,OAaZ,GATIylD,GACAA,EAAG90B,aAAa,QAAS3xB,WAAS,OAAQ+E,EAAKlF,OAE/Cgc,KAAK3Z,OAAO0C,gBAAkBiX,KAAK3Z,OAAOK,OAAoC,SAA3BsZ,KAAK3Z,OAAOqF,YAC/DsU,KAAK3Z,OAAOO,eAAsD,IAArCoZ,KAAK3Z,OAAOO,cAAcxB,SACiB,IAApE4a,KAAK3Z,OAAOO,cAAcyF,QAAQlI,WAAS,OAAQ+E,EAAKlF,QACxD2D,EAAQuB,EAAK2hD,MAGhB7qC,KAAK3Z,OAAOif,mBAAqBnhB,WAAS,SAAU+E,EAAKlF,MAAO,CACjE,GAAIs2B,GAAUpxB,EAAK2hD,IAAIr7C,cAAc,aACrC,IAAI8qB,EAAS,CACT,GAAIgB,GAASn3B,WAAS,OAAQ+E,EAAKlF,MAC/B+X,EAAO5X,WAAS,OAAQ+E,EAAKlF,KACjCs2B,GAAQhqB,UAAYgrB,EAAOhV,OAAO,EAAGgV,EAAOl2B,OAAS2W,EAAK3W,SAGlE,OAAoC+gB,KAAhChiB,WAAS,OAAQ+E,EAAKlF,OAAuBkF,EAAK2hD,IAAIr7C,cAAc,cAAe,CACnF,GAAIs7C,GAAU5hD,EAAK2hD,IAAIr7C,cAAc,cACjCu7C,MAAe,EACnB,IAAK5mD,WAAS,SAAU+E,EAAKlF,MAGxB,CAKD,IAAK,GAJDgnD,GAAY7mD,WAAS,OAAQ+E,EAAKlF,MAClCgZ,EAAO,GAAIC,wBAAqB+C,KAAK3Z,OAAOqL,QAC5Cu5C,MAAa,GACbt4C,EAAUqN,KAAK3Z,OAAOqM,oBAAoBC,QACrCxN,EAAI,EAAGA,EAAIwN,EAAQvN,OAAQD,IAChC,GAAyB,SAArBwN,EAAQxN,GAAGsN,MAAkB,CAC7Bw4C,EAAcxlB,oBAAkB9yB,EAAQxN,GAAGsM,QAAyC,IAA/BkB,EAAQxN,GAAGsM,OAAO7D,UACvE,OAIRm9C,EADY/tC,EAAKkuC,aAAcF,EAAY,MAASv5C,OAAQw5C,IACrC,IAAM16C,EAAcyP,KAAK3Z,OAAQ,UAdxD0kD,GAAe,EAgBnBD,GAAQx6C,UAAYy6C,EAExB,GAAI/qC,KAAK3Z,OAAO6L,cACgCiU,KAAxChiB,WAAS,eAAgB+E,EAAKlF,OAAuBkF,EAAK2hD,IAAIr7C,cAAc,cAAe,CAM3F,IAAK,GALD27C,GAAUjiD,EAAK2hD,IAAIr7C,cAAc,cACjCwN,EAAO,GAAIC,wBAAqB+C,KAAK3Z,OAAOqL,QAC5CiB,EAAUqN,KAAK3Z,OAAOqM,oBAAoBC,QAE1ClB,MAAS,GACJtM,EAAI,EAAGA,EAAIwN,EAAQvN,OAAQD,IAChC,GAAyB,iBAArBwN,EAAQxN,GAAGsN,MAA0B,CACrChB,EAASkB,EAAQxN,GAAGsM,MACpB,OAGR,GAAIiU,GAAkB1I,EAAKxL,WAAW,GAAI9D,MAAKvJ,WAAS,eAAgB+E,EAAKlF,OAAQyN,EACrF05C,GAAQ76C,UAAYoV,EAG5B,GAAI0lC,GAAYliD,EAAK2hD,IAAIr7C,cAAc,IAAM40B,GACzCgnB,IACAA,EAAUnlD,UAAUoC,IAAI,WAEvB4Q,GAAc/P,EAAKlF,QACpBkF,EAAK2hD,IAAIj7C,WAAa,IAAM+J,GAAezQ,EAAKlF,MAEpD,IAAIuJ,IACAvI,QAASkE,EAAK2hD,IACdr9C,YAAatE,EAAKlF,KAClBoO,OAAQ,cAEZ4N,MAAK3Z,OAAOwH,QAAQ,WAAYN,IAEpCg5C,EAAYv8B,UAAUi/B,cAAgB,SAAU//C,GAC5C,GAAyB,YAArBA,EAAKmiD,YAA2B,CAGhC,GAFArrC,KAAK3Z,OAAO7B,eAAgB6J,UAAWnF,EAAKq+C,YAAa,GACzDvnC,KAAK3Z,OAAO7B,eAAgB+J,OAAQrF,EAAKoiD,aAAc,GACd,IAArCtrC,KAAK3Z,OAAO8B,cAAc/C,OAAc,CACxC4a,KAAKurC,UAAW,CAChB,IAAIC,GAAOxrC,KAAK7V,QAAQshD,wBACpBx6C,EAAMu6C,EAAKpmD,MAEf,KADA4a,KAAK0rC,qBACEz6C,EAAM,GAAG,CAEZ,GAAIjN,GAAOgc,KAAK7V,QAAQwhD,gBAAgBH,EAAKv6C,EAAM,IAAIjN,IACvDgc,MAAK0rC,kBAAkBpmD,KAAKnB,WAAS6b,KAAK3Z,OAAO1B,MAAQ,KAAO,OAAQX,IACxEiN,KAGR+O,KAAK3Z,OAAOU,OAAOsL,SAG3Bk0C,EAAYv8B,UAAUm/B,iBAAmB,SAAUjgD,GAC/C,GAAIkiD,GAAYliD,EAAKnF,KAAKyL,cAAc,IAAM40B,GAC1CgnB,IACAA,EAAUnlD,UAAUoC,IAAI,YAGhCk+C,EAAYv8B,UAAU4+B,kBAAoB,SAAU1/C,GAChD0sB,cAAY5V,KAAK3Z,OAAOrB,QAExB,IAAImJ,GAAQD,EAAc8R,KAAK3Z,OAAS2Z,KAAK3Z,4BAA+B6C,EAAK4H,OAASkP,KAAK7V,QAAQC,WACvGlB,GAAK4H,OAAS3C,GAGlBo4C,EAAYv8B,UAAU6+B,YAAc,WAgDhC,GA/CA7oC,KAAK6X,iBACqC,IAArC7X,KAAK3Z,OAAO8B,cAAc/C,SAAiB4a,KAAK3Z,OAAO6wB,sBACjB,IAArClX,KAAK3Z,OAAO8B,cAAc/C,QAAgB4a,KAAK3Z,OAAO6wB,sBACE,GAAtDlX,KAAKhb,QAAQwK,cAAc,cAAcuyB,YAC7C/hB,KAAK4rC,cAAc5rC,KAAK3Z,OAAO8B,gBAEL,IAA1B6X,KAAK0S,mBACA1S,KAAKymC,gBAKNzmC,KAAKymC,iBAAkB,GAJvBzmC,KAAK4rC,cAAc5rC,KAAK3Z,OAAO6O,YAC/B8K,KAAK0S,kBAAmB,IAM5B1S,KAAK3Z,OAAO0X,cACZiC,KAAK4rC,eAAeznD,WAAS6b,KAAK3Z,OAAO1B,MAAQ,KAAO,OAAQqb,KAAK3Z,OAAO0X,eAC5EiC,KAAK3Z,OAAO0X,YAAc,MAE1BiC,KAAK3Z,OAAOqE,oBAAoBtF,QAChC4a,KAAK4rC,cAAc5rC,KAAK3Z,OAAOqE,qBAE/BsV,KAAK3Z,OAAO4X,cACZ+B,KAAKsc,aAAatc,KAAK3Z,OAAO4X,aAC9B+B,KAAK3Z,OAAO4X,YAAc,OAER,IAAlB+B,KAAKurC,WACLvrC,KAAK4rC,cAAc5rC,KAAK0rC,mBACxB1rC,KAAKurC,UAAW,GAEhBvrC,KAAK2mC,oBACA3mC,KAAKymC,gBAKNzmC,KAAKymC,iBAAkB,GAJvBzmC,KAAK4rC,cAAc5rC,KAAK4mC,qBACxB5mC,KAAK2mC,mBAAoB,KAMJ,IAAzB3mC,KAAKsS,kBACLtS,KAAK7K,QACL6K,KAAK4rC,cAAc5rC,KAAK3Z,OAAO6T,YAC3B8F,KAAK7K,QAAU6K,KAAK3Z,OAAO6T,WAAW9U,SACtC4a,KAAKsS,iBAAkB,EACvBtS,KAAK3Z,OAAO6T,gBAGhB8F,KAAK7V,QAAQ0hD,gBAAgBzmD,OAAS4a,KAAK7V,QAAQ2hD,eAAiB9rC,KAAK7V,QAAQge,QAC7E4jC,EAAU/rC,KAAK7V,QAAQ6hD,oBACnBv7C,MAAMyY,aAAe,GAC7B6iC,EAAQt7C,MAAMw7C,YAAc,GACZnmD,SAAO,mBAAoBimD,GACjCt7C,MAAMy7C,iBAAmB,KAC/BC,EAAUnsC,KAAK7V,QAAQiiD,aAAa58C,cAAc,eAC9CiB,MAAM47C,UAAY,GAC1BF,EAAQlmD,UAAUoC,IAAI,oBAErB,CACD,GAAI0jD,GAAU/rC,KAAK7V,QAAQ6hD,kBACtBhsC,MAAK3Z,OAAO8a,UAIb4qC,EAAQt7C,MAAMw7C,YAAc,OAH5BF,EAAQt7C,MAAMyY,aAAe,MAKjC,IAAIijC,GAAUnsC,KAAK7V,QAAQiiD,aAAa58C,cAAc,aACtD28C,GAAQlmD,UAAUyC,OAAO,gBAE7BsX,KAAKuS,YAAa,EAClBvS,KAAK3Z,OAAO0C,gBAAiB,EAC7BwvB,cAAYvY,KAAK3Z,OAAOrB,SACxBgb,KAAKssC,cAActsC,KAAK2pC,WACxB3pC,KAAKsC,eAAetC,KAAK6mC,UAAkB7mC,KAAKsC,aAChDtC,KAAK6mC,UAAW,GAEpBN,EAAYv8B,UAAU4hC,cAAgB,SAAUxjD,GAI5C,IAAK,GAFDmkD,GAAcvsC,KAAK7V,QAAQqiD,wBAC3BC,KACKtnD,EAAI,EAAG8L,EAAMs7C,EAAYnnD,OAAQD,EAAI8L,EAAK9L,IAAK,CACpD,GAAIpB,GAAOic,KAAK3Z,OAAO1B,MAAQR,WAAS,KAAMooD,EAAYpnD,IAAM6I,EAAQgS,KAAK3Z,OAAQkmD,EAAYpnD,GACjG,KAA6B,IAAzBiD,EAAMiE,QAAQtI,GACd0oD,EAASnnD,KAAKH,OAEb,KAAK6a,KAAK3Z,OAAOif,mBAAqBvhB,EAAK2oD,SAAS,KAAM,CAC3D,GAAIC,GAAO5oD,EAAKuI,MAAM,KAAKorB,MAAM,GAAI,GAAGnrB,KAAK,MAChB,IAAzBnE,EAAMiE,QAAQsgD,IACdF,EAASnnD,KAAKH,IAIF,IAApBsnD,EAASrnD,SACT4a,KAAK7V,QAAQuhC,WAAW+gB,GACxBzsC,KAAKmhB,SAASnhB,KAAK7V,QAAQyiD,oBAInCrG,EAAYv8B,UAAUsS,aAAe,SAAUt4B,GAE3C,GAAImK,GAAQ6R,KAAK7V,QAAQqiD,wBAErBK,IACJ,IAAI7sC,KAAK3Z,OAAO1B,MACZkoD,EAAQ,GAAIn+C,eAAYP,GACpBQ,cAAa,GAAIL,UAAQS,MAAM,KAAM,QAASiR,KAAK3Z,OAAOghB,WAAW,QAExE,CAED,GAAIk+B,GAAQ,GAAI72C,eAAYP,GACxBQ,cAAa,GAAIL,UAAQS,MAAM,OAAQ,QAAS5K,WAAS,OAAQH,IAAO,GACxEuhD,GAAMngD,OAAS,IACfynD,EAAQ,GAAIn+C,eAAY62C,GACpB52C,cAAa,GAAIL,UAAQS,MAAM,aAAc,QAASiR,KAAK3Z,OAAO0S,YAAY,KAG1F,GAAI8zC,EAAMznD,OAAS,EAAG,CAClB,GAAIud,GAAQxU,EAAM9B,QAAQwgD,EAAM,GAChC7sC,MAAK7V,QAAQuhC,YAAY/oB,MAGjC4jC,EAAYv8B,UAAU8iC,aAAe,WACH,SAA1B9sC,KAAK3Z,OAAOgI,UACZ2R,KAAK7V,QAAQ4iD,WAAWv7B,WAAWxR,KAAK3Z,OAAOkI,OAAQyR,KAAK3Z,OAAOgI,WAInE2R,KAAK7V,QAAQC,WAAa8D,EAAc8R,KAAK3Z,OAAQ2Z,KAAK7V,QAAQC,YAEX,IAAvD4V,KAAKhb,QAAQwK,cAAc,cAAcuyB,WACzC/hB,KAAK7V,QAAQ6iD,iBAGrBzG,EAAYv8B,UAAU8T,kBAAoB,SAAUte,GAChD,GAAIA,EAAEpN,SAAW4N,KAAK8Z,iBAAgC,WAAbta,EAAEpN,OAI3C,IAAK,GAAI4sB,GAAK,EAAGC,EAAKtmB,OAAOD,KAAK8G,EAAE0f,SAAUF,EAAKC,EAAG75B,OAAQ45B,IAE1D,OADWC,EAAGD,IAEV,IAAK,mBACDhf,KAAK6X,eACL,MACJ,KAAK,SACD7X,KAAKmX,cACL,MACJ,KAAK,sBACD,IAAKsO,oBAAkBzlB,KAAK7V,SAAU,CAClC6V,KAAKonC,gBACL,IAAIz0C,GAAUqN,KAAKqnC,YACnBrnC,MAAK7V,QAAQwI,QAAUA,EACvBqN,KAAK7V,QAAQ49C,cAAgB/nC,KAAK3Z,OAAOqM,oBAAoBs1C,eAC7DhoC,KAAK7V,QAAQ4X,WACb/B,KAAK7V,QAAQwgD,iBAEjB,KACJ,KAAK,gBAED,GADA3qC,KAAKwmC,aAAc,EACsB,IAArCxmC,KAAK3Z,OAAO8B,cAAc/C,OAAc,CACxC,IAAK4a,KAAK3Z,OAAO84B,oBAAqB,CAClC,GAAIsW,GAAUz1B,KAAK3Z,OAAO8B,cAAcuvB,MAAM1X,KAAK3Z,OAAO8B,cAAc/C,OAAS,EACjF4a,MAAK3Z,OAAO7B,eAAgB2D,cAAestC,IAAW,GAE1Dz1B,KAAK4rC,cAAc5rC,KAAK3Z,OAAO8B,eAC/B6X,KAAK3Z,OAAO7B,eAAgB2D,cAAe6X,KAAK3Z,OAAO8B,gBAAiB,OAElE5D,qBAAMyb,KAAK7V,WACjB6V,KAAK7V,QAAQgzB,iBACbnd,KAAKwmC,aAAc,EAEvB,MACJ,KAAK,oBAGL,IAAK,kBACDj8C,GAAKyV,KAAK3Z,OAAQiY,GAAoB0B,KAAK3Z,OAAO5B,KAClD,MACJ,KAAK,sBACIghC,oBAAkBzlB,KAAK7V,WACxB6V,KAAK4mC,oBAAsB5mC,KAAK3Z,OAAO8B,cACvC6X,KAAK7V,QAAQ89C,kBAAkBlsC,KAAOyD,EAAE0f,QAAQC,oBAAsB,WAAa,SACnFnf,KAAK2mC,mBAAoB,EACzB3mC,KAAK0qC,iBAET,MACJ,KAAK,OACDlgD,EAAawV,KAAK3Z,OAAQ,UAC1B,MACJ,KAAK,QACD2Z,KAAKitC,oBAIrB1G,EAAYv8B,UAAUoS,cAAgB,SAAUlzB,GAC5C8W,KAAK3Z,OAAOK,OAAQ,EACmD,KAAnEsZ,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,MAAM+kC,QAAiB/sB,KAAK7V,UAC9E6V,KAAK3Z,OAAOg2B,iBACPrc,KAAK3Z,OAAO4B,WAIb+X,KAAKktC,mBAHLltC,KAAKmtC,kBAAiB,IAM9BxmD,EAAWqZ,KAAK3Z,QACS,YAArB2Z,KAAK3Z,OAAOoE,OAEZuV,KAAKsC,cAAe,EACpBsT,cAAY5V,KAAK3Z,OAAOrB,SACxBgb,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GACjD6X,KAAK7V,QAAQC,WAAa8D,EAAc8R,KAAK3Z,OAAQ6C,EAAKc,OAC1DgW,KAAK7V,QAAQ6iD,gBACThtC,KAAK3Z,OAAOmjD,SACZxpC,KAAK7V,QAAQ20B,GAAG,sBAAuB9e,KAAK0pC,oBAAqB1pC,OAGzEA,KAAK2pC,UAAYzgD,GAErBq9C,EAAYv8B,UAAUkjC,iBAAmB,WACrC,GAAIj8C,GAAM+O,KAAK7V,QAAQwI,QAAQvN,OAC3BgoD,EAAajxC,KAAKU,MAAMV,KAAKC,UAAU4D,KAAK7V,QAAQwI,SACxD,IAAIy6C,EAAWn8C,EAAM,GAAGwB,OAAuC,eAA9B26C,EAAWn8C,EAAM,GAAGwB,QAA2BuN,KAAK3Z,OAAO6L,SAAU,CAClG,GAAIuf,IACAhf,MAAO,aAAc4Y,WAAY9a,EAAcyP,KAAK3Z,OAAQ,QAASilB,SAAU,IAAKtK,MAAO,OAE/FhB,MAAK7V,QAAQwI,QAAQrN,KAAKmsB,GAC1BzR,KAAK6pC,YAAY7pC,KAAK7V,QAAQwI,QAAS,cACvCqN,KAAK6pC,YAAY7pC,KAAK7V,QAAQwI,QAAS,QACvCqN,KAAKymC,iBAAkB,EACvBzmC,KAAK7V,QAAQwgD,mBAGrBpE,EAAYv8B,UAAUsiC,cAAgB,SAAUpjD,GAE5C,GAAIiF,GAAQD,EAAc8R,KAAK3Z,OAAQ6C,EAAKc,MAC5C,IAAqB,IAAjBmE,EAAM/I,QAAiBb,oBAAMyb,KAAKhb,QAAQwK,cAAc,IAAMW,MAG7D,GAAqB,IAAjBhC,EAAM/I,QAAgB4a,KAAKhb,QAAQwK,cAAc,IAAMC,IAC5D,GAAIuQ,KAAKhb,QAAQwK,cAAc,IAAMW,IAAeX,cAAc,IAAMC,IAAY,CAChF,GAAIC,GAAWsQ,KAAKhb,QAAQwK,cAAc,IAAMW,IAAeX,cAAc,IAAMC,GACnFuQ,MAAKhb,QAAQwK,cAAc,IAAMW,IAAeoP,YAAY7P,OAG5DsQ,MAAKhb,QAAQua,YAAYS,KAAKhb,QAAQwK,cAAc,IAAMC,SAR9DT,GAAmBgR,KAAK3Z,OAAQ2Z,KAAKhb,QAASkE,IAYtDq9C,EAAYv8B,UAAUuS,WAAa,WAC/B,GAAiC,gBAA7Bvc,KAAK3Z,OAAOkB,aAAgC,CAE5C,GAAIvD,GAAOgc,KAAK7V,QAAQkjD,qBAAqB,EAC7CrtC,MAAKstC,YAAYtpD,KAGzBuiD,EAAYv8B,UAAU0+B,eAAiB,SAAUx/C,GAC7C8W,KAAK7V,QAAQuhC,YAAYxiC,EAAKqkD,UAE9B,IAAIvpD,EACAkF,GAAKskD,UACLxpD,EAAOmY,KAAKU,MAAMV,KAAKC,UAAUlT,EAAKskD,UACtCxtC,KAAKstC,YAAYtpD,KAIzBuiD,EAAYv8B,UAAUsjC,YAAc,SAAUtpD,GAC1C,GAAI00B,GAAQ1Y,IACZ,KAAK7U,GAAcnH,GAEf,WADAqH,IAAmB2U,KAAK3Z,OAAQrC,EAAMsH,GAG1C,IAAIiC,IAAcwJ,QAAQ,EAAOvJ,YAAaxJ,EAAMoO,OAAQ,cAC5D4N,MAAK3Z,OAAOwH,QAAQ,WAAYN,EAAW,SAAUg0B,GACjD,IAAKA,EAAaxqB,OAAQ,CACtB,GAAImuB,GAAS/gC,WAAS,OAAQH,EAC9B,IAAIG,WAAS,SAAUH,IAEnB,GADW4H,EAAS5H,KACPwI,GAAgB,CACzB,GAAIK,GAASF,EAAY+rB,EAAMryB,OAAQrC,EACvC8jB,IAAkB4Q,EAAMryB,OAAQ6+B,EAAQr4B,QAG3C,CAED,GAAY,KADF6rB,EAAMryB,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAC1C0wB,EAAMryB,OAAO4B,WAW5BmL,EAAiBslB,EAAMryB,OAAQrC,OAXS,CACxC,GAAII,GAAKD,WAAS,KAAMH,EACxB00B,GAAMryB,OAAOqO,QAAUgkB,EAAMryB,OAAO5B,IACpC,IAAI8B,GAAUmyB,EAAMryB,OAAO5B,MAAQF,oBAAMH,GAAM8gC,EAAS9gC,GAAM,GAC9Ds0B,GAAMryB,OAAO7B,eAAgBC,KAAM8B,IAAW,GAC9CmyB,EAAMryB,OAAOvB,UAAUQ,KAAK4/B,GAC5BxM,EAAMryB,OAAOzB,OAAOU,KAAKnB,WAAS,SAAUH,IAC5C00B,EAAMryB,OAAOgD,UAAYrF,GACzBuH,EAAWmtB,EAAMryB,QAKrBqyB,EAAMryB,OAAO4B,YAAa,EAE9BywB,EAAM1zB,QAAQwf,QACVkU,EAAMryB,OAAO6wB,sBACbwB,EAAMryB,OAAOrB,QAAQwK,cAAc,IAAMkpB,EAAMryB,OAAOrB,QAAQZ,GAAKwkB,IAAmBpE,YAMtG+hC,EAAYv8B,UAAU8Q,eAAiB,SAAU5xB,GACpB,YAArB8W,KAAK3Z,OAAOoE,OACRuV,KAAK3Z,OAAO6wB,sBACZlX,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GAEhD6X,KAAK7V,QAIN6V,KAAK6mC,UAAW,EAHhB7mC,KAAKyV,OAAOvsB,GAKZ8W,KAAK3Z,OAAO4B,aACZ+X,KAAKktC,mBACLltC,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,IAErD6X,KAAK7V,QAAQC,WAAa8D,EAAc8R,KAAK3Z,OAAQ6C,EAAKc,OAC1DgW,KAAK3Z,OAAOU,OT5lBA,kBS6lBZiZ,KAAK7V,QAAQnF,QAAQiB,UAAUyC,OAAOuuB,IACtCjX,KAAKsC,cAAe,EACpBtC,KAAK7V,QAAQgzB,iBAC0D,KAAnEnd,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,MAAM+kC,QACxD/sB,KAAKytC,cAAcvkD,GAEvB8W,KAAKmX,eACDnX,KAAK7V,QAAQm9C,aAAa30C,QAAQvN,OAAS,GAAK4a,KAAK7V,QAAQm9C,aAAa30C,QAAQ,GAAGF,QAAUuN,KAAK3Z,OAAOkI,QAC7E,SAA1ByR,KAAK3Z,OAAOgI,WACZ2R,KAAK7V,QAAQqnB,WAAWxR,KAAK3Z,OAAOkI,OAAQyR,KAAK3Z,OAAOgI,aAMxEk4C,EAAYv8B,UAAUyjC,cAAgB,SAAUvkD,GACnB,YAArB8W,KAAK3Z,OAAOoE,OACZuV,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GACjD6X,KAAK3Z,OAAOU,OAAOyW,OACdwC,KAAK3Z,OAAO0C,iBACbiX,KAAK3Z,OAAOqE,wBAEhBsV,KAAKktC,mBACLltC,KAAK3Z,OAAOg2B,cAAgBnzB,EAAKc,MACjCgW,KAAKoc,cAAclzB,KAG3Bq9C,EAAYv8B,UAAUmjC,iBAAmB,SAAUO,GAC/C,GAAIz8C,GAAM+O,KAAK7V,QAAQwI,QAAQvN,OAC3BgoD,EAAajxC,KAAKU,MAAMV,KAAKC,UAAU4D,KAAK7V,QAAQwI,SACpDy6C,GAAWn8C,EAAM,GAAGwB,OAAwC,eAA9B26C,EAAWn8C,EAAM,GAAGwB,QAE7CgzB,oBAAkBzlB,KAAK7V,QAAQm9C,aAAa30C,QAAQ,KAAsD,eAA/CqN,KAAK7V,QAAQm9C,aAAa30C,QAAQ,GAAGF,QACnE,SAA1BuN,KAAK3Z,OAAOgI,UACZ2R,KAAK7V,QAAQqnB,WAAW,OAAQxR,KAAK3Z,OAAOgI,WAI5C2R,KAAK7V,QAAQC,WAAa8D,EAAc8R,KAAK3Z,OAAQ2Z,KAAK7V,QAAQC,YAEtE4V,KAAK3Z,OAAOU,OAAOsL,QAEvB2N,KAAK7V,QAAQwI,QAAQ8K,MAChBiwC,IACD1tC,KAAKymC,iBAAkB,EACvBzmC,KAAK7V,QAAQwgD,oBAIzBpE,EAAYv8B,UAAU0R,cAAgB,SAAUxyB,GACnB,YAArB8W,KAAK3Z,OAAOoE,OAGXuV,KAAK7V,QAIN6V,KAAKoc,cAAclzB,GAHnB8W,KAAKyV,OAAOvsB,KAMpBq9C,EAAYv8B,UAAU2R,YAAc,SAAUzyB,GACjB,YAArB8W,KAAK3Z,OAAOoE,MAGhBuV,KAAKoc,cAAclzB,IAEvBq9C,EAAYv8B,UAAUkS,aAAe,WACA,gBAA7Blc,KAAK3Z,OAAOkB,cAAuE,IAArCyY,KAAK3Z,OAAO8B,cAAc/C,QACxE4a,KAAKmc,oBAGboqB,EAAYv8B,UAAU6R,eAAiB,WACF,gBAA7B7b,KAAK3Z,OAAOkB,eACZyY,KAAK3Z,OAAOgD,SAAW2W,KAAK7V,QAAQkjD,uBAG5C9G,EAAYv8B,UAAU+R,aAAe,WACA,gBAA7B/b,KAAK3Z,OAAOkB,cACZkS,GAAOuG,KAAK3Z,OAAQ2Z,KAAK3Z,OAAO8B,cAAe6X,KAAK3Z,OAAO5B,KAAM,WAIzE8hD,EAAYv8B,UAAUgS,YAAc,SAAU9yB,GACjB,YAArB8W,KAAK3Z,OAAOoE,OAGhBuV,KAAKoc,cAAclzB,GACnB8W,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,KAErDo+C,EAAYv8B,UAAUiS,aAAe,SAAU/yB,GAClB,YAArB8W,KAAK3Z,OAAOoE,OAGhBuV,KAAKsC,cAAe,EACpBtC,KAAKmtC,kBAAiB,GACtBntC,KAAK7V,QAAQC,WAAa8D,EAAc8R,KAAK3Z,OAAQ6C,EAAKc,OAC1DgW,KAAK2pC,UAAYzgD,IAErBq9C,EAAYv8B,UAAUyS,aAAe,WACR,YAArBzc,KAAK3Z,OAAOoE,MAAsBuV,KAAK7V,SACvC6V,KAAK7V,QAAQnF,QAAQiB,UAAUoC,IAAI4uB,KAG3CsvB,EAAYv8B,UAAU0S,gBAAkB,WACX,YAArB1c,KAAK3Z,OAAOoE,OACZuV,KAAKsC,cAAe,EAChBtC,KAAK3Z,OAAO84B,oBACZnf,KAAK7V,QAAQwjD,gBAAgBC,kBAAkB,EAAG5tC,KAAK7V,QAAQ0jD,UAAUzoD,QAGzE4a,KAAK7V,QAAQ2jD,UAAU9tC,KAAK7V,QAAQ0jD,UAAUzoD,OAAS,GAE3D4a,KAAKsC,cAAe,EACpBtC,KAAKwmC,aAAc,IAG3BD,EAAYv8B,UAAUkT,eAAiB,WACV,YAArBld,KAAK3Z,OAAOoE,OACZuV,KAAK+tC,kBACL/tC,KAAKwmC,aAAc,IAI3BD,EAAYv8B,UAAU00B,mBAAqB,WACvCrd,eAAarhB,KAAKhb,SV7lBA,iBU8lBdgb,KAAK3Z,OAAO8B,cAAc/C,OAAS,GACnCwtB,YAAU5S,KAAKhb,SV/lBD,kBUkmBtBuhD,EAAYv8B,UAAUuT,gBAAkB,WACX,YAArBvd,KAAK3Z,OAAOoE,MAGhBuV,KAAKmX,gBAETovB,EAAYv8B,UAAUoT,gBAAkB,WACpCpd,KAAKuS,YAAa,GAEtBg0B,EAAYv8B,UAAUqT,eAAiB,WACnCrd,KAAKuS,YAAa,GAEtBg0B,EAAYv8B,UAAUwT,sBAAwB,WACjB,YAArBxd,KAAK3Z,OAAOoE,OAGhBuV,KAAK3Z,OAAOgD,SAAW2W,KAAK7V,QAAQkjD,uBAExC9G,EAAYv8B,UAAU6I,iBAAmB,WACrC7S,KAAK3Z,OAAOy4B,GAAG5rB,GAAoB8M,KAAK0b,cAAe1b,MACvDA,KAAK3Z,OAAOy4B,GAAG6K,GAAgB3pB,KAAKiQ,QAASjQ,MAC7CA,KAAK3Z,OAAOy4B,GAAGl1B,GAAqBoW,KAAK8a,eAAgB9a,MACzDA,KAAK3Z,OAAOy4B,GAAGxgB,GAAoB0B,KAAKoc,cAAepc,MACvDA,KAAK3Z,OAAOy4B,GAAG9gB,GAAkBgC,KAAK2b,YAAa3b,MACnDA,KAAK3Z,OAAOy4B,GAAGrnB,GAAiBuI,KAAK6Z,WAAY7Z,MACjDA,KAAK3Z,OAAOy4B,GAAGH,GAAoB3e,KAAK4e,cAAe5e,MACvDA,KAAK3Z,OAAOy4B,GAAG1zB,GAAmB4U,KAAKic,aAAcjc,MACrDA,KAAK3Z,OAAOy4B,GAAGj1B,GAAemW,KAAKytC,cAAeztC,MAClDA,KAAK3Z,OAAOy4B,GAAGf,GAAmB/d,KAAKge,aAAche,MACrDA,KAAK3Z,OAAOy4B,GAAGvc,GAAsBvC,KAAKie,gBAAiBje,MAC3DA,KAAK3Z,OAAOy4B,GAAGjB,GAAqB7d,KAAK8d,kBAAmB9d,MAC5DA,KAAK3Z,OAAOy4B,GAAGrX,GAAmBzH,KAAK+b,aAAc/b,MACrDA,KAAK3Z,OAAOy4B,GAAGpgB,GAAkBsB,KAAKgc,YAAahc,MACnDA,KAAK3Z,OAAOy4B,GTzwBM,gBSywBkB9e,KAAK6b,eAAgB7b,MACzDA,KAAK3Z,OAAOy4B,GAAGZ,GAAmBle,KAAKkc,aAAclc,MACrDA,KAAK3Z,OAAOy4B,GAAGvgB,GAAkByB,KAAKoc,cAAepc,MACrDA,KAAK3Z,OAAOy4B,GAAGlB,GAAiB5d,KAAKuc,WAAYvc,MACjDA,KAAK3Z,OAAOy4B,GAAG3sB,GAAmB6N,KAAK8sC,aAAc9sC,MACrDA,KAAK3Z,OAAOy4B,GAAGtzB,GAAgBwU,KAAKoc,cAAepc,MACnDA,KAAK3Z,OAAOy4B,GTn1BG,aSm1BkB9e,KAAKoc,cAAepc,MACrDA,KAAK3Z,OAAOy4B,GAAGnrB,GAAkBqM,KAAKguC,YAAahuC,MACnDA,KAAK3Z,OAAOy4B,GTvwBI,cSuwBkB9e,KAAKyc,aAAczc,MACrDA,KAAK3Z,OAAOy4B,GT5yBO,kBS4yBkB9e,KAAK0c,gBAAiB1c,MAC3DA,KAAK3Z,OAAOy4B,GT3yBM,iBS2yBkB9e,KAAKkd,eAAgBld,MACzDA,KAAK3Z,OAAOy4B,GAAG71B,GAAmB+W,KAAKyd,aAAczd,MACrDA,KAAK3Z,OAAOy4B,GAAGthB,GAAyBwC,KAAK0+B,mBAAoB1+B,MACjEA,KAAK3Z,OAAOy4B,GAAGriB,GAAsBuD,KAAKod,gBAAiBpd,MAC3DA,KAAK3Z,OAAOy4B,GAAGhiB,GAAqBkD,KAAKqd,eAAgBrd,MACzDA,KAAK3Z,OAAOy4B,GAAGppB,GAAiBsK,KAAKye,WAAYze,MACjDA,KAAK3Z,OAAOy4B,GAAGz3B,GAAoB2Y,KAAK0e,cAAe1e,MACvDA,KAAK3Z,OAAOy4B,GAAGX,GAAqBne,KAAKoe,eAAgBpe,MACzDA,KAAK3Z,OAAOy4B,GAAGR,GAAkBte,KAAKiuC,uBAAwBjuC,MAC9DA,KAAK3Z,OAAOy4B,GTl1BQ,kBSk1BkB9e,KAAKitC,gBAAiBjtC,MAC5DA,KAAK3Z,OAAOy4B,GTn0BO,iBSm0BkB9e,KAAKud,gBAAiBvd,MAC3DA,KAAK3Z,OAAOy4B,GAAG7oB,GAAiB+J,KAAK6e,WAAY7e,MACjDA,KAAK3Z,OAAOy4B,GT3vBa,wBS2vBkB9e,KAAKwd,sBAAuBxd,OAE3EumC,EAAYv8B,UAAUiM,oBAAsB,WACxCjW,KAAK3Z,OAAOs3B,IAAIzqB,GAAoB8M,KAAK0b,eACzC1b,KAAK3Z,OAAOs3B,IAAIgM,GAAgB3pB,KAAKiQ,SACrCjQ,KAAK3Z,OAAOs3B,IAAI/zB,GAAqBoW,KAAK8a,gBAC1C9a,KAAK3Z,OAAOs3B,IAAIrf,GAAoB0B,KAAKoc,eACzCpc,KAAK3Z,OAAOs3B,IAAIhqB,GAAkBqM,KAAKguC,aACvChuC,KAAK3Z,OAAOs3B,IAAI3f,GAAkBgC,KAAK2b,aACvC3b,KAAK3Z,OAAOs3B,IAAIvyB,GAAmB4U,KAAKic,cACxCjc,KAAK3Z,OAAOs3B,IAAI9zB,GAAemW,KAAKytC,eACpCztC,KAAK3Z,OAAOs3B,IAAII,GAAmB/d,KAAKge,cACxChe,KAAK3Z,OAAOs3B,IAAIpb,GAAsBvC,KAAKie,iBAC3Cje,KAAK3Z,OAAOs3B,IAAIE,GAAqB7d,KAAK8d,mBAC1C9d,KAAK3Z,OAAOs3B,IAAIO,GAAmBle,KAAKkc,cACxClc,KAAK3Z,OAAOs3B,IAAIpf,GAAkByB,KAAKoc,eACvCpc,KAAK3Z,OAAOs3B,ITn3BG,aSm3BmB3d,KAAKoc,eACvCpc,KAAK3Z,OAAOs3B,IAAIC,GAAiB5d,KAAKuc,YACtCvc,KAAK3Z,OAAOs3B,IAAIxrB,GAAmB6N,KAAK8sC,cACxC9sC,KAAK3Z,OAAOs3B,IAAInyB,GAAgBwU,KAAKoc,eACrCpc,KAAK3Z,OAAOs3B,ITzyBI,cSyyBmB3d,KAAKyc,cACxCzc,KAAK3Z,OAAOs3B,IT90BO,kBS80BmB3d,KAAK0c,iBAC3C1c,KAAK3Z,OAAOs3B,IT70BM,iBS60BmB3d,KAAKkd,gBAC1Cld,KAAK3Z,OAAOs3B,IAAIlW,GAAmBzH,KAAK+b,cACxC/b,KAAK3Z,OAAOs3B,IAAIjf,GAAkBsB,KAAKgc,aACvChc,KAAK3Z,OAAOs3B,IAAI10B,GAAmB+W,KAAKyd,cACxCzd,KAAK3Z,OAAOs3B,IAAIngB,GAAyBwC,KAAK0+B,oBAC9C1+B,KAAK3Z,OAAOs3B,IAAIlhB,GAAsBuD,KAAKod,iBAC3Cpd,KAAK3Z,OAAOs3B,IAAI7gB,GAAqBkD,KAAKqd,gBAC1Crd,KAAK3Z,OAAOs3B,IAAIjoB,GAAiBsK,KAAKye,YACtCze,KAAK3Z,OAAOs3B,IAAIt2B,GAAoB2Y,KAAK0e,eACzC1e,KAAK3Z,OAAOs3B,IAAIlmB,GAAiBuI,KAAK6Z,YACtC7Z,KAAK3Z,OAAOs3B,IT/zBM,gBS+zBmB3d,KAAK6b,gBAC1C7b,KAAK3Z,OAAOs3B,IAAIgB,GAAoB3e,KAAK4e,eACzC5e,KAAK3Z,OAAOs3B,IAAIQ,GAAqBne,KAAKoe,gBAC1Cpe,KAAK3Z,OAAOs3B,IAAIW,GAAkBte,KAAKiuC,wBACvCjuC,KAAK3Z,OAAOs3B,ITz3BQ,kBSy3BmB3d,KAAKitC,iBAC5CjtC,KAAK3Z,OAAOs3B,IT12BO,iBS02BmB3d,KAAKud,iBAC3Cvd,KAAK3Z,OAAOs3B,IAAI1nB,GAAiB+J,KAAK6e,YACtC7e,KAAK3Z,OAAOs3B,ITlyBa,wBSkyBmB3d,KAAKwd,wBAErD+oB,EAAYv8B,UAAUiU,gBAAkB,WAAcje,KAAKwmC,aAAc,GAEzED,EAAYv8B,UAAUoU,eAAiB,SAAUl1B,GACzC8W,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,kBAClC9Z,KAAK3Z,OAAOgD,UAAY2W,KAAK7V,QAAQ+jD,WAAWhlD,EAAKsO,QAAQg2C,WAGrEjH,EAAYv8B,UAAUgkC,YAAc,WAC5BhuC,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,kBAClC9Z,KAAK3Z,OAAOgD,SAAuC,KAA3B2W,KAAK3Z,OAAOoN,WAAqBuM,KAAK7V,QAAQkjD,sBACjE/jD,EAAc0W,KAAK3Z,WAGhCkgD,EAAYv8B,UAAU4U,cAAgB,WAC9B5e,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,kBACO,IAArC9Z,KAAK3Z,OAAO8B,cAAc/C,OAC1B4a,KAAK3Z,OAAOgD,SAAW2W,KAAK7V,QAAQkjD,qBAGpCrtC,KAAK3Z,OAAOgD,UAAYlF,WAAS6b,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,GAAI4a,KAAK3Z,OAAOG,aAI5G+/C,EAAYv8B,UAAUiP,WAAa,SAAU/vB,GACzC,GACIwwB,GADaxwB,EAAKuwB,OAAOjiB,OACL5O,QAAQ,WAChC,KAAK8wB,EACD,MAAO,KAEX,IAAIzrB,EACAyrB,GAAO0R,uBAAuB,aAAa,GAC3Cn9B,EAAOyrB,EAAO0R,uBAAuB,aAAa,GAAGlF,UAEhDxM,EAAO0R,uBAAuB,4BAA4B,GAAGvtB,qBAClE5P,EAAOyrB,EAAO0R,uBAAuB,4BAA4B,GAAGvtB,mBAAmBqoB,WAEvFxM,IAAWA,EAAOlqB,cAAc,cAChCwQ,KAAK4rC,eAAe39C,IAExBvG,EAAUsY,KAAK3Z,OAAQqzB,GACvB1Z,KAAK3Z,OAAOe,kBACZ4Y,KAAK3Z,OAAOmO,YAEZwL,KAAK3Z,OAAOmO,SAAWwL,KAAK7V,QAAQkjD,oBACpC,IAAIc,EAUJ,OAToC,KAAhCnuC,KAAK3Z,OAAOmO,SAASpP,QAAgBs0B,IACrCy0B,EAAUnuC,KAAK7V,QAAQ+jD,WAAWx0B,IAElCy0B,GACAnuC,KAAK3Z,OAAOmO,SAASlP,KAAK6oD,EAAQX,SAEtCxtC,KAAK3Z,OAAO6N,SAAW8L,KAAK3Z,OAAO5B,KACnCub,KAAK3Z,OAAOe,eAAiB4Y,KAAK7V,QAAQikD,kBAC1Ch4C,GAAyB4J,KAAK3Z,QACvB2Z,KAAK3Z,OAAOuQ,oBAGvB2vC,EAAYv8B,UAAUijC,gBAAkB,WACpC,GAAyB,YAArBjtC,KAAK3Z,OAAOoE,OAAuBuV,KAAK3Z,OAAO6L,WAAa3N,oBAAMyb,KAAK7V,SAKvE,IAAK,GAHDkkD,GADaruC,KAAK7V,QAAQ6hD,mBAAmBx8C,cAAc,oBAC3B6vC,WAAWxkB,WAAW,GACtDyzB,EAAsBtuC,KAAK7V,QAAQiiD,aAAa58C,cAAc,uBAAuBq5B,SAAS,GAC9F0lB,EAAqBvuC,KAAK7V,QAAQk9C,aAC7BliD,EAAI,EAAGA,EAAIopD,EAAmBnpD,OAAQD,MACrC6a,KAAK8mC,aAA+C,SAAhCyH,EAAmBppD,GAAGsN,OAAqD,eAAhC87C,EAAmBppD,GAAGsN,SACvB,KAA5DuN,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAAiBgY,KAAK3Z,OAAO4B,WAW3E+X,KAAKhb,QAAQ+hC,aAAe,IACQ,SAAhCwnB,EAAmBppD,GAAGsN,OACtB47C,EAAmBxlB,SAAS1jC,GAAG2wB,aAAa,QAAS,gBACrDw4B,EAAoBzlB,SAAS1jC,GAAG2wB,aAAa,QAAS,kBAGtDu4B,EAAmBxlB,SAAS1jC,GAAG2wB,aAAa,QAAS,gBACrDw4B,EAAoBzlB,SAAS1jC,GAAG2wB,aAAa,QAAS,iBAGrD9V,KAAKhb,QAAQ+hC,YAAc,MAChCsnB,EAAmBxlB,SAAS1jC,GAAG2wB,aAAa,QAAS,eACrDw4B,EAAoBzlB,SAAS1jC,GAAG2wB,aAAa,QAAS,gBAtBtD9V,KAAKhb,QAAQ+hC,aAAe,KAC5BsnB,EAAmBxlB,SAAS1jC,GAAG2wB,aAAa,QAAS,gBACrDw4B,EAAoBzlB,SAAS1jC,GAAG2wB,aAAa,QAAS,iBAEjD9V,KAAKhb,QAAQ+hC,YAAc,MAChCsnB,EAAmBxlB,SAAS1jC,GAAG2wB,aAAa,QAAS,eACrDw4B,EAAoBzlB,SAAS1jC,GAAG2wB,aAAa,QAAS,kBAuB9EywB,EAAYv8B,UAAUikC,uBAAyB,WAC3CjuC,KAAKitC,kBACoB,YAArBjtC,KAAK3Z,OAAOoE,MAAuBuV,KAAK3Z,OAAO6L,UAAa3N,oBAAMyb,KAAK7V,UACvE6V,KAAKmX,gBAGbovB,EAAYv8B,UAAU6N,cAAgB,WAClC,GAAIa,GAAQ1Y,MACPA,KAAK3Z,OAAO6L,UAAY8N,KAAK7V,UAC1B6V,KAAK3Z,OAAOwR,kBACRmI,KAAKpI,SACLoI,KAAKpI,QAAQqY,UAEjBjQ,KAAKpI,QAAU,GAAI+gB,aAAU3Y,KAAK7V,QAAQnF,SACtCk0B,SAAUlZ,KAAK3Z,OAAO8yB,mBACtBN,SAAU,EACVD,gBAAgB,EAChBQ,SAAUpZ,KAAK3Z,OAAOrB,QACtB+zB,WAAY,IAAMpwB,GAClB2wB,KAAMlhB,GAAgB2H,KAAKC,KAAMA,KAAK3Z,QACtCmzB,UAAW,SAAUtwB,GACjByO,GAAiB+gB,EAAMryB,OAAQ6C,EAAMwvB,EAAM9gB,UAE/CyhB,SAAUxiB,GAAgBkJ,KAAKC,KAAMA,KAAK3Z,QAC1CyyB,kBAAkB,EAClBE,OAAQhZ,KAAKiZ,WAAWlZ,KAAKC,UAG3BA,KAAK3Z,OAAOwR,kBAAoBmI,KAAKpI,SAC3CoI,KAAKpI,QAAQqY,YAIzBs2B,EAAYv8B,UAAU6P,WAAa,SAAU3wB,GACzC,GAAI8W,KAAK3Z,OAAO4E,eAAiB+U,KAAK8Z,gBAAiB,CAGnD,GAAIE,GAAU71B,WAAS6b,KAAK3Z,OAAOzB,OAAOob,KAAK3Z,OAAOzB,OAAOQ,OAAS,GAAI4a,KAAK3Z,OAAOG,SACtF,IAAK0C,EAAKsO,OAAO5O,QAAQ,MAIpB,CAED,GAAIqxB,GAAO,IAEXA,GAAOja,KAAK7V,QAAQ+jD,WAAWhlD,EAAKsO,QAAQg2C,QAC5CxtC,KAAK3Z,OAAO4N,SAAWgmB,EAAKnhB,OAASkH,KAAK3Z,OAAO5B,KAAOqJ,EAAYkS,KAAK3Z,OAAQ4zB,EAAMja,KAAK3Z,OAAO5B,MACnGub,KAAK3Z,OAAOoO,SAAWwlB,EAAKnhB,OAASkhB,EAAUC,MAT/Cja,MAAK3Z,OAAO4N,SAAW+L,KAAK3Z,OAAO5B,KACnCub,KAAK3Z,OAAOoO,SAAWulB,IAYnCusB,EAAYv8B,UAAU0U,cAAgB,WAC9B1e,KAAK3Z,OAAOkB,eAAiByY,KAAK8Z,kBAClC9Z,KAAK3Z,OAAOwB,cAAgBmY,KAAK7V,QAAQkjD,qBACzCrtC,KAAK3Z,OAAOe,eAAiB4Y,KAAK7V,QAAQikD,oBAGlD7H,EAAYv8B,UAAUyU,WAAa,SAAUv1B,GAChB,YAArB8W,KAAK3Z,OAAOoE,OACZuV,KAAK0S,kBAAmB,EACpB1S,KAAK3Z,OAAO5B,OAASub,KAAK3Z,OAAOmV,iBAAmBwE,KAAK3Z,OAAO5B,OAASkQ,EAAiBqL,KAAK3Z,OAAQ6C,IACvG8W,KAAKoc,cAAclzB,KAI/Bq9C,EAAYv8B,UAAU6U,WAAa,SAAU31B,GAChB,YAArB8W,KAAK3Z,OAAOoE,OACZuV,KAAK0S,kBAAmB,EACxB1S,KAAKoc,cAAclzB,KAS3Bq9C,EAAYv8B,UAAU8P,cAAgB,WAClC,MAAO,eAEXysB,EAAYv8B,UAAUiG,QAAU,WACxBjQ,KAAK3Z,OAAOq3B,cAGhB1d,KAAKiW,sBACDjW,KAAK7V,UACD6V,KAAK3Z,OAAOmjD,SACZxpC,KAAK7V,QAAQwzB,IAAI,sBAAuB3d,KAAK0pC,qBAEjD1pC,KAAKgW,eACLhW,KAAK7V,QAAQ8lB,aAGrBs2B,EAAYv8B,UAAU4W,WAAa,SAAUh0B,GACzC,GAAI40B,GAAS17B,SAAO,IAAMgG,GAAYc,EACtCoT,MAAK3Z,OAAOyS,SAASvU,oBAAMi9B,IAG/B+kB,EAAYv8B,UAAU09B,YAAc,SAAUxgD,EAAQgC,GAClD,GAAIqE,IACArG,OAAQA,EAAQsG,YAAatE,EAAKlF,KAAMse,aAActC,KAAKwmC,YAAazvC,QAAQ,EAAOS,OAAQtO,EAAKsO,OAExGwI,MAAK3Z,OAAOwH,QAAQ,gBAAiBN,GACrCrE,EAAK6N,OAASxJ,EAAUwJ,QAG5BwvC,EAAYv8B,UAAUovB,WAAa,SAAUlwC,GACzC8W,KAAK3Z,OAAOkB,aAAe,cACtByY,KAAK3Z,OAAO0C,iBAAkBiX,KAAK3Z,OAAO4B,YAC3C+X,KAAKwuC,kBAETxuC,KAAK3Z,OAAOU,OAAOyW,OACiC,IAAhDwC,KAAK7V,QAAQshD,wBAAwBrmD,SACrC4a,KAAK0mC,eAAiB1mC,KAAK7V,QAAQyiD,kBAEvC5sC,KAAK7V,QAAQnF,QAAQ8wB,aAAa,WAAY,MAC9C9V,KAAKohB,cAAc,SAAUl4B,EAC7B,IAAI0D,GAAOoT,KAAK7V,QAAQskD,cAAczuC,KAAK7V,QAAQyiD,iBAEnD,IADA5sC,KAAK4gB,WAAWh0B,IACXrI,oBAAMqI,KAAUrI,oBAAMqI,EAAK4C,cAAc,mBAAoB,CAC9D,GAAoD,IAAhDwQ,KAAK7V,QAAQshD,wBAAwBrmD,OAAc,CACnD,GAAI07C,GAAgB9gC,KAAK7V,QAAQshD,wBAAwBzrC,KAAK7V,QAAQshD,wBAAwBrmD,OAAS,EACxF4a,MAAK7V,QAAQskD,cAAc3N,GACjCtxC,cAAc,kBAAkBsmB,aAAa,WAAY,MAEtElpB,EAAK4C,cAAc,4BAA4B4qB,gBAAgB,YAE9D71B,oBAAMyb,KAAK7V,UAAa5F,oBAAMyb,KAAK7V,QAAQnF,QAAQwK,cAAc,uBAClEwQ,KAAK7V,QAAQnF,QAAQwK,cAAc,qBAAqBsmB,aAAa,WAAY,KAErF,IAAI01B,GAAOxrC,KAAK7V,QAAQshD,uBACxB,KAAKzrC,KAAK3Z,OAAO84B,oBACb,IAAK,GAAIh6B,GAAI,EAAGA,EAAIqmD,EAAKpmD,OAAQD,IACzBqmD,EAAKrmD,KAAO6a,KAAK7V,QAAQyiD,iBACzB5sC,KAAK7V,QAAQskD,cAAcjD,EAAKrmD,IAAI2wB,aAAa,WAAY,KAG7D9V,KAAK7V,QAAQskD,cAAcjD,EAAKrmD,IAAIi1B,gBAAgB,WAIhE,IAAInpB,GAAMu6C,EAAKpmD,MACf,IAAI4a,KAAK3Z,OAAO6wB,qBACZlX,KAAK3Z,OAAOwS,gBAAkB1U,WAAS,OAAQ+E,EAAKlF,UAEnD,IAAIiN,EAAM,EAAG,CAEd,GAAIjN,GAAOgc,KAAK7V,QAAQwhD,gBAAgBH,EAAKv6C,EAAM,IAAIjN,IACvDgc,MAAK3Z,OAAOwS,gBAAkB1U,WAAS,OAAQH,GAEnD,GAAI+2B,GAAU52B,WAAS,aAAc+E,GACjCy3B,EAAcx8B,WAAS,yBAA0B6b,KAAK7V,QAAQwjD,gBAC9D3tC,MAAK3Z,OAAOg6B,UAAY97B,oBAAMw2B,IAAY7xB,EAAKsO,SAAWmpB,IAAgBz3B,EAAKsO,OAAO5O,QAAQ,mBAC9FoX,KAAK3Z,OAAOyS,OAAS3U,WAAS,SAAU+E,EAAKlF,MACxCgc,KAAK3Z,OAAOyS,QACbkH,KAAKstC,YAAYpkD,EAAKlF,OAG9Bgc,KAAK3Z,OAAOqvB,YAAcxsB,EAAK2hD,IACzB7qC,KAAK3Z,OAAO6wB,sBAA2BhuB,EAAKwlD,yBAC9C1uC,KAAKmhB,SAASnhB,KAAK7V,QAAQyiD,kBAE1B5sC,KAAK3Z,OAAO0C,iBACbiX,KAAKsC,cAAe,IAI5BikC,EAAYv8B,UAAUyT,aAAe,WACR,YAArBzd,KAAK3Z,OAAOoE,MAAuBlG,oBAAMyb,KAAK7V,UACkB,KAA5D6V,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,OAAiBgY,KAAK3Z,OAAO4B,YAC/E+X,KAAKmtC,kBAAiB,IAIlC5G,EAAYv8B,UAAUwkC,gBAAkB,WACpCxuC,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,EAIjD,KAFA,GAAIqmD,GAAkBxuC,KAAK2uC,kBACvBC,EAAa,EACVA,EAAaJ,EAAgBppD,QAAQ,CACxC,GAAIypD,GAASL,EAAgBI,GACzBE,EAASz4C,GAAY2J,KAAK3Z,OAAQwoD,EACtC7uC,MAAK3Z,OAAO8B,cAAc7C,KAAKwpD,GAC/BF,IAEJ5uC,KAAK3Z,OAAO7B,eAAgB2D,cAAe6X,KAAK3Z,OAAO8B,gBAAiB,IAE5Eo+C,EAAYv8B,UAAU89B,cAAgB,SAAU5+C,GAE5C,IAAK8W,KAAK3Z,OAAO84B,qBAAuB56B,oBAAM2E,EAAKlF,MAC/Cgc,KAAK7V,QAAQskD,cAAcvlD,EAAKqkD,UAAUnzB,gBAAgB,gBAEzD,IAAIpa,KAAK7V,QAAQshD,wBAAwBrmD,OAAS,EAAG,CACtD,GAAI07C,GAAgB9gC,KAAK7V,QAAQshD,wBAAwBzrC,KAAK7V,QAAQshD,wBAAwBrmD,OAAS,EACvG4a,MAAK7V,QAAQskD,cAAc3N,GAAetxC,cAAc,kBAAkB4qB,gBAAgB,YAK9F,IAHuC,IAAnCpa,KAAK7V,QAAQyiD,kBACb5sC,KAAK7V,QAAQnF,QAAQ8wB,aAAa,WAAY,MAE7C9V,KAAKsC,aAEN,YADAtC,KAAKsC,cAAe,EAGxBtC,MAAKwuC,kBACoC,IAArCxuC,KAAK3Z,OAAO8B,cAAc/C,SAC1B8L,WAAS,0BAA0B,EAAO8O,KAAK7V,QAAQwjD,iBACvDtsB,eAAarhB,KAAK3Z,OAAOrB,SV9oCX,kBUgpClBgb,KAAK3Z,OAAOU,OAAOyW,OACnBwC,KAAKohB,cAAc,WAAYl4B,GAC/B8W,KAAK3Z,OAAOqvB,YAAc,MAE9B6wB,EAAYv8B,UAAUoX,cAAgB,SAAUl6B,EAAQgC,GACpD,GAAIqE,IAAcrG,OAAQA,EAAQsG,YAAatE,EAAKlF,KAAMse,aAActC,KAAKwmC,YAC7ExmC,MAAK3Z,OAAOwH,QAAQ,aAAcN,GAClCyS,KAAKwmC,aAAc,GAEvBD,EAAYv8B,UAAUoO,WAAa,WAC/BpY,KAAKof,gBAAe,GACpBpf,KAAKqf,eAAiB,GAAIC,kBAAetf,KAAK7V,QAAQnF,SAClDu6B,UAAWvf,KAAK+uC,aAAahvC,KAAKC,MAClC8S,WAAY9S,KAAK8S,WACjB7f,UAAW,UAEf+M,KAAKyf,mBAAqB,GAAIH,kBAAetf,KAAKhb,SAC9Cu6B,UAAWvf,KAAKgvC,eAAejvC,KAAKC,MACpC8S,WAAY9S,KAAK8S,WACjB7f,UAAW,YAEf0sB,eAAat3B,IAAI2X,KAAK7V,QAAQnF,QAAS,OAAQgb,KAAKivC,YAAajvC,OAErEumC,EAAYv8B,UAAUgM,aAAe,WACjChW,KAAKof,gBAAe,GACpBpf,KAAKqf,eAAepP,UACpBjQ,KAAKyf,mBAAmBxP,UACxB0P,eAAaj3B,OAAOsX,KAAK7V,QAAQnF,QAAS,OAAQgb,KAAKivC,cAE3D1I,EAAYv8B,UAAUoV,eAAiB,SAAUU,GAC7C,GAAIA,EAAQ,CAER,GAAIC,GAAU/f,KACVvJ,EAAMuJ,KAAK7V,QAAQiiD,YACvBpsC,MAAKggB,SAAW,GAAIC,SAAMxpB,GACtBypB,IAAK,SAAUC,GACU,IAAjBA,EAAI3N,UAAkB2N,EAAIC,cAAc5oB,OAAOvR,UAAUC,SAAS,cAClE65B,EAAQ7C,kBAGhBwD,QAAS,SAAUlhB,GACf,GAAIugB,EAAQ15B,OAAOg6B,SAAU,CACzB7gB,EAAE4gB,cAAclZ,iBACZ6Y,EAAQ15B,OAAO84B,sBACfjuB,WAAS,yBAA0B6uB,EAAQ15B,OAAO84B,oBAAqBY,EAAQ51B,QAAQwjD,iBACvF/6B,YAAUmN,EAAQ15B,OAAOrB,SV7rC3B,iBU+rCF,IAAIwS,GAASgI,EAAE4gB,cAAc5oB,MAC7B,IAAIA,EAAQ,CACR,GAAIqzC,GAAMjiD,UAAQ4O,EAAQ,IAAM7O,IAC5Bga,EAAQod,EAAQ51B,QAAQ0jD,UAAUxhD,QAAQw+C,EAC9C9qB,GAAQ51B,QAAQ2jD,UAAUnrC,YAOtC3C,MAAKggB,UACLhgB,KAAKggB,SAAS/P,WAK1Bs2B,EAAYv8B,UAAU+jC,gBAAkB,WACpC1sB,eAAarhB,KAAK3Z,OAAOrB,SVjtCP,iBUktClBgb,KAAK7V,QAAQgzB,iBACbnd,KAAK3Z,OAAO7B,eAAgB2D,mBAAqB,GACjD6X,KAAK3Z,OAAOU,OAAOyW,QACoB,IAAnCwC,KAAK7V,QAAQyiD,mBACb5sC,KAAKghB,WAAa,MAEtBhhB,KAAKsC,cAAe,GAExBikC,EAAYv8B,UAAUilC,YAAc,WAChCjvC,KAAKmhB,SAAS,OAElBolB,EAAYv8B,UAAUklC,oBAAsB,WACxC,MAAS3qD,qBAAMyb,KAAK0hB,kBACoD,KAApE4B,SAAStjB,KAAK0hB,iBAAiBr9B,aAAa,iBAAkB,KAItEkiD,EAAYv8B,UAAUglC,eAAiB,SAAUxvC,GAC7C,GAAKQ,KAAKuS,WAGV,OAAQ/S,EAAEtY,QACN,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,MACL,IAAK,MACL,IAAK,WACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,KACL,IAAK,WACL,IAAK,SACL,IAAK,QACDsY,EAAE0H,mBAMdq/B,EAAYv8B,UAAU+kC,aAAe,SAAUvvC,GAC3C,GAAKQ,KAAKuS,WAAV,CAGA/S,EAAE0H,gBACF,IASIsmC,GACA7rB,EACA/E,EAXA11B,EAASsY,EAAEtY,OAEXioD,EAAYjhD,EAAc8R,KAAK3Z,OAAQ2Z,KAAK7V,QAAQC,YACpDglD,EAAaD,EAAU/pD,OAEvBiqD,GADUrvC,KAAK0hB,iBACJ1hB,KAAKkvC,uBAChBI,EAAWtvC,KAAK7V,QAAQyiD,iBACxB2C,EAAgBvvC,KAAK7V,QAAQshD,uBAKjC,QAAQvkD,GACJ,IAAK,WACD8Y,KAAK3Z,OAAOU,OAAO43B,OACnBhjB,GAAWqE,KAAK3Z,OAAQ2Z,KAAK3Z,OAAO8B,cAAe6X,KAAK3Z,OAAO5B,KAAM,UACrE,MACJ,KAAK,MACDgC,EAAauZ,KAAK3Z,OAClB,MACJ,KAAK,MACL,IAAK,WACD2Z,KAAK2iB,eACL,MACJ,KAAK,QACD,IAAuC,IAAnC3iB,KAAK7V,QAAQyiD,iBACb,KAGJ,IADAY,EAAUxtC,KAAK7V,QAAQwhD,gBAAgB3rC,KAAK7V,QAAQyiD,kBAAkB5oD,KACzD,CAET,GAAIA,GAAOmY,KAAKU,MAAMV,KAAKC,UAAUoxC,GACrCxtC,MAAKstC,YAAYtpD,GAErB,KACJ,KAAK,QACDyH,EAAUuU,KAAK3Z,OACf,MACJ,KAAK,QACD2Z,KAAK3Z,OAAOoN,WAAa,GACzBF,EAAayM,KAAK3Z,OAClB,MACJ,KAAK,QACDsF,EAASqU,KAAK3Z,OACd,MACJ,KAAK,QACD2Z,KAAK7G,YACL,MACJ,KAAK,KACD6G,KAAK4iB,eACL,MACJ,KAAK,QACD,IAAKr+B,oBAAM4qD,EAAU,KAAOnvC,KAAK3Z,OAAO84B,oBAAqB,CACzD,GAAIgtB,GAAUnsC,KAAK7V,QAAQiiD,aAAa58C,cAAc,cAClDggD,EAAYrD,EAAQpqB,UACpB0tB,EAAgBzvC,KAAK7V,QAAQyiD,gBACjC5sC,MAAK7V,QAAQwjD,gBAAgBC,kBAAkB,EAAGuB,EAAU/pD,OAAS,GACrE+mD,EAAQpqB,UAAYytB,GACG,IAAnBC,GACAzvC,KAAKmhB,SAASsuB,GAGtB,KACJ,KAAK,WACL,IAAK,MACD,IAAKlrD,oBAAM4qD,EAAU,IACjB,GAAKnvC,KAAK3Z,OAAO84B,qBAAoC,aAAb3f,EAAEtY,OAGrC,CAAA,IAAuC,IAAnC8Y,KAAK7V,QAAQyiD,kBAAwC,QAAbptC,EAAEtY,OAC/C,MAEM8Y,MAAK+mC,cAKX/mC,KAAKmhB,SAAS,GACdnhB,KAAK+mC,cAAe,IALpB/mC,KAAK0vC,iBACL1vC,KAAK+mC,cAAe,OAPpB/mC,MAAK7V,QAAQ2jD,UAAU,EAc/B,MACJ,KAAK,UACIvpD,oBAAM4qD,EAAU,MACZnvC,KAAK3Z,OAAO84B,oBAIbnf,KAAKmhB,SAASiuB,EAAa,GAH3BpvC,KAAK7V,QAAQ2jD,UAAUsB,EAAa,GAM5C,MACJ,KAAK,YACL,IAAK,WACL,IAAK,SACL,IAAK,QACIpvC,KAAK3Z,OAAO84B,oBAIR56B,oBAAM4qD,EAAU,MACZ5qD,oBAAM+qD,KAA2B,IAAdA,EAIH,WAAb9vC,EAAEtY,QAAoC,cAAbsY,EAAEtY,OAC3B8Y,KAAK7V,QAAQ2jD,UAAU,GAGvB9tC,KAAK7V,QAAQwjD,gBAAgBC,kBAAkB,EAAGuB,EAAU/pD,OAAS,GAPzE4a,KAAK2vC,aAAaR,EAAWG,EAAU,KAAM9vC,IALrDQ,KAAK7V,QAAQ2jD,UAAwB,cAAbtuC,EAAEtY,QAAuC,WAAbsY,EAAEtY,OAAuB,EAAIioD,EAAU/pD,OAAS,EAiBxG,MACJ,KAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,YACD4a,KAAK4vC,eAAeL,EAAeF,EAAUC,EAAU9vC,EACvD,MACJ,KAAK,OACL,IAAK,SACL,IAAK,UACL,IAAK,YACDQ,KAAK6vC,gBAAgBV,EAAWG,EAAUD,EAAUE,EAAe/vC,EACnE,MACJ,KAAK,SACL,IAAK,WACIQ,KAAK3Z,OAAO84B,oBAIbnf,KAAK8vC,iBAAiBX,EAAW3vC,EAAG8vC,GAHpCtvC,KAAK+vC,aAAaZ,EAAW3vC,EAAG8vC,EAKpC,MACJ,KAAK,OACD3tB,GAAax9B,WAAS6b,KAAK3Z,OAAO1B,MAAQ,KAAO,OAAQwqD,EAAU,KACnEnvC,KAAK3Z,OAAO7B,eAAgB2D,cAAew5B,IAAa,GACxD3hB,KAAK4rC,cAAcjqB,EACnB,MACJ,KAAK,SACL,IAAK,WACD3hB,KAAK+vC,aAAaZ,EAAW3vC,EAAG8vC,EAChC,MACJ,KAAK,MACD1yB,GAAYz4B,WAAS6b,KAAK3Z,OAAO1B,MAAQ,KAAO,OAAQwqD,EAAUC,EAAa,KAC/EpvC,KAAK3Z,OAAO7B,eAAgB2D,cAAey0B,IAAY,GACvD5c,KAAK4rC,cAAchvB,MAK/B2pB,EAAYv8B,UAAU2kC,gBAAkB,WACpC,MAAO3uC,MAAK7V,QAAQkjD,sBAExB9G,EAAYv8B,UAAU7Q,WAAa,WAC/B,GAAyC,IAArC6G,KAAK3Z,OAAO8B,cAAc/C,OAAc,CACxC4a,KAAK3Z,OAAOgD,SAAW2W,KAAK7V,QAAQkjD,oBAGpC,KAAK,GADDl/C,GAAQ6R,KAAK3Z,OAAOgD,SACflE,EAAI,EAAGA,EAAIgJ,EAAM/I,OAAQD,IAC9B,IAAKiU,GAAkBjL,EAAMhJ,IAEzB,WADAkG,IAAmB2U,KAAK3Z,OAAQ8H,EAAMhJ,GAAIkU,GAIlDC,IAAS0G,KAAK3Z,OAAQ2Z,KAAK3Z,OAAO5B,KAAMub,KAAK3Z,OAAO8B,iBAG5Do+C,EAAYv8B,UAAU2Y,cAAgB,WAClC,GAAI3iB,KAAK3Z,OAAO8B,eAAiB6X,KAAK3Z,OAAO8B,cAAc/C,OAAS,EAAG,CACnE4a,KAAK3Z,OAAOgD,SAAW2W,KAAK7V,QAAQkjD,oBAGpC,KAAK,GADDl/C,GAAQ6R,KAAK3Z,OAAOgD,SACflE,EAAI,EAAGA,EAAIgJ,EAAM/I,OAAQD,IAC9B,IAAK8T,GAAc9K,EAAMhJ,IAErB,WADAkG,IAAmB2U,KAAK3Z,OAAQ8H,EAAMhJ,GAAI+T,GAIlDrF,IAAamM,KAAK3Z,OAAQ,YAGlCkgD,EAAYv8B,UAAU4Y,cAAgB,WACO,IAArC5iB,KAAK3Z,OAAO8B,cAAc/C,SAC1B4a,KAAKmc,mBACLnjB,GAASgH,KAAK3Z,UAGtBkgD,EAAYv8B,UAAUmS,iBAAmB,WAErC,GAAIn4B,GAAOgc,KAAK2uC,kBAAkB,EAClC/1C,IAAmBoH,KAAK3Z,OAAQrC,IAGpCuiD,EAAYv8B,UAAU6lC,gBAAkB,SAAUV,EAAWG,EAAUD,EAAUE,EAAe/vC,GACvFQ,KAAK3Z,OAAO84B,qBAIK,IAAdmwB,GAAiC,SAAb9vC,EAAEtY,QAAkC,WAAbsY,EAAEtY,QAG1B,IAAdooD,GAAmBD,IAAaC,IACrB,SAAb9vC,EAAEtY,QAAkC,WAAbsY,EAAEtY,SAAwB8Y,KAAKgwC,WAAWT,EAAeF,GAInFrvC,KAAKiwC,kBAAkBX,EAAUC,EAAeJ,EAAW3vC,GAH3DQ,KAAKkwC,qBAAqBZ,EAAUD,EAAUE,EAAe/vC,GAJ7DQ,KAAK8vC,iBAAiBX,EAAW3vC,EAAG8vC,GAJxCtvC,KAAK+vC,aAAaZ,EAAW3vC,EAAG8vC,IAgBxC/I,EAAYv8B,UAAU+lC,aAAe,SAAU5nD,EAAeqX,EAAG+tC,IACxDhpD,oBAAMyb,KAAK0hB,mBAAqB1hB,KAAK3Z,OAAO84B,oBAC5B,aAAb3f,EAAEtY,OACF8Y,KAAK7V,QAAQ2jD,UAAU9tC,KAAKkvC,sBAAwB,GAGpDlvC,KAAK7V,QAAQ2jD,UAAU9tC,KAAKkvC,sBAAwB,GAGlD3qD,oBAAMgpD,KAA2B,IAAdA,EASpBhpD,oBAAM4D,EAAc,KACrB6X,KAAK7V,QAAQ2jD,UAAU,GATV,aAAbtuC,EAAEtY,QAAsC,aAAbsY,EAAEtY,QAAsC,cAAbsY,EAAEtY,QAAuC,WAAbsY,EAAEtY,OACpF8Y,KAAK7V,QAAQ2jD,UAAUP,GAAaA,IAAaplD,EAAc/C,OAAS,EAAK,EAAI,IAGjF4a,KAAK7V,QAAQ2jD,UAAUP,GAA0B,IAAbA,EAAkB,EAAI,KAStEhH,EAAYv8B,UAAU4lC,eAAiB,SAAUL,EAAeF,EAAUC,EAAU9vC,GAChF,GAAKQ,KAAKgwC,WAAWT,EAAeF,KAA2B,IAAdC,GAAiC,eAAb9vC,EAAEtY,QAAwC,YAAbsY,EAAEtY,OAQ/F,GAAK3C,oBAAMyb,KAAK0hB,mBAAqB2tB,IAAaC,EAIlD,IAAkB,IAAdA,GAAgC,cAAb9vC,EAAEtY,QAA0B8Y,KAAK3Z,OAAO84B,oBAAqB,CACrF,GAAI2E,GAAQwrB,CACZC,GAAc9xC,MACduC,KAAK7V,QAAQuhC,WAAW6jB,GACxBvvC,KAAKmhB,SAAS2C,OAEI,eAAbtkB,EAAEtY,QACP8Y,KAAK7V,QAAQ2jD,UAAUwB,OAVvBC,GAAcjqD,KAAK0a,KAAKkvC,uBACxBlvC,KAAK7V,QAAQuhC,WAAW6jB,OATpBF,GAAWC,EACXtvC,KAAK7V,QAAQwjD,gBAAgBC,kBAAkByB,EAAUC,GAGzDtvC,KAAK7V,QAAQwjD,gBAAgBC,kBAAkB0B,EAAUD,IAkBrE9I,EAAYv8B,UAAU8lC,iBAAmB,SAAU3hD,EAAOqR,EAAG+tC,GACzD,GAAInqB,EACJ,IAAK7+B,oBAAMyb,KAAK0hB,kBAKNn9B,oBAAMgpD,KAA2B,IAAdA,EAKpBhpD,oBAAM4J,EAAM,MACbi1B,EAAW,GALfA,EAAyB,aAAb5jB,EAAEtY,QAAsC,WAAbsY,EAAEtY,OACrCqmD,GAAaA,EAAWp/C,EAAM/I,OAAU,EAAI,GAAKmoD,GAAaA,EAAW,EAAK,EAAI,OAPvD,CAC/B,GAAI4C,GAAYnwC,KAAKkvC,qBACrB9rB,GAAyB,aAAb5jB,EAAEtY,QAAsC,WAAbsY,EAAEtY,OACrCipD,GAAcA,EAAYhiD,EAAM/I,OAAS,EAAK,EAAI,GAAK+qD,GAAcA,EAAY,EAAK,EAAI,GAWlGnwC,KAAKmhB,SAASiC,IAGlBmjB,EAAYv8B,UAAU2lC,aAAe,SAAUxhD,EAAOiiD,EAAYf,EAAU7vC,GACtC,YAA9BQ,KAAK7V,QAAQkmD,cAA4D,iBAA9BrwC,KAAK7V,QAAQkmD,aACvC,WAAb7wC,EAAEtY,QAAoC,UAAbsY,EAAEtY,QACvB3C,oBAAMyb,KAAKghB,aAAehhB,KAAK0mC,iBAAmB0J,IAClDpwC,KAAK0mC,eAAiB0J,GAET,aAAb5wC,EAAEtY,OACF8Y,KAAK7V,QAAQwjD,gBAAgBC,kBAAkB5tC,KAAK0mC,eAAgBv4C,EAAM/I,OAAS,GAGnF4a,KAAK7V,QAAQwjD,gBAAgBC,kBAAkB,EAAG5tC,KAAK0mC,gBAE3D1mC,KAAKghB,WAAaovB,GAGD,UAAb5wC,EAAEtY,OACF8Y,KAAK7V,QACDuhC,WAAW1rB,KAAKswC,WAAW/rD,oBAAM6rD,GAAc,EAAIA,EAAY7rD,oBAAM8qD,GAAYlhD,EAAM/I,OAAS,EAAIiqD,EAAU7vC,IAG9Gjb,oBAAM6rD,GACNpwC,KAAK7V,QAAQ2jD,UAAU,GAGvB9tC,KAAK7V,QAAQuhC,WAAW1rB,KAAKswC,WAAW/rD,oBAAM8qD,GAAY,EAAIA,EAAUe,EAAY5wC,IAMhGQ,KAAK7V,QAAQwjD,gBAAgBG,UAAyB,cAAbtuC,EAAEtY,QAAuC,WAAbsY,EAAEtY,OAAuB,EAAIiH,EAAM/I,OAAS,IAGzHmhD,EAAYv8B,UAAUsmC,WAAa,SAAU7uB,EAAOqC,EAAOtkB,GACvD,GAAI+wC,GAAUvwC,KAAK7V,QAAQshD,uBAC3B,IAAiB,UAAbjsC,EAAEtY,OACF,IAAS/B,EAAIs8B,EAAQ,EAAGt8B,GAAK2+B,EAAO3+B,IAChCorD,EAAQjrD,KAAKH,OAIjB,KAAK,GAAIA,GAAI2+B,EAAQ,EAAGrC,GAASt8B,EAAGA,IAChCorD,EAAQjrD,KAAKH,EAGrB,OAAOorD,IAEXhK,EAAYv8B,UAAUkmC,qBAAuB,SAAUZ,EAAUkB,EAAQC,EAAejxC,GACpF,GAAIskB,GAAQ0sB,GAAwB,cAAbhxC,EAAEtY,QAAuC,WAAbsY,EAAEtY,OAAuB,GAAK,GAC7Eu6B,EAAQl9B,oBAAMyb,KAAKghB,YAAcsuB,EAAWmB,EAAc,EAC1DhvB,KAAUqC,EACV9jB,KAAK7V,QAAQ2jD,UAAUrsB,GAGnBA,EAAQqC,EACS,cAAbtkB,EAAEtY,QAAuC,WAAbsY,EAAEtY,OAC9B8Y,KAAK7V,QAAQwjD,gBAAgBC,kBAAkBnsB,EAAOqC,GAGtD9jB,KAAK7V,QAAQwjD,gBAAgBC,kBAAkB9pB,EAAOrC,GAGxC,cAAbjiB,EAAEtY,QAAuC,WAAbsY,EAAEtY,OACnC8Y,KAAK7V,QAAQwjD,gBAAgBC,kBAAkB9pB,EAAOrC,GAGtDzhB,KAAK7V,QAAQwjD,gBAAgBC,kBAAkBnsB,EAAOqC,GAG9D9jB,KAAKghB,WAAahhB,KAAK7V,QAAQyiD,kBAEnCrG,EAAYv8B,UAAUmX,SAAW,SAAUv0B,GACvC,GAAI60B,GAAQzhB,KAAK0hB,iBACbgvB,EAAc1wC,KAAK7V,QAAQskD,cAAc7hD,EACzC60B,KACAA,EAAMrH,gBAAgB,YACtBiH,eAAaI,IAASoB,GAAW8tB,MAEhCpsD,oBAAMmsD,KACP1wC,KAAK7V,QAAQnF,QAAQ8wB,aAAa,WAAY,MAC9C46B,EAAY56B,aAAa,WAAY,KACrC46B,EAAYlsC,QACZoO,YAAU89B,IAAe7tB,GAAW8tB,OAG5CpK,EAAYv8B,UAAU0lC,eAAiB,WACnC,GAAIkB,GAAY9qD,SAAO,SAAUka,KAAKhb,QACtCgb,MAAK7V,QAAQnF,QAAQ8wB,aAAa,WAAY,KAC9C,IAAI+6B,GAAY/qD,SAAO,oBAAqBka,KAAKhb,QACjD6rD,GAAU/6B,aAAa,WAAY,KACnC+6B,EAAUrsC,QACVoO,YAAUi+B,IAAahuB,GAAW8tB,KAClCC,EAAU96B,aAAa,WAAY,KACR,IAAvB86B,EAAUE,UAAyC,IAAvBD,EAAUC,UACtCzvB,eAAauvB,IAAa/tB,GAAW8tB,MAG7CpK,EAAYv8B,UAAU0X,eAAiB,WACnC,MAAO57B,UAAO,IAAM6qD,GAAa3wC,KAAKhb,UAE1CuhD,EAAYv8B,UAAUgmC,WAAa,SAAUS,EAAepB,GAExD,IAAK,GADD0B,IAAQ,EACH5rD,EAAI,EAAGA,GAAKsrD,EAAcrrD,OAAS,EAAGD,IAC3C,GAAIsrD,EAActrD,KAAOkqD,EAAU,CAC/B0B,GAAQ,CACR,OAGR,MAAOA,IAGXxK,EAAYv8B,UAAUimC,kBAAoB,SAAUX,EAAUmB,EAAetB,EAAW3vC,IAClE,IAAd8vC,EACAtvC,KAAK7V,QAAQ2jD,UAAU,GAGnBvpD,oBAAMyb,KAAKghB,aAAexhB,EAAEwd,UAC5Bhd,KAAKghB,WAAahhB,KAAK7V,QAAQyiD,iBAC/B5sC,KAAK7V,QAAQuhC,YAAY4jB,EAAwB,cAAb9vC,EAAEtY,QAAuC,WAAbsY,EAAEtY,OACzDooD,GAAaA,IAAaH,EAAU/pD,OAAS,EAAK,EAAI,GAAOkqD,GAA0B,IAAbA,EAAkB,EAAI,MAGxF,cAAb9vC,EAAEtY,QAAuC,YAAbsY,EAAEtY,QACb,cAAbsY,EAAEtY,SAAmE,IAAzCupD,EAAcpkD,QAAQijD,EAAW,GACzDA,IAAaH,EAAU/pD,OAAS,GAChCqrD,EAAcnrD,KAAKgqD,EAAW,GAGhB,YAAb9vC,EAAEtY,SAAiE,IAAzCupD,EAAcpkD,QAAQijD,EAAW,GAC/C,IAAbA,GACAmB,EAAcnrD,KAAKgqD,EAAW,GAIlCmB,EAAchzC,MAElBuC,KAAK7V,QAAQuhC,WAAW+kB,IAGP,WAAbjxC,EAAEtY,OACG8Y,KAAKgwC,WAAWS,EAAezwC,KAAKkvC,sBAAwB,GAK7DlvC,KAAKmhB,SAASnhB,KAAKkvC,sBAAwB,IAJ3CuB,EAAcnrD,KAAM0a,KAAKkvC,sBAAwB,GACjDlvC,KAAK7V,QAAQuhC,WAAW+kB,IAMtBzwC,KAAKgwC,WAAWS,EAAezwC,KAAKkvC,sBAAwB,GAKlElvC,KAAKmhB,SAASnhB,KAAKkvC,sBAAwB,IAJ3CuB,EAAcnrD,KAAM0a,KAAKkvC,sBAAwB,GACjDlvC,KAAK7V,QAAQuhC,WAAW+kB,KAU5ClK,EAAYv8B,UAAUgU,aAAe,SAAUxe,GAC3C,GAAyB,YAArBQ,KAAK3Z,OAAOoE,KAIhB,OADatG,WAAS,SAAUqb,IAE5B,IAAK,cACDQ,KAAK2kB,YAAYxgC,WAAS,MAAOqb,GACjC,MACJ,KAAK,gBACDQ,KAAK4kB,cAAczgC,WAAS,MAAOqb,GACnC,MACJ,KAAK,WACDQ,KAAK6kB,SAAS1gC,WAAS,KAAMqb,GAC7B,MACJ,KAAK,eACDQ,KAAKwmC,aAAc,CACnB,MACJ,KAAK,aACDxmC,KAAKwmC,aAAc,EACnBxmC,KAAK8kB,WAAW3gC,WAAS,KAAMqb,GAAIrb,WAAS,UAAWqb,GACvD,MACJ,KAAK,YACDQ,KAAKwmC,aAAc,EACnBxmC,KAAK0c,iBACL,MACJ,KAAK,iBACD1c,KAAKwmC,aAAc,EACnBxmC,KAAKkd,mBAKjBqpB,EAAYv8B,UAAUgnC,WAAa,SAAU5oD,GAEzC,GAAImkD,GAAcvsC,KAAK7V,QAAQqiD,wBAE3Br2C,KACA86C,IAAyE,KAA5DjxC,KAAK3Z,OAAOyB,oBAAoBC,UAAU/C,QAAQgD,QAAgBgY,KAAK3Z,OAAO4B,YAC3F6B,EAASkW,KAAK3Z,OAAO1B,MAAQ,KAAO,MACxC,IAAIqb,KAAK3Z,OAAO1B,QAAUssD,EACtB,IAAK,GAAI9rD,GAAI,EAAG8L,EAAMs7C,EAAYnnD,OAAQD,EAAI8L,EAAK9L,KACU,IAArDiD,EAAMiE,QAAQlI,WAAS2F,EAAQyiD,EAAYpnD,MAC3CgR,EAAQ7Q,KAAKinD,EAAYpnD,QAKjC,KAAK,GAAIA,GAAI,EAAG8L,EAAMs7C,EAAYnnD,OAAQD,EAAI8L,EAAK9L,IAAK,CACpD,GAAI+rD,GAAS/sD,WAAS,aAAcooD,EAAYpnD,IAAMhB,WAAS,OAAQooD,EAAYpnD,KACpD,IAA3BiD,EAAMiE,QAAQ6kD,IACd/6C,EAAQ7Q,KAAKinD,EAAYpnD,IAIrC,MAAOgR,IAEXowC,EAAYv8B,UAAU2a,YAAc,SAAUt/B,GAE1C,GADA2a,KAAK3Z,OAAOkB,aAAe,cACvBhD,oBAAMc,GAEN,WADA2a,MAAK2iB,eAIT,IAAIxsB,GAAU6J,KAAKgxC,WAAW3rD,EAC9B,IAAuB,IAAnB8Q,EAAQ/Q,OAAZ,CAMA,IAAK,GAFDpB,MACAwV,KACKrU,EAAI,EAAGA,EAAIgR,EAAQ/Q,OAAQD,IAChCnB,EAAKmB,GAAKgR,EAAQhR,GAClBqU,EAAOrU,GAAKkR,GAAY2J,KAAK3Z,OAAQrC,EAAKmB,GAE9CoU,IAAcyG,KAAK3Z,OAAQrC,EAAMwV,KAErC+sC,EAAYv8B,UAAU4a,cAAgB,SAAUv/B,GAC5C,GAAId,oBAAMc,GAEN,WADA2a,MAAK7G,YAIT,IAAIg4C,GAAWnxC,KAAKgxC,WAAW3rD,EAC/B,IAAwB,IAApB8rD,EAAS/rD,OAAb,CAMA,IAAK,GAFDpB,MACAwV,KACKrU,EAAI,EAAGA,EAAIgsD,EAAS/rD,OAAQD,IACjCnB,EAAKmB,GAAKgsD,EAAShsD,GACnBqU,EAAOrU,GAAKkR,GAAY2J,KAAK3Z,OAAQrC,EAAKmB,GAE9CuU,IAAgBsG,KAAK3Z,OAAQrC,EAAMwV,KAEvC+sC,EAAYv8B,UAAU6a,SAAW,SAAUzgC,GACvC,IAAIG,oBAAMH,GAAV,CAIA,GAAI+R,GAAU6J,KAAKgxC,YAAY5sD,GAC3B+R,GAAQ/Q,OAAS,GACjB4a,KAAKstC,YAAYn3C,EAAQ,MAGjCowC,EAAYv8B,UAAU8a,WAAa,SAAU1gC,EAAI6J,GAE7C,GADA+R,KAAK3Z,OAAOkB,aAAe,cACvBhD,oBAAMH,GAEN,WADA4b,MAAK4iB,eAIT,IAAIzsB,GAAU6J,KAAKgxC,YAAY5sD,GAC3B+R,GAAQ/Q,OAAS,IACjBwT,GAAmBoH,KAAK3Z,OAAQ8P,EAAQ,IACnC5R,oBAAM0J,GASP+K,GAASgH,KAAK3Z,QARV4S,GAAc+G,KAAK3Z,OAAOgD,SAAS,IACnC2R,GAAOgF,KAAK3Z,OAAQ2Z,KAAK3Z,OAAO5B,KAAMwJ,GAGtC5C,GAAmB2U,KAAK3Z,OAAQ2Z,KAAK3Z,OAAOgD,SAAS,GAAI6P,MAQlEqtC,WCv4DX6K,IAAkBrd,OAAOsd,GAAmBC,GAAsBC,GAAsBC,GAAeC,GAAmBC,GAAqBC,8QXGvH,0CAIG,wBAEN,sEAQM,wEAMG,mCAED,kCAEA,2BAEN,oBAEF,sBAEI,4EAQH,qBAEC,gDASG,0CAIN,4CAIM,qCAIN,wBAEI,gCAEI,8CAIP,6DAMI,mIAkBN,0CAME,2OA0Be,+CAEL,+BAEH,yBAEF,kDAIC,4CAIJ,4CAIG,uDAMH,4BAEA,kCAEE,gDAIF,iCAEC,mCAEC,oCAEA,uCAEG,wCAEF,sCAEA,mCAEA,wCAEE,sCAED,uCAED,wEAMG,uCAEL,oCAEE,uCAEC,uCAED,+BAEP,0BAEQ,6CAIP,yBAEK,mDAMF,6BAEF,+BAES,iCAEP,6BAEG,0BAEL,oHC5ME,4BAEG,6GAYE,4EAQR,sDAME,2BAEK,iHAYA,iCAED,qFAQF,kJAgBE,uFAUF,oCAES,qCAET,qFAQI,iCAEF,sEAQF,kDAIS,6HAUL"}
1
+ {"version":3,"file":"ej2-filemanager.min.js","sources":["../../src/file-manager/common/utility.js","../../src/file-manager/common/operations.js","../../src/file-manager/pop-up/dialog.js","../../src/file-manager/models/ajax-settings.js","../../src/file-manager/models/toolbar-settings.js","../../src/file-manager/models/search-settings.js","../../src/file-manager/models/details-view-settings.js","../../src/file-manager/models/contextMenu-settings.js","../../src/file-manager/models/navigation-pane-settings.js","../../src/file-manager/models/upload-settings.js","../../src/file-manager/models/column.js","../../src/file-manager/base/classes.js","../../src/file-manager/base/constant.js","../../src/file-manager/layout/large-icons-view.js","../../src/file-manager/actions/breadcrumb-bar.js","../../src/file-manager/pop-up/context-menu.js","../../src/file-manager/models/default-locale.js","../../src/file-manager/base/file-manager.js","../../src/file-manager/actions/toolbar.js","../../src/file-manager/actions/virtualization.js","../../src/file-manager/layout/navigation-pane.js","../../src/file-manager/layout/details-view.js","../../src/global.js"],"sourcesContent":["import * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { read, paste, Search, filter, Download, Delete } from '../common/operations';\nimport { getValue, setValue, isNullOrUndefined as isNOU, matches, select, createElement } from '@syncfusion/ej2-base';\nimport { closest, detach } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createDialog } from '../pop-up/dialog';\n/**\n * Utility file for common actions\n *\n * @param {HTMLLIElement} node - specifies the node.\n * @param {Object} data - specifies the data.\n * @param {IFileManager} instance - specifies the control instance.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function updatePath(node, data, instance) {\n var text = getValue('name', data);\n var id = node.getAttribute('data-id');\n var newText = isNOU(id) ? text : id;\n instance.setProperties({ path: getPath(node, newText, instance.hasId) }, true);\n instance.pathId = getPathId(node);\n instance.pathNames = getPathNames(node, text);\n}\n/**\n * Functions for get path in FileManager\n *\n * @param {Element | Node} element - specifies the element.\n * @param {string} text - specifies the text.\n * @param {boolean} hasId - specifies the id.\n * @returns {string} returns the path.\n * @private\n */\nexport function getPath(element, text, hasId) {\n var matched = getParents(element, text, false, hasId);\n var path = hasId ? '' : '/';\n var len = matched.length - (hasId ? 1 : 2);\n for (var i = len; i >= 0; i--) {\n path += matched[i] + '/';\n }\n return path;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} node - specifies the node element.\n * @returns {string[]} returns the path ids.\n * @private\n */\nexport function getPathId(node) {\n var matched = getParents(node, node.getAttribute('data-uid'), true);\n var ids = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n ids.push(matched[i]);\n }\n return ids;\n}\n/**\n * Functions for get path names in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @returns {string[]} returns the path names.\n * @private\n */\nexport function getPathNames(element, text) {\n var matched = getParents(element, text, false);\n var names = [];\n for (var i = matched.length - 1; i >= 0; i--) {\n names.push(matched[i]);\n }\n return names;\n}\n/**\n * Functions for get path id in FileManager\n *\n * @param {Element} element - specifies the node element.\n * @param {string} text - specifies the text.\n * @param {boolean} isId - specifies the id.\n * @param {boolean} hasId - checks the id exists.\n * @returns {string[]} returns parent element.\n * @private\n */\nexport function getParents(element, text, isId, hasId) {\n var matched = [text];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, '.' + CLS.LIST_ITEM)) {\n var parentText = isId ? el.getAttribute('data-uid') : (hasId ? el.getAttribute('data-id') :\n select('.' + CLS.LIST_TEXT, el).textContent);\n matched.push(parentText);\n }\n el = el.parentNode;\n if (el.classList.contains(CLS.TREE_VIEW)) {\n break;\n }\n }\n return matched;\n}\n/**\n * Functions for generate path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function generatePath(parent) {\n var key = parent.hasId ? 'id' : 'name';\n var newPath = parent.hasId ? '' : '/';\n var i = parent.hasId ? 0 : 1;\n for (i; i < parent.pathId.length; i++) {\n // eslint-disable-next-line\n var data = getValue(parent.pathId[i], parent.feParent);\n newPath += getValue(key, data) + '/';\n }\n parent.setProperties({ path: newPath }, true);\n}\n/**\n * Functions for remove active element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function removeActive(parent) {\n if (parent.isCut) {\n removeBlur(parent);\n parent.selectedNodes = [];\n parent.actionRecords = [];\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n }\n}\n/**\n * Selects active element in File Manager\n *\n * @param {string} action - specifies the action.\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {boolean} - returns active element.\n * @private\n */\nexport function activeElement(action, parent) {\n parent.isSearchCut = false;\n parent.actionRecords = [];\n parent.activeElements = [];\n parent.notify(events.cutCopyInit, {});\n if (parent.activeElements.length === 0) {\n return false;\n }\n removeBlur(parent);\n var blurEle = parent.activeElements;\n if (parent.activeModule !== 'navigationpane') {\n parent.targetPath = parent.path;\n }\n else {\n parent.targetPath = getParentPath(parent.path);\n }\n var i = 0;\n if (blurEle) {\n getModule(parent, blurEle[0]);\n if (action === 'cut') {\n while (i < blurEle.length) {\n addBlur(blurEle[i]);\n i++;\n }\n }\n }\n i = 0;\n parent.selectedNodes = [];\n parent.enablePaste = true;\n parent.notify(events.showPaste, {});\n while (i < parent.activeRecords.length) {\n parent.actionRecords.push(parent.activeRecords[i]);\n parent.selectedNodes.push(getValue('name', parent.activeRecords[i]));\n i++;\n }\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) &&\n parent.activeModule !== 'navigationpane') {\n parent.selectedNodes = [];\n parent.isSearchCut = true;\n var i_1 = 0;\n while (i_1 < parent.selectedItems.length) {\n parent.selectedNodes.push(parent.selectedItems[i_1]);\n i_1++;\n }\n }\n return true;\n}\n/**\n * Adds blur to the elements\n *\n * @param {Element} nodes - specifies the nodes.\n * @returns {void}\n * @private\n */\nexport function addBlur(nodes) {\n nodes.classList.add(CLS.BLUR);\n}\n/**\n * Removes blur from elements\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} hover - specifies the hover string.\n * @returns {void}\n * @private\n */\nexport function removeBlur(parent, hover) {\n var blurEle = (!hover) ? parent.element.querySelectorAll('.' + CLS.BLUR) :\n parent.element.querySelectorAll('.' + CLS.HOVER);\n var i = 0;\n while (i < blurEle.length) {\n blurEle[i].classList.remove((!hover) ? CLS.BLUR : CLS.HOVER);\n i++;\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getModule(parent, element) {\n if (element) {\n if (element.classList.contains(CLS.ROW)) {\n parent.activeModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICON)) {\n parent.activeModule = 'largeiconsview';\n }\n else {\n parent.activeModule = 'navigationpane';\n }\n }\n}\n/**\n * Gets module name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} value - specifies the value.\n * @param {boolean} isLayoutChange - specifies the layout change.\n * @returns {void}\n * @private\n */\nexport function searchWordHandler(parent, value, isLayoutChange) {\n var searchWord;\n if (value.length === 0 && !parent.isFiltered) {\n parent.notify(events.pathColumn, { args: parent });\n }\n if (parent.searchSettings.filterType === 'startsWith') {\n searchWord = value + '*';\n }\n else if (parent.searchSettings.filterType === 'endsWith') {\n searchWord = '*' + value;\n }\n else {\n searchWord = '*' + value + '*';\n }\n parent.searchWord = searchWord;\n parent.itemData = [getPathObject(parent)];\n if (value.length > 0) {\n var caseSensitive = parent.searchSettings.ignoreCase;\n var hiddenItems = parent.showHiddenItems;\n Search(parent, isLayoutChange ? events.layoutChange : events.search, parent.path, searchWord, hiddenItems, !caseSensitive);\n }\n else {\n if (!parent.isFiltered) {\n if (parent.isSortByClicked) {\n parent.notify(events.layoutChange, { files: (parent.oldView === 'Details') ? parent.detailsviewModule.gridObj.dataSource : parent.largeiconsviewModule.allItems });\n parent.isSortByClicked = false;\n }\n else {\n read(parent, isLayoutChange ? events.layoutChange : events.search, parent.path);\n }\n }\n else {\n filter(parent, events.layoutChange);\n }\n }\n}\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} view - specifies the view.\n * @returns {void}\n * @private\n */\nexport function updateLayout(parent, view) {\n parent.oldView = parent.view;\n parent.setProperties({ view: view }, true);\n if (parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) {\n parent.layoutSelectedItems = parent.selectedItems;\n }\n var searchWord = '';\n if (parent.breadcrumbbarModule.searchObj.element.value) {\n searchWord = parent.breadcrumbbarModule.searchObj.element.value;\n }\n parent.isLayoutChange = true;\n searchWordHandler(parent, searchWord, true);\n}\n/* istanbul ignore next */\n/**\n * Gets updated layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @private\n */\nexport function getTargetModule(parent, element) {\n var tartgetModule = '';\n if (element) {\n if (closest(element, '.' + CLS.ROOT + '.' + CLS.CONTROL + ' .' + CLS.GRID_CONTENT)) {\n tartgetModule = 'detailsview';\n }\n else if (closest(element, '.' + CLS.LARGE_ICONS)) {\n tartgetModule = 'largeiconsview';\n }\n else if (element.classList.contains('e-fullrow') ||\n element.classList.contains('e-icon-expandable')) {\n tartgetModule = 'navigationpane';\n }\n else if (closest(element, '.e-address-list-item')) {\n tartgetModule = 'breadcrumbbar';\n }\n else {\n tartgetModule = '';\n }\n }\n parent.targetModule = tartgetModule;\n}\n/* istanbul ignore next */\n/**\n * refresh the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function refresh(parent) {\n parent.itemData = [getPathObject(parent)];\n if (!hasReadAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionRead);\n }\n else {\n read(parent, events.refreshEnd, parent.path);\n }\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function openAction(parent) {\n read(parent, events.openEnd, parent.path);\n}\n/**\n * open action in the layout\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {Object} - returns the path data.\n * @private\n */\n// eslint-disable-next-line\nexport function getPathObject(parent) {\n return getValue(parent.pathId[parent.pathId.length - 1], parent.feParent);\n}\n/**\n * Copy files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function copyFiles(parent) {\n if (!activeElement('copy', parent)) {\n return;\n }\n else {\n parent.fileAction = 'copy';\n }\n}\n/**\n * Cut files\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function cutFiles(parent) {\n if (!activeElement('cut', parent)) {\n return;\n }\n else {\n parent.isCut = true;\n parent.fileAction = 'move';\n }\n}\n/**\n * To add class for fileType\n *\n * @param {Object} file - specifies the file.\n * @returns {string} - returns the file type.\n * @private\n */\n// eslint-disable-next-line\nexport function fileType(file) {\n var isFile = getValue('isFile', file);\n if (!isFile) {\n return CLS.FOLDER;\n }\n var imageFormat = ['bmp', 'dib', 'jpg', 'jpeg', 'jpe', 'jfif', 'gif', 'tif', 'tiff', 'png', 'ico'];\n var audioFormat = ['mp3', 'wav', 'aac', 'ogg', 'wma', 'aif', 'fla', 'm4a'];\n var videoFormat = ['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'avi', 'wmv', 'mp4', '3gp'];\n var knownFormat = ['css', 'exe', 'html', 'js', 'msi', 'pdf', 'pptx', 'ppt', 'rar', 'zip', 'txt', 'docx', 'doc',\n 'xlsx', 'xls', 'xml', 'rtf', 'php'];\n var filetype = getValue('type', file);\n filetype = filetype.toLowerCase();\n if (filetype.indexOf('.') !== -1) {\n filetype = filetype.split('.').join('');\n }\n var iconType;\n if (imageFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_IMAGE;\n }\n else if (audioFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_MUSIC;\n }\n else if (videoFormat.indexOf(filetype) !== -1) {\n iconType = CLS.ICON_VIDEO;\n }\n else if (knownFormat.indexOf(filetype) !== -1) {\n iconType = 'e-fe-' + filetype;\n }\n else {\n iconType = 'e-fe-unknown e-fe-' + filetype;\n }\n return iconType;\n}\n/* istanbul ignore next */\n/**\n * To get the image URL\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} item - specifies the item.\n * @returns {string} - returns the image url.\n * @private\n */\n// eslint-disable-next-line\nexport function getImageUrl(parent, item) {\n var baseUrl = parent.ajaxSettings.getImageUrl ? parent.ajaxSettings.getImageUrl : parent.ajaxSettings.url;\n var pathUrl = (baseUrl.indexOf('?') !== -1) ? '&path=' : '?path=';\n var imgUrl;\n var fileName = encodeURIComponent(getValue('name', item));\n var fPath = getValue('filterPath', item);\n if (parent.hasId) {\n var imgId = getValue('id', item);\n imgUrl = baseUrl + pathUrl + parent.path + '&id=' + imgId;\n }\n else if (!isNOU(fPath)) {\n imgUrl = baseUrl + pathUrl + encodeURIComponent(fPath.replace(/\\\\/g, '/')) + fileName;\n }\n else {\n imgUrl = baseUrl + pathUrl + parent.path + fileName;\n }\n imgUrl = imgUrl + '&time=' + (new Date().getTime()).toString();\n var eventArgs = {\n fileDetails: [item],\n imageUrl: imgUrl\n };\n parent.trigger('beforeImageLoad', eventArgs);\n return eventArgs.imageUrl;\n}\n/* istanbul ignore next */\n/**\n * Gets the full path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {string} path - specifies the path.\n * @returns {string} - returns the image url.\n * @private\n */\n// eslint-disable-next-line\nexport function getFullPath(parent, data, path) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', data) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', data);\n if (!isNOU(fPath)) {\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return path + filePath;\n }\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @returns {string} - returns the name.\n * @private\n */\n// eslint-disable-next-line\nexport function getName(parent, data) {\n var name = getValue('name', data);\n var fPath = getValue('filterPath', data);\n if ((parent.breadcrumbbarModule.searchObj.element.value !== '' || parent.isFiltered) && !isNOU(fPath)) {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(parent.path, '') + name;\n }\n return name;\n}\n/**\n * Gets the name\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object[]} items - specifies the item elements.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getSortedData(parent, items) {\n if (items.length === 0) {\n return items;\n }\n var query;\n if (parent.sortOrder !== 'None') {\n query = new Query().sortBy(parent.sortBy, parent.sortOrder.toLowerCase(), true).group('isFile');\n }\n else {\n query = new Query().group('isFile');\n }\n // eslint-disable-next-line\n var lists = new DataManager(items).executeLocal(query);\n return getValue('records', lists);\n}\n/**\n * Gets the data object\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} key - specifies the key.\n * @param {string} value - specifies the value.\n * @returns {Object} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getObject(parent, key, value) {\n // eslint-disable-next-line\n var currFiles = getValue(parent.pathId[parent.pathId.length - 1], parent.feFiles);\n var query = new Query().where(key, 'equal', value);\n // eslint-disable-next-line\n var lists = new DataManager(currFiles).executeLocal(query);\n return lists[0];\n}\n/**\n * Creates empty element\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLElement} element - specifies the element.\n * @param {ReadArgs | SearchArgs} args - specifies the args.\n * @returns {void}\n * @private\n */\nexport function createEmptyElement(parent, element, args) {\n var top;\n var layoutElement = select('#' + parent.element.id + CLS.LAYOUT_ID, parent.element);\n var addressBarHeight = select('#' + parent.element.id + CLS.BREADCRUMBBAR_ID, layoutElement).offsetHeight;\n top = layoutElement.offsetHeight - addressBarHeight;\n if (parent.view === 'Details') {\n top = top - select('.' + CLS.GRID_HEADER, layoutElement).offsetHeight;\n }\n if (isNOU(element.querySelector('.' + CLS.EMPTY))) {\n var emptyDiv = createElement('div', { className: CLS.EMPTY });\n var emptyFolder = createElement('div', { className: CLS.LARGE_EMPTY_FOLDER });\n var emptyEle = createElement('div', { className: CLS.EMPTY_CONTENT });\n var dragFile = createElement('div', { className: CLS.EMPTY_INNER_CONTENT });\n if (parent.view === 'Details') {\n element.querySelector('.' + CLS.GRID_VIEW).appendChild(emptyDiv);\n }\n else {\n element.appendChild(emptyDiv);\n }\n emptyDiv.appendChild(emptyFolder);\n emptyDiv.appendChild(emptyEle);\n emptyDiv.appendChild(dragFile);\n }\n if (element.querySelector('.' + CLS.EMPTY)) {\n if (!isNOU(args.error)) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Access-Denied');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Access-Details');\n }\n else if (parent.isFiltered) {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Filter-Key');\n }\n else if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Search-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'Search-Key');\n }\n else {\n element.querySelector('.' + CLS.EMPTY_CONTENT).innerHTML = getLocaleText(parent, 'Folder-Empty');\n element.querySelector('.' + CLS.EMPTY_INNER_CONTENT).innerHTML = getLocaleText(parent, 'File-Upload');\n }\n }\n var eDiv = select('.' + CLS.EMPTY, element);\n top = (top - eDiv.offsetHeight) / 2;\n eDiv.style.marginTop = top + 'px';\n}\n/**\n * Gets the directories\n *\n * @param {Object[]} files - specifies the file object.\n * @returns {Object[]} - returns the sorted data.\n * @private\n */\n// eslint-disable-next-line\nexport function getDirectories(files) {\n return new DataManager(files).executeLocal(new Query().where(events.isFile, 'equal', false, false));\n}\n/**\n * set the Node ID\n *\n * @param {ReadArgs} result - specifies the result.\n * @param {string} rootId - specifies the rootId.\n * @returns {void}\n * @private\n */\nexport function setNodeId(result, rootId) {\n // eslint-disable-next-line\n var dirs = getDirectories(result.files);\n for (var i = 0, len = dirs.length; i < len; i++) {\n setValue('_fm_id', rootId + '_' + i, dirs[i]);\n }\n}\n/**\n * set the date object\n *\n * @param {Object[]} args - specifies the file object.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function setDateObject(args, localeString, dateFormat) {\n for (var i = 0; i < args.length; i++) {\n var createdDate = new Date(getValue('dateCreated', args[i]));\n var modifiedDate = new Date(getValue('dateModified', args[i]));\n if (isNOU(dateFormat)) {\n dateFormat = \"MM/dd/yyyy\";\n }\n setValue('_fm_created', localeString.formatDate(createdDate, { format: dateFormat }), args[i]);\n setValue('_fm_modified', localeString.formatDate(modifiedDate, { format: dateFormat }), args[i]);\n }\n}\n/**\n * get the locale text\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text.\n * @returns {string} - returns the locale text.\n * @private\n */\nexport function getLocaleText(parent, text) {\n var locale = parent.localeObj.getConstant(text);\n return (locale === '') ? text : locale;\n}\n/**\n * get the CSS class\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} css - specifies the css.\n * @returns {string} - returns the css classes.\n * @private\n */\nexport function getCssClass(parent, css) {\n var cssClass = parent.cssClass;\n cssClass = (isNOU(cssClass) || cssClass === '') ? css : (cssClass + ' ' + css);\n return cssClass;\n}\n/**\n * sort on click\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {MenuEventArgs} args - specifies the menu event arguements.\n * @returns {void}\n * @private\n */\nexport function sortbyClickHandler(parent, args) {\n var tick;\n parent.isSortByClicked = true;\n if (args.item.id.indexOf('ascending') !== -1 || args.item.id.indexOf('descending') !== -1 || args.item.id.indexOf('none') !== -1) {\n tick = true;\n }\n else {\n tick = false;\n }\n if (!tick) {\n parent.sortBy = getSortField(args.item.id, parent);\n }\n else {\n parent.sortOrder = getSortField(args.item.id);\n }\n parent.itemData = [getPathObject(parent)];\n if (parent.view === 'Details') {\n if (parent.isMobile) {\n updateLayout(parent, 'Details');\n }\n else {\n parent.notify(events.sortColumn, { module: 'detailsview' });\n parent.isSortByClicked = false;\n }\n }\n if (parent.view === 'LargeIcons') {\n updateLayout(parent, 'LargeIcons');\n }\n parent.notify(events.sortByChange, {});\n}\n/**\n * Gets the sorted fields\n *\n * @param {string} id - specifies the id.\n * @returns {string} - returns the sorted fields\n * @private\n */\nexport function getSortField(id, parent) {\n var text = id.substring(id.lastIndexOf('_') + 1);\n var field = text;\n var column;\n if (parent) {\n column = parent.detailsViewSettings.columns;\n }\n switch (text) {\n case 'date':\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[i].field === 'dateModified' || column[i].field === 'dateCreated') {\n field = column[i].field;\n break;\n }\n else {\n field = '_fm_modified';\n }\n }\n break;\n case 'ascending':\n field = 'Ascending';\n break;\n case 'descending':\n field = 'Descending';\n break;\n case 'none':\n field = 'None';\n break;\n }\n return field;\n}\n/**\n * Sets the next path\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function setNextPath(parent, path) {\n var currfolders = path.split('/');\n var folders = parent.originalPath.split('/');\n // eslint-disable-next-line\n var root = getValue(parent.pathId[0], parent.feParent);\n var key = isNOU(getValue('id', root)) ? 'name' : 'id';\n for (var i = currfolders.length - 1, len = folders.length - 1; i < len; i++) {\n var eventName = (folders[i + 1] === '') ? events.finalizeEnd : events.initialEnd;\n var newPath = (folders[i] === '') ? '/' : (parent.path + folders[i] + '/');\n // eslint-disable-next-line\n var data = getObject(parent, key, folders[i]);\n var id = getValue('_fm_id', data);\n parent.setProperties({ path: newPath }, true);\n parent.pathId.push(id);\n parent.itemData = [data];\n parent.pathNames.push(getValue('name', data));\n read(parent, eventName, parent.path);\n break;\n }\n}\n/**\n * Opens the searched folder\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function openSearchFolder(parent, data) {\n parent.notify(events.clearPathInit, { selectedNode: parent.pathId[parent.pathId.length - 1] });\n parent.originalPath = getFullPath(parent, data, parent.path);\n read(parent, (parent.path !== parent.originalPath) ? events.initialEnd : events.finalizeEnd, parent.path);\n}\n/**\n * Paste handling function\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function pasteHandler(parent) {\n parent.isDragDrop = false;\n if (parent.selectedNodes.length !== 0 && parent.enablePaste) {\n var path = (parent.folderPath === '') ? parent.path : parent.folderPath;\n // eslint-disable-next-line\n var subFolder = validateSubFolder(parent, parent.actionRecords, path, parent.path);\n if (!subFolder) {\n if ((parent.fileAction === 'move' && parent.targetPath !== path) || parent.fileAction === 'copy') {\n parent.notify(events.pasteInit, {});\n paste(parent, parent.targetPath, parent.selectedNodes, path, parent.fileAction, [], parent.actionRecords);\n }\n else {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n removeBlur(parent);\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n }\n }\n }\n}\n/**\n * Validates the sub folders\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {'{ [key: string]: Object; }[]'} data - specifies the data.\n * @param {string} dropPath - specifies the drop path.\n * @param {string} dragPath - specifies the drag path.\n * @returns {boolean} - returns the validated sub folder.\n * @private\n */\n// eslint-disable-next-line\nexport function validateSubFolder(parent, data, dropPath, dragPath) {\n var subFolder = false;\n for (var i = 0; i < data.length; i++) {\n if (!getValue('isFile', data[i])) {\n var tempTarget = getFullPath(parent, data[i], dragPath);\n if (dropPath.indexOf(tempTarget) === 0) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Sub-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n else {\n var srcData = parent.dragNodes[i];\n var len = 0;\n if (srcData) {\n len = srcData.lastIndexOf('/');\n }\n var path = '';\n if (len > 0) {\n path = dragPath + srcData.substring(0, len + 1);\n }\n if (path === dropPath) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(parent, 'Same-Folder-Error'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result);\n subFolder = true;\n break;\n }\n }\n }\n return subFolder;\n}\n/**\n * Validates the drop handler\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nexport function dropHandler(parent) {\n parent.isDragDrop = true;\n if (parent.dragData.length !== 0) {\n parent.dragPath = parent.dragPath.replace(/\\\\/g, '/');\n parent.dropPath = parent.dropPath.replace(/\\\\/g, '/');\n var subFolder = validateSubFolder(parent, parent.dragData, parent.dropPath, parent.dragPath);\n if (!subFolder && (parent.dragPath !== parent.dropPath)) {\n parent.itemData = [parent.dropData];\n paste(parent, parent.dragPath, parent.dragNodes, parent.dropPath, 'move', [], parent.dragData);\n parent.notify(events.pasteInit, {});\n }\n }\n}\n/**\n * Gets the parent path\n *\n * @param {string} oldPath - specifies the old path.\n * @returns {string} - returns the parent path.\n * @private\n */\nexport function getParentPath(oldPath) {\n var path = oldPath.split('/');\n var newPath = path[0] + '/';\n for (var i = 1; i < path.length - 2; i++) {\n newPath += path[i] + '/';\n }\n return newPath;\n}\n/**\n * Gets the directory path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {ReadArgs} args - returns the read arguements.\n * @returns {string} - returns the directory path\n * @private\n */\nexport function getDirectoryPath(parent, args) {\n var filePath = getValue(parent.hasId ? 'id' : 'name', args.cwd) + '/';\n var fPath = getValue(parent.hasId ? 'filterId' : 'filterPath', args.cwd);\n if (!isNOU(fPath)) {\n if (fPath === '') {\n return parent.hasId ? filePath : '/';\n }\n return fPath.replace(/\\\\/g, '/') + filePath;\n }\n else {\n return parent.path + filePath;\n }\n}\n/**\n * Gets the do paste path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} operation - specifies the operations.\n * @param {ReadArgs} result - returns the result.\n * @returns {void}\n * @private\n */\nexport function doPasteUpdate(parent, operation, result) {\n if (operation === 'move') {\n if (!parent.isDragDrop) {\n parent.enablePaste = false;\n parent.notify(events.hidePaste, {});\n parent.notify(events.cutEnd, result);\n }\n else {\n parent.notify(events.dragEnd, result);\n }\n }\n if (parent.duplicateItems.length === 0) {\n parent.pasteNodes = [];\n }\n var flag = false;\n for (var count = 0; (count < result.files.length) && !flag; count++) {\n parent.pasteNodes.push(result.files[count][parent.hasId ? 'id' : 'name']);\n if (parent.isDragDrop) {\n parent.droppedObjects.push(result.files[count]);\n }\n }\n parent.duplicateItems = [];\n parent.duplicateRecords = [];\n if (parent.isDragDrop && !parent.isPasteError) {\n parent.isDropEnd = true;\n }\n else {\n parent.isDropEnd = false;\n }\n if (!parent.isDragDrop || (parent.path === parent.dragPath) || (parent.path === parent.dropPath)\n || parent.isSearchDrag) {\n parent.isPathDrag = false;\n read(parent, events.pasteEnd, parent.path);\n }\n else {\n readDropPath(parent);\n }\n parent.trigger('success', { action: operation, result: result });\n}\n/**\n * Reads the drop path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function readDropPath(parent) {\n var pathId = getValue('_fm_id', parent.dropData);\n parent.expandedId = pathId;\n parent.itemData = [parent.dropData];\n if (parent.isPathDrag) {\n parent.notify(events.pathDrag, parent.itemData);\n }\n else {\n if (parent.navigationpaneModule) {\n var node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n if (!node) {\n var liElement = document.querySelector('[data-id = \"' + getValue('id', parent.dropData) + '\"]');\n pathId = liElement.getAttribute(\"data-uid\");\n node = select('[data-uid=\"' + pathId + '\"]', parent.navigationpaneModule.treeObj.element);\n }\n updatePath(node, parent.dropData, parent);\n }\n read(parent, events.dropPath, parent.dropPath);\n }\n}\n/**\n * Gets the duplicated path\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} name - specifies the name.\n * @returns {object} - returns the duplicated path.\n * @private\n */\n// eslint-disable-next-line\nexport function getDuplicateData(parent, name) {\n // eslint-disable-next-line\n var data = null;\n // eslint-disable-next-line\n var records = parent.isDragDrop ? parent.dragData : parent.actionRecords;\n for (var i = 0; i < records.length; i++) {\n if (getValue('name', records[i]) === name) {\n data = records[i];\n break;\n }\n }\n return data;\n}\n/**\n * Gets the create the virtual drag element\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createVirtualDragElement(parent) {\n parent.isSearchDrag = false;\n if (parent.breadcrumbbarModule.searchObj.element.value !== '') {\n parent.isSearchDrag = true;\n }\n if (parent.activeModule !== 'navigationpane') {\n parent.dragNodes = [];\n var i = 0;\n while (i < parent.selectedItems.length) {\n parent.dragNodes.push(parent.selectedItems[i]);\n i++;\n }\n if (parent.selectedItems.length === 0 && parent.dragData && parent.dragData.length === 1) {\n parent.dragNodes.push(getItemName(parent, parent.dragData[0]));\n }\n }\n var cloneIcon = parent.createElement('div', {\n className: 'e-fe-icon ' + fileType(parent.dragData[0])\n });\n var cloneName = parent.createElement('div', {\n className: 'e-fe-name',\n innerHTML: parent.dragData[0].name\n });\n var virtualEle = parent.createElement('div', {\n className: 'e-fe-content'\n });\n virtualEle.appendChild(cloneIcon);\n virtualEle.appendChild(cloneName);\n var ele = parent.createElement('div', {\n className: CLS.CLONE\n });\n ele.appendChild(virtualEle);\n if (parent.dragNodes.length > 1) {\n var badge = parent.createElement('span', {\n className: 'e-fe-count',\n innerHTML: (parent.dragNodes.length).toString(10)\n });\n ele.appendChild(badge);\n }\n parent.virtualDragElement = ele;\n parent.element.appendChild(parent.virtualDragElement);\n}\n/**\n * Drops the stop handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStopHandler(parent, args) {\n var dragArgs = args;\n dragArgs.cancel = false;\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeDropTarget(parent);\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n removeBlur(parent);\n parent.uploadObj.dropArea = select('#' + parent.element.id + CLS.CONTENT_ID, parent.element);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n getTargetModule(parent, args.target);\n parent.notify(events.dropInit, args);\n removeBlur(parent, 'hover');\n dragArgs.fileDetails = parent.dragData;\n parent.trigger('fileDragStop', dragArgs, function (dragArgs) {\n if (!dragArgs.cancel && !isNOU(parent.targetModule) && parent.targetModule !== '' && parent.dragCount > 2) {\n dropHandler(parent);\n }\n parent.dragCount = 0;\n });\n}\n/**\n * Drag the start handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {'DragEventArgs'} args - specifies the drag event arguements.\n * @param {Draggable} dragObj - specifies the drag event arguements.\n * @returns {void}\n * @private\n */\nexport function dragStartHandler(parent, args, dragObj) {\n var dragArgs = args;\n dragArgs.cancel = false;\n dragArgs.fileDetails = parent.dragData;\n parent.dragCount = 0;\n parent.droppedObjects = [];\n if (!parent.allowDragAndDrop || ((parent.activeModule === 'navigationpane') &&\n (closest(args.element, 'li').getAttribute('data-uid') === parent.pathId[0]))) {\n dragArgs.cancel = true;\n }\n if ((parent.activeModule === 'navigationpane') &&\n (parent.pathId.indexOf(closest(args.element, 'li').getAttribute('data-uid')) !== -1)) {\n parent.isPathDrag = true;\n }\n else {\n parent.isPathDrag = false;\n }\n removeBlur(parent);\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else if (!dragArgs.cancel) {\n var i = 0;\n while (i < parent.activeElements.length) {\n addBlur(parent.activeElements[i]);\n i++;\n }\n parent.trigger('fileDragStart', dragArgs, function (dragArgs) {\n if (dragArgs.cancel) {\n dragObj.intDestroy(args.event);\n dragCancel(parent);\n }\n else {\n parent.uploadObj.dropArea = null;\n }\n });\n }\n}\n/**\n * Drag the cancel handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function dragCancel(parent) {\n removeBlur(parent);\n var virtualEle = select('.' + CLS.CLONE, parent.element);\n if (virtualEle) {\n detach(virtualEle);\n }\n}\n/**\n * Remove drop target handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function removeDropTarget(parent) {\n removeItemClass(parent, CLS.DROP_FOLDER);\n removeItemClass(parent, CLS.DROP_FILE);\n}\n/**\n * Remove item class handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {string} value - specifies the value.\n * @returns {void}\n * @private\n */\nexport function removeItemClass(parent, value) {\n var ele = parent.element.querySelectorAll('.' + value);\n for (var i = 0; i < ele.length; i++) {\n ele[i].classList.remove(value);\n }\n}\n/**\n * Dragging handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {DragEventArgs} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nexport function draggingHandler(parent, args) {\n var dragArgs = args;\n dragArgs.fileDetails = parent.dragData;\n var canDrop = false;\n getTargetModule(parent, args.target);\n removeDropTarget(parent);\n if (parent.treeExpandTimer != null) {\n window.clearTimeout(parent.treeExpandTimer);\n parent.treeExpandTimer = null;\n }\n removeBlur(parent, 'hover');\n var node = null;\n if (parent.targetModule === 'navigationpane') {\n node = closest(args.target, 'li');\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n canDrop = true;\n /* istanbul ignore next */\n parent.treeExpandTimer = window.setTimeout(function () { parent.notify(events.dragging, args); }, 800);\n }\n else if (parent.targetModule === 'detailsview') {\n node = closest(args.target, 'tr');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FOLDER);\n }\n else if (node && !node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.DROP_FILE);\n }\n canDrop = true;\n }\n else if (parent.targetModule === 'largeiconsview') {\n node = closest(args.target, 'li');\n if (node && node.querySelector('.' + CLS.FOLDER) && !node.classList.contains(CLS.BLUR)) {\n node.classList.add(CLS.HOVER, CLS.DROP_FOLDER);\n }\n canDrop = true;\n /* istanbul ignore next */\n }\n else if (parent.targetModule === 'breadcrumbbar') {\n canDrop = true;\n }\n parent.element.classList.remove('e-fe-drop', 'e-no-drop');\n parent.element.classList.add(canDrop ? 'e-fe-drop' : 'e-no-drop');\n parent.dragCount = parent.dragCount + 1;\n parent.trigger('fileDragging', dragArgs);\n}\n/**\n * Object to string handler\n *\n * @param {Object} data - specifies the data.\n * @returns {string} returns string converted from Object.\n * @private\n */\n// Ignored the message key value in permission object\n// eslint-disable-next-line\nexport function objectToString(data) {\n var str = '';\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'message') {\n str += (i === 0 ? '' : ', ') + keys[i] + ': ' + getValue(keys[i], data);\n }\n }\n return str;\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {string} returns the item name.\n * @private\n */\n// eslint-disable-next-line\nexport function getItemName(parent, data) {\n if (parent.hasId) {\n return getValue('id', data);\n }\n return getName(parent, data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function updateRenamingData(parent, data) {\n parent.itemData = [data];\n parent.currentItemText = getValue('name', data);\n parent.isFile = getValue('isFile', data);\n parent.filterPath = getValue('filterPath', data);\n}\n/**\n * Get item name handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doRename(parent) {\n if (!hasEditAccess(parent.itemData[0])) {\n createDeniedDialog(parent, parent.itemData[0], events.permissionEdit);\n }\n else {\n createDialog(parent, 'Rename');\n }\n}\n/* istanbul ignore next */\n/**\n * Download handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function doDownload(parent) {\n // eslint-disable-next-line\n var items = parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(parent, items[i], events.permissionDownload);\n return;\n }\n }\n if (parent.selectedItems.length > 0) {\n Download(parent, parent.path, parent.selectedItems);\n }\n}\n/**\n * Delete Files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function doDeleteFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionEdit);\n return;\n }\n }\n parent.itemData = data;\n Delete(parent, newIds, parent.path, 'delete');\n}\n/* istanbul ignore next */\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object[]} data - specifies the data.\n * @param {string[]} newIds - specifies the new Ids.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function doDownloadFiles(parent, data, newIds) {\n for (var i = 0; i < data.length; i++) {\n if (!hasDownloadAccess(data[i])) {\n createDeniedDialog(parent, data[i], events.permissionDownload);\n return;\n }\n }\n parent.itemData = data;\n if (newIds.length > 0) {\n Download(parent, parent.path, newIds);\n }\n}\n/**\n * Download files handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @param {Object} data - specifies the data.\n * @param {string} action - specifies the actions.\n * @returns {void}\n * @private\n */\n// eslint-disable-next-line\nexport function createDeniedDialog(parent, data, action) {\n var message = getValue('message', getValue('permission', data));\n if (message === '') {\n message = getLocaleText(parent, 'Access-Message').replace('{0}', getValue('name', data)).replace('{1}', action);\n }\n var response = {\n error: {\n code: '401',\n fileExists: null,\n message: message\n }\n };\n createDialog(parent, 'Error', response);\n}\n/**\n * Get Access Classes\n *\n * @param {Object} data - specifies the data.\n * @returns {string} - returns accesses classes.\n * @private\n */\n// eslint-disable-next-line\nexport function getAccessClass(data) {\n return !hasReadAccess(data) ? 'e-fe-locked e-fe-hidden' : 'e-fe-locked';\n}\n/**\n * Check read access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns read access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasReadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return (permission && !getValue('read', permission)) ? false : true;\n}\n/**\n * Check edit access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns edit access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasEditAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('write', permission))) : true;\n}\n/**\n * Check content access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns content access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasContentAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('writeContents', permission))) : true;\n}\n/**\n * Check upload access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns upload access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasUploadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('upload', permission))) : true;\n}\n/**\n * Check download access handler\n *\n * @param {Object} data - specifies the data.\n * @returns {boolean} - returns download access.\n * @private\n */\n// eslint-disable-next-line\nexport function hasDownloadAccess(data) {\n // eslint-disable-next-line\n var permission = getValue('permission', data);\n return permission ? ((getValue('read', permission) && getValue('download', permission))) : true;\n}\n/**\n * Create new folder handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function createNewFolder(parent) {\n // eslint-disable-next-line\n var details = parent.itemData[0];\n if (!hasContentAccess(details)) {\n createDeniedDialog(parent, details, events.permissionEditContents);\n }\n else {\n createDialog(parent, 'NewFolder');\n }\n}\n/**\n * Upload item handler\n *\n * @param {IFileManager} parent - specifies the parent.\n * @returns {void}\n * @private\n */\nexport function uploadItem(parent) {\n // eslint-disable-next-line\n var details = parent.itemData[0];\n if (!hasUploadAccess(details)) {\n createDeniedDialog(parent, details, events.permissionUpload);\n }\n else {\n var eleId = '#' + parent.element.id + CLS.UPLOAD_ID;\n var uploadEle = document.querySelector(eleId);\n uploadEle.click();\n }\n}\n","import { Ajax, createElement, select, extend, Internationalization } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, setValue, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { fileType, setNodeId, getLocaleText, setDateObject, doPasteUpdate, getPathObject } from '../common/utility';\nimport { generatePath } from '../common/utility';\n/**\n * Function to read the content from given path in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nexport function read(parent, event, path) {\n // eslint-disable-next-line\n var itemData = parent.itemData;\n for (var i = 0; i < itemData.length; i++) {\n if (isNOU(getValue('hasChild', itemData[i]))) {\n setValue('hasChild', false, itemData[i]);\n }\n }\n // eslint-disable-next-line\n var data = { action: 'read', path: path, showHiddenItems: parent.showHiddenItems, data: itemData };\n createAjax(parent, data, readSuccess, event);\n}\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nexport function createFolder(parent, itemName) {\n // eslint-disable-next-line\n var data = { action: 'create', path: parent.path, name: itemName, data: parent.itemData };\n createAjax(parent, data, createSuccess, itemName);\n}\n/**\n * Function to filter the files in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nexport function filter(parent, event) {\n // eslint-disable-next-line\n var data = { action: 'filter', path: parent.path, showHiddenItems: parent.showHiddenItems, data: [getPathObject(parent)] };\n // eslint-disable-next-line\n var filterData;\n // eslint-disable-next-line\n var filterDataVal = parent.filterData ? extend(filterData, data, parent.filterData) : data;\n createAjax(parent, filterDataVal, filterSuccess, event, getValue('action', filterDataVal));\n}\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string} itemNewName - specifies the item's new name.\n * @returns {void}\n * @private\n */\nexport function rename(parent, path, itemNewName) {\n var name;\n var newName;\n if (parent.breadcrumbbarModule.searchObj.element.value === '' && !parent.isFiltered) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n var fPath = parent.filterPath;\n if (parent.hasId) {\n name = parent.currentItemText;\n newName = itemNewName;\n }\n else {\n fPath = fPath.replace(/\\\\/g, '/');\n name = fPath.replace(path, '') + parent.currentItemText;\n newName = fPath.replace(path, '') + itemNewName;\n }\n }\n // eslint-disable-next-line\n var data = {\n action: 'rename', path: path, name: name, newName: newName, data: parent.itemData\n };\n createAjax(parent, data, renameSuccess, path);\n}\n/**\n * Function to paste file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} names - specifies the names.\n * @param {string} targetPath - specifies the target path.\n * @param {string} pasteOperation - specifies the paste operation.\n * @param {string[]} renameItems - specifies the rename items.\n * @param {Object[]} actionRecords - specifies the action records.\n * @returns {void}\n * @private\n */\nexport function paste(parent, path, names, targetPath, pasteOperation, \n// eslint-disable-next-line\nrenameItems, actionRecords) {\n // eslint-disable-next-line\n var data = {\n action: pasteOperation, path: path, targetData: parent.itemData[0],\n targetPath: targetPath, names: names, renameFiles: renameItems, data: actionRecords\n };\n parent.destinationPath = targetPath;\n createAjax(parent, data, pasteSuccess, path, pasteOperation, targetPath);\n}\n/**\n * Function to delete file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} items - specifies the items.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nexport function Delete(parent, items, path, operation) {\n // eslint-disable-next-line\n var data = { action: operation, path: path, names: items, data: parent.itemData };\n createAjax(parent, data, deleteSuccess, path);\n}\n/* istanbul ignore next */\n/**\n * Function to get details of file's and folder's in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string[]} names - specifies the names.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation data.\n * @returns {void}\n * @private\n */\nexport function GetDetails(parent, names, path, operation) {\n // eslint-disable-next-line\n var data = { action: operation, path: path, names: names, data: parent.itemData };\n createAjax(parent, data, detailsSuccess, path, operation);\n}\n/**\n * Function for createAjax in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Object} data - specifies the data.\n * @param {Function} fn - specifies the fn.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the target path.\n * @returns {void}\n * @private\n */\nfunction getDateFormat(parent) {\n var columns = parent.detailsViewSettings.columns;\n var dateFormat;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === '_fm_modified') {\n if (!isNOU(columns[i].format)) {\n dateFormat = columns[i].format.toString();\n }\n break;\n }\n }\n return dateFormat;\n}\nfunction createAjax(\n// eslint-disable-next-line\nparent, data, fn, event, operation, targetPath) {\n // eslint-disable-next-line\n var ajaxSettings = {\n url: parent.ajaxSettings.url,\n type: 'POST',\n mode: true,\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n var eventArgs = { action: getValue('action', data), ajaxSettings: ajaxSettings, cancel: false };\n parent.trigger('beforeSend', eventArgs, function (beforeSendArgs) {\n if (!beforeSendArgs.cancel) {\n parent.notify(events.beforeRequest, {});\n var ajax = new Ajax({\n url: getValue('url', beforeSendArgs.ajaxSettings),\n type: getValue('type', beforeSendArgs.ajaxSettings),\n mode: getValue('mode', beforeSendArgs.ajaxSettings),\n dataType: getValue('dataType', beforeSendArgs.ajaxSettings),\n contentType: getValue('contentType', beforeSendArgs.ajaxSettings),\n data: getValue('data', beforeSendArgs.ajaxSettings),\n beforeSend: getValue('beforeSend', beforeSendArgs.ajaxSettings),\n onSuccess: function (result) {\n if (isNOU(result)) {\n var result_1 = {\n error: {\n fileExists: null,\n message: getLocaleText(parent, 'Server-Error') + ' ' + parent.ajaxSettings.url,\n code: '406'\n },\n files: null\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result_1, event, operation, targetPath);\n return;\n }\n if (typeof (result) === 'string') {\n result = JSON.parse(result);\n }\n parent.notify(events.afterRequest, { action: 'success' });\n var id = parent.expandedId ? parent.expandedId : parent.pathId[parent.pathId.length - 1];\n if (!isNOU(result.cwd) && (getValue('action', data) === 'read')) {\n result.cwd.name = (parent.pathId.length === 1) ? (parent.rootAliasName || result.cwd.name) : result.cwd.name;\n setValue('_fm_id', id, result.cwd);\n setValue(id, result.cwd, parent.feParent);\n if (!isNOU(result.files) || result.error.code === '401') {\n if ((event === 'finalize-end' || event === 'initial-end') && parent.pathNames.length === 0) {\n // eslint-disable-next-line\n var root = getValue(parent.pathId[0], parent.feParent);\n parent.pathNames[0] = getValue('name', root);\n parent.hasId = !isNOU(getValue('id', root));\n }\n if (event === 'finalize-end') {\n generatePath(parent);\n }\n }\n }\n var intl = new Internationalization(parent.locale);\n if (!isNOU(result.files)) {\n setDateObject(result.files, intl, getDateFormat(parent));\n for (var i = 0, len = result.files.length; i < len; i++) {\n // eslint-disable-next-line\n var item = result.files[i];\n setValue('_fm_iconClass', fileType(item), item);\n }\n if (getValue('action', data) === 'read') {\n setNodeId(result, id);\n setValue(id, result.files, parent.feFiles);\n }\n }\n if (!isNOU(result.details) && !isNOU(parent.rootAliasName)) {\n var rootName = parent.rootAliasName || getValue('name', result.details);\n var location_1 = getValue('location', result.details).replace(new RegExp('/', 'g'), '\\\\');\n if ((getValue('path', data) === '/') || (parent.hasId && getValue('path', data).match(/[/]/g).length === 1)) {\n if (getValue('names', data).length === 0) {\n setValue('name', rootName, result.details);\n location_1 = rootName;\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n }\n else {\n location_1 = location_1.replace(location_1.substring(0, location_1.indexOf('\\\\')), rootName);\n }\n setValue('location', location_1, result.details);\n }\n fn(parent, result, event, operation, targetPath);\n if (!isNOU(result.files) && (event === 'path-changed' || event === 'finalize-end' || event === 'open-end')) {\n parent.notify(events.searchTextChange, result);\n }\n if (typeof getValue('onSuccess', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', beforeSendArgs.ajaxSettings)();\n }\n },\n onFailure: function () {\n var result = {\n files: null,\n error: {\n code: '404',\n message: getLocaleText(parent, 'Network-Error') + ' ' + parent.ajaxSettings.url,\n fileExists: null\n }\n };\n triggerAjaxFailure(parent, beforeSendArgs, fn, result, event, operation, targetPath);\n }\n });\n ajax.send();\n }\n });\n}\n/**\n * Function for trigger Ajax failure in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {BeforeSendEventArgs} beforeSendArgs - specifies the beforeSendArgs.\n * @param {Function} fn - specifies the function.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} operation - specifies the operation.\n * @param {string} targetPath - specifies the targetPath.\n * @returns {void}\n * @private\n */\nfunction triggerAjaxFailure(\n// eslint-disable-next-line\nparent, beforeSendArgs, fn, result, event, operation, targetPath) {\n parent.notify(events.afterRequest, { action: 'failure' });\n fn(parent, result, event, operation, targetPath);\n if (typeof getValue('onFailure', beforeSendArgs.ajaxSettings) === 'function') {\n getValue('onFailure', beforeSendArgs.ajaxSettings)();\n }\n}\n/**\n * Function for read success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction readSuccess(parent, result, event) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n var args = { action: 'read', result: result };\n parent.trigger('success', args);\n }\n else {\n if (result.error.code === '401') {\n result.files = [];\n parent.notify(event, result);\n parent.notify(events.selectionChanged, {});\n }\n onFailure(parent, result, 'read');\n parent.setProperties({ path: parent.oldPath }, true);\n parent.pathNames.pop();\n }\n if (parent.isDragDrop && parent.isDropEnd) {\n if (parent.droppedObjects.length !== 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n }\n parent.isDropEnd = parent.isDragDrop = false;\n }\n}\n/**\n * Function for filter success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction filterSuccess(parent, result, event, action) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: action, result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, action);\n }\n}\n/* istanbul ignore next */\n/**\n * Function for create success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} itemName - specifies the item name.\n * @returns {void}\n * @private\n */\nfunction createSuccess(parent, result, itemName) {\n if (!isNOU(result.files)) {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n parent.createdItem = result.files[0];\n parent.breadcrumbbarModule.searchObj.value = '';\n var args = { action: 'create', result: result };\n parent.trigger('success', args);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.createEnd, parent.path);\n }\n else {\n if (result.error.code === '400') {\n if (parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#newname', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n else {\n var result_2 = {\n files: null,\n error: {\n code: '400',\n message: getLocaleText(parent, 'Validation-NewFolder-Exists').replace('{0}', '\"' + itemName + '\"'),\n fileExists: null\n }\n };\n createDialog(parent, 'Error', result_2);\n }\n var args = { action: 'create', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (parent.dialogObj && parent.dialogObj.visible) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'create');\n }\n }\n}\n/* istanbul ignore next */\n/**\n * Function to rename the folder/file in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path\n * @returns {void}\n * @private\n */\nfunction renameSuccess(parent, result, path) {\n if (!isNOU(result.files)) {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n var args = { action: 'rename', result: result };\n parent.trigger('success', args);\n parent.renamedItem = Array.isArray(result.files) ? result.files[0] : result.files;\n if (getValue('filterPath', parent.renamedItem) === getValue('filterPath', parent.itemData[0]) && parent.pathNames.length > 1) {\n parent.pathNames[parent.pathNames.length - 1] = parent.renameText;\n }\n if (parent.activeModule === 'navigationpane') {\n parent.pathId.pop();\n parent.itemData = [getValue(parent.pathId[parent.pathId.length - 1], parent.feParent)];\n read(parent, events.renameEndParent, getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/'));\n parent.itemData[0] = parent.renamedItem;\n read(parent, events.pathChanged, parent.path === '/' ? parent.path : getValue('filterPath', parent.renamedItem).replace(/\\\\/g, '/') + parent.renamedItem.name + '/');\n }\n else {\n parent.itemData = [getPathObject(parent)];\n if (parent.breadcrumbbarModule.searchObj.value !== '') {\n Search(parent, events.renameEnd, parent.path, parent.searchWord, parent.showHiddenItems, !parent.searchSettings.ignoreCase);\n }\n else {\n if (parent.isFiltered) {\n filter(parent, events.renameEnd);\n }\n else {\n read(parent, events.renameEnd, parent.path);\n }\n }\n }\n }\n else {\n if (result.error.code === '400' && parent.dialogObj && parent.dialogObj.visible) {\n var ele = select('#rename', parent.dialogObj.element);\n var error = getLocaleText(parent, 'Validation-Rename-Exists').replace('{0}', '\"' + parent.currentItemText + '\"');\n error = error.replace('{1}', '\"' + ele.value + '\"');\n ele.parentElement.nextElementSibling.innerHTML = error;\n var args = { action: 'rename', error: result.error };\n parent.trigger('failure', args);\n }\n else {\n if (!isNOU(parent.dialogObj)) {\n parent.dialogObj.hide();\n }\n onFailure(parent, result, 'rename');\n }\n }\n}\n/* istanbul ignore next */\n/**\n * Function to create new folder in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction pasteSuccess(parent, result, path, operation) {\n if (result.error && result.error.fileExists) {\n parent.fileLength = 0;\n if (!isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n }\n createExtDialog(parent, 'DuplicateItems', result.error.fileExists);\n if (result.error.code === '404') {\n createDialog(parent, 'Error', result);\n }\n }\n else if (!result.error && !isNOU(result.files)) {\n parent.isPasteError = false;\n doPasteUpdate(parent, operation, result);\n }\n else if (result.error && !isNOU(result.files)) {\n parent.isPasteError = true;\n doPasteUpdate(parent, operation, result);\n createDialog(parent, 'Error', result);\n }\n else {\n onFailure(parent, result, operation);\n }\n}\n/**\n * Function to delete success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @returns {void}\n * @private\n */\nfunction deleteSuccess(parent, result, path) {\n if (!isNOU(result.files)) {\n parent.setProperties({ path: path }, true);\n parent.itemData = [getPathObject(parent)];\n read(parent, events.deleteEnd, parent.path);\n if (result.error) {\n onFailure(parent, result, 'delete');\n }\n else {\n var args = { action: 'delete', result: result };\n parent.trigger('success', args);\n }\n }\n else {\n onFailure(parent, result, 'delete');\n }\n}\n/**\n * Function for details success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} path - specifies the path.\n * @param {string} operation - specifies the operation.\n * @returns {void}\n * @private\n */\nfunction detailsSuccess(\n// eslint:disable-next-line\nparent, result, path, operation) {\n if (!isNOU(result.details)) {\n createDialog(parent, operation, null, result.details);\n var args = { action: 'details', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'details');\n }\n}\n/**\n * Function for on failure event in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} action - specifies the action.\n * @returns {void}\n * @private\n */\nfunction onFailure(parent, result, action) {\n createDialog(parent, 'Error', result);\n var args = { action: action, error: result.error };\n parent.trigger('failure', args);\n}\n/**\n * Function for search in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} event - specifies the event.\n * @param {string} path - specifies the path.\n * @param {string} searchString - specifies the search string.\n * @param {boolean} showHiddenItems - specifies the hidden items.\n * @param {boolean} caseSensitive - specifies the casing of search text.\n * @returns {void}\n * @private\n */\nexport function Search(\n// eslint:disable-next-line\nparent, event, path, searchString, showHiddenItems, caseSensitive) {\n // eslint-disable-next-line\n var data = {\n action: 'search', path: path, searchString: searchString, showHiddenItems: showHiddenItems, caseSensitive: caseSensitive,\n data: parent.itemData\n };\n createAjax(parent, data, searchSuccess, event);\n}\n/* istanbul ignore next */\n/**\n * Function for search success in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {ReadArgs} result - specifies the result.\n * @param {string} event - specifies the event.\n * @returns {void}\n * @private\n */\nfunction searchSuccess(parent, result, event) {\n if (!isNOU(result.files)) {\n parent.notify(event, result);\n var args = { action: 'search', result: result };\n parent.trigger('success', args);\n }\n else {\n onFailure(parent, result, 'search');\n }\n}\n/* istanbul ignore next */\n/**\n * Function for download in File Manager.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} path - specifies the path.\n * @param {string[]} items - specifies the items.\n * @returns {void}\n * @private\n */\nexport function Download(parent, path, items) {\n var downloadUrl = parent.ajaxSettings.downloadUrl ? parent.ajaxSettings.downloadUrl : parent.ajaxSettings.url;\n // eslint-disable-next-line\n var data = { 'action': 'download', 'path': path, 'names': items, 'data': parent.itemData };\n var eventArgs = { data: data, cancel: false };\n parent.trigger('beforeDownload', eventArgs, function (downloadArgs) {\n if (!downloadArgs.cancel) {\n var form = createElement('form', {\n id: parent.element.id + '_downloadForm',\n attrs: { action: downloadUrl, method: 'post', name: 'downloadForm', 'download': '' }\n });\n var input = createElement('input', {\n id: parent.element.id + '_hiddenForm',\n attrs: { name: 'downloadInput', value: JSON.stringify(downloadArgs.data), type: 'hidden' }\n });\n form.appendChild(input);\n parent.element.appendChild(form);\n document.forms.namedItem('downloadForm').submit();\n parent.element.removeChild(form);\n }\n });\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { select, isNullOrUndefined as isNOU, createElement, Internationalization } from '@syncfusion/ej2-base';\nimport { getValue, remove, selectAll } from '@syncfusion/ej2-base';\nimport { createFolder } from '../common/operations';\nimport * as CLS from '../base/classes';\nimport * as events from '../base/constant';\nimport { paste, rename } from '../common/operations';\nimport { getLocaleText, getDuplicateData, objectToString, getCssClass } from '../common/utility';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the type of event args.\n * @param {FileDetails} details - specifies the file details.\n * @param {string[]} replaceItems - specifies the replacement.\n * @returns {void}\n * @private\n */\nexport function createDialog(parent, text, e, details, replaceItems) {\n var options = getOptions(parent, text, e, details, replaceItems);\n if (isNOU(parent.dialogObj)) {\n parent.dialogObj = new Dialog({\n beforeOpen: keydownAction.bind(this, parent, options.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n },\n header: options.header,\n content: options.content,\n buttons: options.buttons,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n allowDragging: true,\n isModal: true,\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n width: '350px',\n open: options.open,\n close: options.close,\n enableRtl: parent.enableRtl,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.dialogObj.isStringTemplate = true;\n parent.dialogObj.appendTo('#' + parent.element.id + CLS.DIALOG_ID);\n }\n else {\n changeOptions(parent, options);\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {void}\n * @private\n */\nexport function createExtDialog(parent, text, replaceItems, newPath) {\n var extOptions = getExtOptions(parent, text, replaceItems, newPath);\n parent.isApplySame = false;\n if (isNOU(parent.extDialogObj)) {\n parent.extDialogObj = new Dialog({\n beforeOpen: beforeExtOpen.bind(this, parent, extOptions.dialogName),\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n },\n content: extOptions.content,\n header: extOptions.header,\n closeOnEscape: true,\n allowDragging: true,\n animationSettings: { effect: 'None' },\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n enableRtl: parent.enableRtl,\n showCloseIcon: true,\n isModal: true,\n width: 350,\n buttons: extOptions.buttons,\n open: extOptions.open,\n close: extOptions.close,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n locale: parent.locale\n });\n parent.extDialogObj.isStringTemplate = true;\n parent.extDialogObj.appendTo('#' + parent.element.id + CLS.EXTN_DIALOG_ID);\n }\n else {\n parent.extDialogObj.header = extOptions.header;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.open = extOptions.open;\n parent.extDialogObj.close = extOptions.close;\n parent.extDialogObj.content = extOptions.content;\n parent.extDialogObj.buttons = extOptions.buttons;\n parent.extDialogObj.enableRtl = parent.enableRtl;\n parent.extDialogObj.locale = parent.locale;\n parent.extDialogObj.beforeOpen = beforeExtOpen.bind(this, parent, extOptions.dialogName);\n parent.extDialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.extDialogObj, args, extOptions.dialogName);\n };\n parent.extDialogObj.dataBind();\n parent.extDialogObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {Dialog} dlgModule - Specifies the dialog module.\n * @param {BeforeOpenEventArgs} args - specifies the before open arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeOpen(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupName: dialogName, popupModule: dlgModule\n };\n parent.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {BeforeCloseEventArgs} args - specifies the before close event arguements.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupBeforeClose(parent, dlgModule, args, dialogName) {\n var eventArgs = {\n cancel: args.cancel, popupModule: dlgModule, popupName: dialogName\n };\n parent.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n if (!args.cancel && args.isInteracted && ((dialogName === 'Rename') || (dialogName === 'Create Folder'))) {\n parent.trigger(events.actionFailure, {});\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupOpen(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupOpen', args);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {Dialog} dlgModule - specifies the dialog module.\n * @param {string} dialogName - specifies the dialog name.\n * @returns {void}\n * @private\n */\nfunction triggerPopupClose(parent, dlgModule, dialogName) {\n var args = { popupModule: dlgModule, element: dlgModule.element, popupName: dialogName };\n parent.trigger('popupClose', args);\n}\n/**\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @param {string} newPath - specifies the new path.\n * @returns {DialogOptions} - returns the dialog options.\n * @private\n */\nfunction getExtOptions(parent, text, replaceItems, newPath) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var duplicateContent;\n var item;\n var index;\n options.open = function () { triggerPopupOpen(parent, parent.extDialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.extDialogObj, options.dialogName); };\n switch (text) {\n case 'Extension':\n options.header = getLocaleText(parent, 'Header-Rename-Confirmation');\n options.content = '<div>' + getLocaleText(parent, 'Content-Rename-Confirmation') + '</div>';\n options.buttons = [{\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.extDialogObj.hide();\n rename(parent, newPath, parent.renameText);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.extDialogObj.hide();\n parent.dialogObj.hide();\n }\n }];\n options.dialogName = 'Extension Change';\n break;\n case 'DuplicateItems':\n options.dialogName = 'Duplicate Items';\n parent.replaceItems = replaceItems;\n item = parent.replaceItems[parent.fileLength];\n index = item.lastIndexOf('/');\n item = index === -1 ? item : item.substring(index);\n options.header = getLocaleText(parent, 'Header-Duplicate');\n duplicateContent = '<div>' + getLocaleText(parent, 'Content-Duplicate') + '</div>';\n options.content = (duplicateContent).replace('{0}', item);\n options.close = function () {\n if (!parent.isDropEnd && parent.duplicateItems.length === 0) {\n var args = { fileDetails: parent.droppedObjects };\n parent.trigger('fileDropped', args);\n parent.isDropEnd = parent.isDragDrop = false;\n }\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function () {\n parent.duplicateItems.push(parent.replaceItems[parent.fileLength]);\n parent.duplicateRecords.push(getDuplicateData(parent, parent.replaceItems[parent.fileLength]));\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_1 = parent.replaceItems[parent.fileLength];\n var indexval = item_1.lastIndexOf('/');\n item_1 = indexval === -1 ? item_1 : item_1.substring(indexval);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_1);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.fileLength++;\n if (replaceItems[parent.fileLength]) {\n var item_2 = parent.replaceItems[parent.fileLength];\n var ind = item_2.lastIndexOf('/');\n item_2 = ind === -1 ? item_2 : item_2.substring(ind);\n parent.extDialogObj.content = (duplicateContent).replace('{0}', item_2);\n parent.extDialogObj.show();\n }\n else {\n parent.extDialogObj.hide();\n if (parent.duplicateItems.length !== 0) {\n var action = parent.isDragDrop ? 'move' : parent.fileAction;\n var targetPath = parent.isDragDrop ? parent.dragPath : parent.targetPath;\n var path = parent.isDragDrop ? parent.dropPath : ((parent.folderPath === '') ? parent.path :\n parent.folderPath);\n paste(parent, targetPath, parent.duplicateItems, path, action, parent.duplicateItems, parent.duplicateRecords);\n }\n }\n }\n }\n ];\n break;\n case 'UploadRetry':\n options.dialogName = 'Retry Upload';\n options.header = getLocaleText(parent, 'Header-Retry');\n options.content = parent.retryFiles[0].name + '<div class=\"e-fe-retrycontent\">' +\n (getLocaleText(parent, 'Content-Retry')) + '</div>';\n options.open = onRetryOpen.bind(this, parent);\n options.close = function () {\n parent.isRetryOpened = false;\n retryDlgClose(parent);\n triggerPopupClose(parent, parent.extDialogObj, options.dialogName);\n };\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Keep-Both') },\n click: function () {\n retryDlgUpdate(parent, true);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Replace') },\n click: function () {\n retryDlgUpdate(parent, false);\n }\n },\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Skip') },\n click: function () {\n var count = 0;\n if (parent.isApplySame) {\n count = parent.retryFiles.length;\n parent.retryFiles = [];\n retryDlgClose(parent);\n }\n else {\n count = 1;\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n parent.notify(events.skipUpload, { count: count });\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {boolean} isKeepBoth - checks the arguement to keep both.\n * @returns {void}\n * @private\n */\nfunction retryDlgUpdate(parent, isKeepBoth) {\n if (parent.isApplySame) {\n if (isKeepBoth) {\n onKeepBothAll(parent);\n }\n else {\n onReplaceAll(parent);\n }\n retryDlgClose(parent);\n }\n else {\n parent.retryArgs.push({\n action: isKeepBoth ? 'keepboth' : 'replace',\n file: parent.retryFiles[0]\n });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n if (parent.retryFiles.length !== 0) {\n createExtDialog(parent, 'UploadRetry');\n }\n else {\n retryDlgClose(parent);\n }\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction retryDlgClose(parent) {\n var flag = true;\n if (parent.isRetryOpened) {\n parent.isRetryOpened = false;\n }\n else {\n flag = false;\n }\n var ele = select('.e-dlg-checkbox', parent.extDialogObj.element);\n if (ele) {\n remove(ele);\n }\n if (flag) {\n parent.extDialogObj.hide();\n }\n else {\n parent.retryFiles = [];\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {object} args - specifies the arguements.\n * @returns {void}\n * @private\n */\nfunction onRetryOpen(parent, args) {\n parent.isRetryOpened = true;\n var dialogEle = getValue('element', args);\n var container = select('.e-dlg-content', dialogEle);\n var checkContainer = parent.createElement('div', {\n className: 'e-dlg-checkbox'\n });\n var checkbox = parent.createElement('input', {\n id: parent.element.id + '_applyall'\n });\n checkContainer.appendChild(checkbox);\n container.appendChild(checkContainer);\n var checkBoxObj = new CheckBox({\n label: getLocaleText(parent, 'ApplyAll-Label'),\n change: function (args) {\n parent.isApplySame = args.checked;\n }\n });\n checkBoxObj.appendTo('#' + parent.element.id + '_applyall');\n triggerPopupOpen(parent, parent.extDialogObj, 'Retry Upload');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onKeepBothAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'keepboth', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReplaceAll(parent) {\n while (parent.retryFiles.length !== 0) {\n parent.retryArgs.push({ action: 'replace', file: parent.retryFiles[0] });\n parent.uploadObj.retry(parent.retryFiles[0]);\n parent.retryFiles.splice(0, 1);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction focusInput(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n ele.focus();\n ele.value = '';\n var len = ele.value.length;\n ele.setSelectionRange(0, len);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onFolderDialogOpen(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n if (!ele.parentElement.classList.contains('e-control-wrapper')) {\n createInput(ele, getLocaleText(parent, 'Content-NewFolder'));\n }\n ele.parentElement.nextElementSibling.innerHTML = '';\n ele.oninput = function () {\n onValidate(parent, ele);\n };\n ele.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onSubmit(parent);\n }\n };\n focusInput(parent);\n triggerPopupOpen(parent, parent.dialogObj, 'Create Folder');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onRenameDialogOpen(parent) {\n var inputEle = select('#rename', parent.dialogObj.element);\n if (!inputEle.parentElement.classList.contains('e-control-wrapper')) {\n createInput(inputEle, getLocaleText(parent, 'Content-Rename'));\n }\n inputEle.parentElement.nextElementSibling.innerHTML = '';\n inputEle.oninput = function () {\n onValidate(parent, inputEle);\n };\n inputEle.onkeyup = function (e) {\n var code = getKeyCode(e);\n if (code === 13) {\n onReSubmit(parent);\n }\n };\n onFocusRenameInput(parent, inputEle);\n triggerPopupOpen(parent, parent.dialogObj, 'Rename');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} inputEle - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onFocusRenameInput(parent, inputEle) {\n inputEle.focus();\n var txt = '';\n if (parent.isFile && !parent.showFileExtension) {\n var index = parent.currentItemText.lastIndexOf('.');\n txt = (index === -1) ? parent.currentItemText : parent.currentItemText.substring(0, index);\n }\n else {\n txt = parent.currentItemText;\n }\n inputEle.value = txt;\n if (parent.isFile && parent.showFileExtension && (inputEle.value.indexOf('.') !== -1)) {\n inputEle.setSelectionRange(0, inputEle.value.lastIndexOf('.'));\n }\n else {\n inputEle.setSelectionRange(0, inputEle.value.length);\n }\n}\n/**\n *\n * @param {HTMLInputElement} ele - specifies the element.\n * @param {string} placeholder - specifies the place holder.\n * @returns {void}\n * @private\n */\nfunction createInput(ele, placeholder) {\n Input.createInput({\n element: ele,\n properties: {\n placeholder: placeholder\n }\n });\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} text - specifies the text string.\n * @param {ReadArgs | SelectedEventArgs} e - specifies the event arguements.\n * @param {FileDetails} details - specifies the file details.\n * @param {string[]} replaceItems - specifies the replacement items.\n * @returns {DialogOptions} - specifies the dialog options.\n * @private\n */\nfunction getOptions(parent, text, e, details, replaceItems) {\n var options = {\n header: '', content: '', buttons: [], dialogName: ''\n };\n var permission;\n var formattedString;\n var intl;\n var strArr;\n var fileType;\n var location;\n options.open = function () { triggerPopupOpen(parent, parent.dialogObj, options.dialogName); };\n options.close = function () { triggerPopupClose(parent, parent.dialogObj, options.dialogName); };\n text = (details && details.multipleFiles === true) ? 'MultipleFileDetails' : text;\n switch (text) {\n case 'NewFolder':\n options.dialogName = 'Create Folder';\n options.header = getLocaleText(parent, 'Header-NewFolder');\n options.content = '<input type=\"text\" value=\"New folder\" id=\"newname\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Create') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onSubmit(parent);\n }\n }\n ];\n options.open = onFolderDialogOpen.bind(this, parent);\n break;\n case 'Delete':\n options.dialogName = 'Delete';\n if (parent.selectedItems.length > 1) {\n options.content = ('<div>' + getLocaleText(parent, 'Content-Multiple-Delete') + '</div>')\n .replace('{0}', parent.selectedItems.length.toString());\n options.header = getLocaleText(parent, 'Header-Multiple-Delete');\n }\n else {\n options.content = '<div>' + getLocaleText(parent, parent.isFile ? 'Content-Delete' : 'Content-Folder-Delete') + '</div>';\n options.header = getLocaleText(parent, parent.isFile ? 'Header-Delete' : 'Header-Folder-Delete');\n }\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Yes') },\n click: function (e) {\n onDeleteSubmit(parent);\n }\n },\n {\n buttonModel: { content: getLocaleText(parent, 'Button-No') },\n click: function () {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Rename':\n options.dialogName = 'Rename';\n options.header = getLocaleText(parent, 'Header-Rename');\n options.content = '<input type=\"text\" class=\"e-input\" id=\"rename\"><div class=\"e-fe-error\"></div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Save') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n onReSubmit(parent);\n }\n }\n ];\n options.open = onRenameDialogOpen.bind(this, parent);\n break;\n case 'details':\n options.dialogName = 'File Details';\n intl = new Internationalization(parent.locale);\n formattedString = intl.formatDate(new Date(details.modified), { format: 'MMMM dd, yyyy HH:mm:ss' });\n permission = '';\n if (!isNOU(details.permission)) {\n permission = '<tr><td>' + getLocaleText(parent, 'Permission') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + objectToString(details.permission) + '</td></tr>';\n }\n options.header = details.name;\n options.content = '<table>' +\n '<tr><td>' + getLocaleText(parent, 'Type') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n (details.isFile ? 'File' : 'Folder') + '\">' + (details.isFile ? 'File' : 'Folder') + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + '</td><td><span class=\"' + CLS.VALUE + '\" title =\"' +\n details.size + '\">' + details.size + '</span></td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Location') + '</td><td class=\"' + CLS.VALUE + '\" title=\"' +\n details.location + '\">' + details.location + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Modified') + '</td><td class=\"' + CLS.VALUE + '\" >'\n + formattedString + '</td></tr>'\n + permission + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'MultipleFileDetails':\n var index_1;\n options.dialogName = 'File Details';\n strArr = parent.itemData.map(function (val) {\n index_1 = val.name.indexOf('.') + 1;\n return (index_1 === 0 && (!val.isFile)) ? 'Folder' : ((index_1 !== 0) ? val.name.substr(index_1).replace(' ', '') : 'undetermined');\n });\n if (strArr[0] == undefined) {\n strArr = details.name.split(',').map(function (val) {\n index_1 = val.indexOf('.') + 1;\n return (index_1 === 0) ? 'Folder' : val.substr(index_1).replace(' ', '');\n });\n }\n fileType = strArr.every(function (val, i, arr) { return val === arr[0]; }) ?\n ((strArr[0] === 'Folder') ? 'Folder' : strArr[0].toLocaleUpperCase() + ' Type') : 'Multiple Types';\n location = details.location;\n options.header = details.name;\n options.content = '<table><tr><td>' + getLocaleText(parent, 'Type')\n + ':</td><td class=\"' + CLS.VALUE + '\">' + fileType + '</td></tr>' +\n '<tr><td>' + getLocaleText(parent, 'Size') + ':</td><td>' +\n details.size + '<span class=\"' + CLS.VALUE + '\" title =\"' + details.size\n + '\"></span></td></tr>' + '<tr><td>' + getLocaleText(parent, 'Location') +\n ':</td><td class=\"' + CLS.VALUE + '\" title=\"' + location + '\">'\n + location + '</td></tr>' + '</table>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n if (e.type === 'keydown') {\n return;\n }\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n case 'Error':\n parent.notify(events.actionFailure, {});\n options.dialogName = 'Error';\n if (e.error.code === '401') {\n options.header = '<span class=\"e-fe-icon e-fe-access-error\"></span><div class=\"e-fe-access-header\">' +\n getLocaleText(parent, 'Access-Denied') + '</div>';\n }\n else {\n options.header = getLocaleText(parent, 'Error');\n }\n options.content = '<div class=\"' + CLS.ERROR_CONTENT + '\">' + e.error.message + '</div>';\n options.buttons = [\n {\n buttonModel: { isPrimary: true, content: getLocaleText(parent, 'Button-Ok') },\n click: function (e) {\n parent.dialogObj.hide();\n }\n }\n ];\n break;\n }\n return options;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dialogName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction keydownAction(parent, dialogName, args) {\n var btnElement = selectAll('.e-btn', parent.dialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.dialogObj, args, dialogName);\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} dlgName - specifies the dialog name.\n * @param {BeforeOpenEventArgs} args - specifies the before open event arguements.\n * @returns {void}\n * @private\n */\nfunction beforeExtOpen(parent, dlgName, args) {\n var btnElement = selectAll('.e-btn', parent.extDialogObj.element);\n preventKeydown(btnElement);\n triggerPopupBeforeOpen(parent, parent.extDialogObj, args, dlgName);\n}\n/**\n *\n * @param {HTMLInputElement[]} btnElement - specifies the button element.\n * @returns {void}\n * @private\n */\nfunction preventKeydown(btnElement) {\n var _loop_1 = function (btnCount) {\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {SelectedEventArgs} data - specifies the data.\n * @returns {HTMLElement} - returns the HTML element.\n * @private\n */\nfunction getFilesName(data) {\n var parent = createElement('div', { id: 'uploadDialog' });\n var ulElement = createElement('ul');\n var filesData = data.isModified ? data.modifiedFilesData : data.filesData;\n for (var fileCount = 0; fileCount < filesData.length; fileCount++) {\n var liElement = createElement('li', { className: 'dialogFiles' });\n liElement.innerHTML = filesData[fileCount].name;\n ulElement.appendChild(liElement);\n }\n parent.appendChild(ulElement);\n var errorTag = createElement('div', { className: 'e-fe-error' });\n parent.appendChild(errorTag);\n return parent;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {DialogOptions} options - specifies the dialog options.\n * @returns {void}\n * @private\n */\nfunction changeOptions(parent, options) {\n parent.dialogObj.header = options.header;\n parent.dialogObj.content = options.content;\n parent.dialogObj.buttons = options.buttons;\n parent.dialogObj.enableRtl = parent.enableRtl;\n parent.dialogObj.open = options.open;\n parent.dialogObj.close = options.close;\n parent.dialogObj.beforeOpen = keydownAction.bind(this, parent, options.dialogName);\n parent.dialogObj.beforeClose = function (args) {\n triggerPopupBeforeClose(parent, parent.dialogObj, args, options.dialogName);\n };\n parent.dialogObj.dataBind();\n parent.dialogObj.show();\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onSubmit(parent) {\n var ele = select('#newname', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n createFolder(parent, ele.value);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onReSubmit(parent) {\n var ele = select('#rename', parent.dialogObj.element);\n onSubmitValidate(parent, ele);\n if (ele.parentElement.nextElementSibling.innerHTML !== '') {\n return;\n }\n var text = ele.value;\n var oIndex = parent.currentItemText.lastIndexOf('.');\n if (parent.isFile && !parent.showFileExtension) {\n var extn = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n text += extn;\n }\n parent.renameText = text;\n if (parent.currentItemText === text) {\n parent.dialogObj.hide();\n return;\n }\n var newPath = (parent.activeModule === 'navigationpane') ? getValue('filterPath', parent.itemData[0]).replace(/\\\\/g, '/') : parent.path;\n parent.renamedId = getValue('id', parent.itemData[0]);\n if (parent.isFile) {\n var oldExtension = (oIndex === -1) ? '' : parent.currentItemText.substr(oIndex);\n var nIndex = text.lastIndexOf('.');\n var newExtension = (nIndex === -1) ? '' : text.substr(nIndex);\n if (parent.showFileExtension && oldExtension !== newExtension) {\n createExtDialog(parent, 'Extension', null, newPath);\n }\n else {\n rename(parent, newPath, text);\n }\n }\n else {\n rename(parent, newPath, text);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction onDeleteSubmit(parent) {\n parent.dialogObj.hide();\n parent.notify(events.deleteInit, {});\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onValidate(parent, ele) {\n if (/[/\\\\|*?\"<>:]/.test(ele.value)) {\n addInvalid(parent, ele);\n }\n else if (ele.value === '') {\n ele.parentElement.nextElementSibling.innerHTML = getLocaleText(parent, 'Validation-Empty');\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = '';\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction onSubmitValidate(parent, ele) {\n onValidate(parent, ele);\n var len = ele.value.length - 1;\n if (ele.value !== '' && ((ele.value.lastIndexOf('.') === len) || (ele.value.lastIndexOf(' ') === len)) &&\n (parent.showFileExtension || (ele.value.lastIndexOf('.') === -1 || ele.value.substring(ele.value.indexOf('.') + 1).length === 0))) {\n addInvalid(parent, ele);\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {HTMLInputElement} ele - specifies the input element.\n * @returns {void}\n * @private\n */\nfunction addInvalid(parent, ele) {\n var error = getLocaleText(parent, 'Validation-Invalid').replace('{0}', '\"' + ele.value + '\"');\n if (parent.enableHtmlSanitizer) {\n ele.parentElement.nextElementSibling.textContent = error;\n }\n else {\n ele.parentElement.nextElementSibling.innerHTML = error;\n }\n}\n/**\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {number} - returns the key code.\n * @private\n */\nfunction getKeyCode(e) {\n var code;\n if (e.keyCode) {\n code = e.keyCode;\n }\n else if (e.which) {\n code = e.which;\n }\n else {\n code = e.charCode;\n }\n return code;\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @param {string} header - specifies the header element.\n * @param {string} imageUrl - specifies the image URL.\n * @returns {void}\n * @private\n */\nexport function createImageDialog(parent, header, imageUrl) {\n var content = createElement('div', { className: 'e-image-wrap' });\n var image = createElement('img', { className: 'e-image', attrs: { src: imageUrl, alt: header } });\n content.appendChild(image);\n if (isNOU(parent.viewerObj)) {\n parent.viewerObj = new Dialog({\n header: header,\n content: content,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: true,\n isModal: true,\n width: '350px',\n height: '350px',\n target: parent.popupTarget ? parent.popupTarget : '#' + parent.element.id,\n cssClass: getCssClass(parent, parent.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: parent.locale,\n enableResize: true,\n allowDragging: true,\n enableHtmlSanitizer: parent.enableHtmlSanitizer,\n position: { X: 'center', Y: 'center' },\n enableRtl: parent.enableRtl,\n open: openImage.bind(this, parent),\n close: function () { triggerPopupClose(parent, parent.viewerObj, 'Image Preview'); },\n beforeOpen: function (args) {\n triggerPopupBeforeOpen(parent, parent.viewerObj, args, 'Image Preview');\n },\n beforeClose: function (args) {\n triggerPopupBeforeClose(parent, parent.viewerObj, args, 'Image Preview');\n },\n resizing: updateImage.bind(this, parent),\n resizeStop: updateImage.bind(this, parent)\n });\n parent.viewerObj.isStringTemplate = true;\n parent.viewerObj.appendTo('#' + parent.element.id + CLS.IMG_DIALOG_ID);\n }\n else {\n parent.viewerObj.refresh();\n parent.viewerObj.header = header;\n parent.viewerObj.content = content;\n parent.viewerObj.enableRtl = parent.enableRtl;\n parent.viewerObj.dataBind();\n parent.viewerObj.show();\n }\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction openImage(parent) {\n setTimeout(function () {\n if (parent.viewerObj) {\n parent.viewerObj.element.focus();\n }\n });\n updateImage(parent);\n triggerPopupOpen(parent, parent.viewerObj, 'Image Preview');\n}\n/**\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @returns {void}\n * @private\n */\nfunction updateImage(parent) {\n var content = select('.e-dlg-content', parent.viewerObj.element);\n var imgWrap = select('.e-image-wrap', parent.viewerObj.element);\n var cssObj = window.getComputedStyle(content, null);\n var paddingWidth = cssObj ? (2 * parseFloat(cssObj.paddingRight)) : 36;\n var paddingHeight = cssObj ? (2 * parseFloat(cssObj.paddingBottom)) : 20;\n imgWrap.style.width = (content.offsetWidth - paddingWidth) + 'px';\n imgWrap.style.height = (content.offsetHeight - paddingHeight) + 'px';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var defaultToolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultToolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\nvar ToolbarItem = /** @class */ (function (_super) {\n __extends(ToolbarItem, _super);\n function ToolbarItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], ToolbarItem.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], ToolbarItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], ToolbarItem.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], ToolbarItem.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], ToolbarItem.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ToolbarItem.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], ToolbarItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], ToolbarItem.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], ToolbarItem.prototype, \"align\", void 0);\n __decorate([\n Property(-1)\n ], ToolbarItem.prototype, \"tabIndex\", void 0);\n __decorate([\n Property()\n ], ToolbarItem.prototype, \"name\", void 0);\n return ToolbarItem;\n}(ChildProperty));\nexport { ToolbarItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120, isPrimaryKey: true,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-text\\\">\" + data.name + \"</span>\";\n }),\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for a class Column\n */\n/* istanbul ignore next */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Column.prototype, \"field\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"headerText\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"minWidth\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Left')\n ], Column.prototype, \"textAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTextAlign\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Column.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], Column.prototype, \"hideAtMedia\", void 0);\n __decorate([\n Property(null)\n ], Column.prototype, \"customFormat\", void 0);\n __decorate([\n Property(false)\n ], Column.prototype, \"isPrimaryKey\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var TOOLBAR_ID = '_toolbar';\n/** @hidden */\nexport var LAYOUT_ID = '_layout';\n/** @hidden */\nexport var NAVIGATION_ID = '_navigation';\n/** @hidden */\nexport var TREE_ID = '_tree';\n/** @hidden */\nexport var GRID_ID = '_grid';\n/** @hidden */\nexport var LARGEICON_ID = '_largeicons';\n/** @hidden */\nexport var DIALOG_ID = '_dialog';\n/** @hidden */\nexport var ALT_DIALOG_ID = '_alt_dialog';\n/** @hidden */\nexport var IMG_DIALOG_ID = '_img_dialog';\n/** @hidden */\nexport var EXTN_DIALOG_ID = '_extn_dialog';\n/** @hidden */\nexport var UPLOAD_DIALOG_ID = '_upload_dialog';\n/** @hidden */\nexport var RETRY_DIALOG_ID = '_retry_dialog';\n/** @hidden */\nexport var CONTEXT_MENU_ID = '_contextmenu';\n/** @hidden */\nexport var SORTBY_ID = '_sortby';\n/** @hidden */\nexport var VIEW_ID = '_view';\n/** @hidden */\nexport var SPLITTER_ID = '_splitter';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var BREADCRUMBBAR_ID = '_breadcrumbbar';\n/** @hidden */\nexport var UPLOAD_ID = '_upload';\n/** @hidden */\nexport var RETRY_ID = '_retry';\n/** @hidden */\nexport var SEARCH_ID = '_search';\n/**\n * Specifies the File Manager internal class names\n */\n/** @hidden */\nexport var ROOT = 'e-filemanager';\n/** @hidden */\nexport var CONTROL = 'e-control';\n/** @hidden */\nexport var CHECK_SELECT = 'e-fe-cb-select';\n/** @hidden */\nexport var ROOT_POPUP = 'e-fe-popup';\n/** @hidden */\nexport var MOBILE = 'e-fe-mobile';\n/** @hidden */\nexport var MOB_POPUP = 'e-fe-popup e-fe-mobile';\n/** @hidden */\nexport var MULTI_SELECT = 'e-fe-m-select';\n/** @hidden */\nexport var FILTER = 'e-fe-m-filter';\n/** @hidden */\nexport var LAYOUT = 'e-layout';\n/** @hidden */\nexport var NAVIGATION = 'e-navigation';\n/** @hidden */\nexport var LAYOUT_CONTENT = 'e-layout-content';\n/** @hidden */\nexport var LARGE_ICONS = 'e-large-icons';\n/** @hidden */\nexport var TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var LIST_ITEM = 'e-list-item';\n/** @hidden */\nexport var LIST_TEXT = 'e-list-text';\n/** @hidden */\nexport var LIST_PARENT = 'e-list-parent';\n/** @hidden */\nexport var TB_OPTION_TICK = 'e-icons e-fe-tick';\n/** @hidden */\nexport var TB_OPTION_DOT = 'e-icons e-fe-dot';\n/** @hidden */\nexport var BLUR = 'e-blur';\n/** @hidden */\nexport var ACTIVE = 'e-active';\n/** @hidden */\nexport var HOVER = 'e-hover';\n/** @hidden */\nexport var FOCUS = 'e-focus';\n/** @hidden */\nexport var FOCUSED = 'e-focused';\n/** @hidden */\nexport var CHECK = 'e-check';\n/** @hidden */\nexport var FRAME = 'e-frame';\n/** @hidden */\nexport var CB_WRAP = 'e-checkbox-wrapper';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var ROWCELL = 'e-rowcell';\n/** @hidden */\nexport var EMPTY = 'e-empty';\n/** @hidden */\nexport var EMPTY_CONTENT = 'e-empty-content';\n/** @hidden */\nexport var EMPTY_INNER_CONTENT = 'e-empty-inner-content';\n/** @hidden */\nexport var CLONE = 'e-fe-clone';\n/** @hidden */\nexport var DROP_FOLDER = 'e-fe-drop-folder';\n/** @hidden */\nexport var DROP_FILE = 'e-fe-drop-file';\n/** @hidden */\nexport var FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var ICON_IMAGE = 'e-fe-image';\n/** @hidden */\nexport var ICON_MUSIC = 'e-fe-music';\n/** @hidden */\nexport var ICON_VIDEO = 'e-fe-video';\n/** @hidden */\nexport var LARGE_ICON = 'e-large-icon';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER = 'e-empty-icon e-fe-folder';\n/** @hidden */\nexport var LARGE_EMPTY_FOLDER_TWO = 'e-empty-icon.e-fe-folder';\n/** @hidden */\nexport var LARGE_ICON_FOLDER = 'e-fe-folder';\n/** @hidden */\nexport var SELECTED_ITEMS = 'e-items';\n/** @hidden */\nexport var TEXT_CONTENT = 'e-text-content';\n/** @hidden */\nexport var GRID_HEADER = 'e-gridheader';\n/** @hidden */\nexport var TEMPLATE_CELL = 'e-templatecell';\n/** @hidden */\nexport var TREE_VIEW = 'e-treeview';\n/** @hidden */\nexport var MENU_ITEM = 'e-menu-item';\n/** @hidden */\nexport var MENU_ICON = 'e-menu-icon';\n/** @hidden */\nexport var SUBMENU_ICON = 'e-caret';\n/** @hidden */\nexport var GRID_VIEW = 'e-content';\n/** @hidden */\nexport var GRID_CONTENT = 'e-gridcontent';\n/** @hidden */\nexport var ICON_VIEW = 'e-list-parent';\n/** @hidden */\nexport var ICON_OPEN = 'e-icons e-fe-open';\n/** @hidden */\nexport var ICON_UPLOAD = 'e-icons e-fe-upload';\n/** @hidden */\nexport var ICON_CUT = 'e-icons e-fe-cut';\n/** @hidden */\nexport var ICON_COPY = 'e-icons e-fe-copy';\n/** @hidden */\nexport var ICON_PASTE = 'e-icons e-fe-paste';\n/** @hidden */\nexport var ICON_DELETE = 'e-icons e-fe-delete';\n/** @hidden */\nexport var ICON_RENAME = 'e-icons e-fe-rename';\n/** @hidden */\nexport var ICON_NEWFOLDER = 'e-icons e-fe-newfolder';\n/** @hidden */\nexport var ICON_DETAILS = 'e-icons e-fe-details';\n/** @hidden */\nexport var ICON_SHORTBY = 'e-icons e-fe-sort';\n/** @hidden */\nexport var ICON_REFRESH = 'e-icons e-fe-refresh';\n/** @hidden */\nexport var ICON_SELECTALL = 'e-icons e-fe-select';\n/** @hidden */\nexport var ICON_DOWNLOAD = 'e-icons e-fe-download';\n/** @hidden */\nexport var ICON_OPTIONS = 'e-icons e-fe-options';\n/** @hidden */\nexport var ICON_GRID = 'e-icons e-fe-grid';\n/** @hidden */\nexport var ICON_LARGE = 'e-icons e-fe-large';\n/** @hidden */\nexport var ICON_BREADCRUMB = 'e-icons e-fe-breadcrumb';\n/** @hidden */\nexport var ICON_CLEAR = 'e-icons e-fe-clear';\n/** @hidden */\nexport var ICON_DROP_IN = 'e-icons e-fe-drop-in';\n/** @hidden */\nexport var ICON_DROP_OUT = 'e-icons e-fe-drop-out';\n/** @hidden */\nexport var ICON_NO_DROP = 'e-icons e-fe-no-drop';\n/** @hidden */\nexport var ICONS = 'e-icons';\n/** @hidden */\nexport var DETAILS_LABEL = 'e-detailslabel';\n/** @hidden */\nexport var ERROR_CONTENT = 'e-fe-errorcontent';\n/** @hidden */\nexport var STATUS = 'e-status';\n/** @hidden */\nexport var BREADCRUMBS = 'e-address';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DISPLAY_NONE = 'e-display-none';\n/** @hidden */\nexport var COLLAPSED = 'e-node-collapsed';\n/** @hidden */\nexport var FULLROW = 'e-fullrow';\n/** @hidden */\nexport var ICON_COLLAPSIBLE = 'e-icon-collapsible';\n/** @hidden */\nexport var SPLIT_BAR = 'e-split-bar';\n/** @hidden */\nexport var HEADER_CHECK = 'e-headercheck';\n/** @hidden */\nexport var OVERLAY = 'e-fe-overlay';\n/** @hidden */\nexport var VALUE = 'e-fe-value';\n","/**\n * Specifies the File Manager internal variables\n */\n/** @hidden */\nexport var isFile = 'isFile';\n/**\n * Specifies the File Manager internal events\n */\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var finalizeEnd = 'finalize-end';\n/** @hidden */\nexport var createEnd = 'create-end';\n/** @hidden */\nexport var filterEnd = 'filter-end';\n/** @hidden */\nexport var beforeDelete = 'before-delete';\n/** @hidden */\nexport var pathDrag = 'path-drag';\n/** @hidden */\nexport var deleteInit = 'delete-init';\n/** @hidden */\nexport var deleteEnd = 'delete-end';\n/** @hidden */\nexport var refreshEnd = 'refresh-end';\n/** @hidden */\nexport var resizeEnd = 'resize-end';\n/** @hidden */\nexport var splitterResize = 'splitter-resize';\n/** @hidden */\nexport var pathChanged = 'path-changed';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var beforeRequest = 'before-request';\n/** @hidden */\nexport var upload = 'upload';\n/** @hidden */\nexport var skipUpload = 'skip-upload';\n/** @hidden */\nexport var afterRequest = 'after-request';\n/** @hidden */\nexport var download = 'download';\n/** @hidden */\nexport var layoutRefresh = 'layout-refresh';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var search = 'search';\n/** @hidden */\nexport var openInit = 'open-init';\n/** @hidden */\nexport var openEnd = 'open-end';\n/** @hidden */\nexport var selectionChanged = 'selection-changed';\n/** @hidden */\nexport var selectAllInit = 'select-all-init';\n/** @hidden */\nexport var clearAllInit = 'clear-all-init';\n/** @hidden */\nexport var clearPathInit = 'clear-path-init';\n/** @hidden */\nexport var layoutChange = 'layout-change';\n/** @hidden */\nexport var sortByChange = 'sort-by-change';\n/** @hidden */\nexport var nodeExpand = 'node-expand';\n/** @hidden */\nexport var detailsInit = 'details-init';\n/** @hidden */\nexport var menuItemData = 'menu-item-data';\n/** @hidden */\nexport var renameInit = 'rename-init';\n/** @hidden */\nexport var renameEndParent = 'rename-end-parent';\n/** @hidden */\nexport var renameEnd = 'rename-end';\n/** @hidden */\nexport var showPaste = 'show-paste';\n/** @hidden */\nexport var hidePaste = 'hide-paste';\n/** @hidden */\nexport var selectedData = 'selected-data';\n/** @hidden */\nexport var cutCopyInit = 'cut-copy-init';\n/** @hidden */\nexport var pasteInit = 'paste-init';\n/** @hidden */\nexport var pasteEnd = 'paste-end';\n/** @hidden */\nexport var cutEnd = 'cut-end';\n/** @hidden */\nexport var hideLayout = 'hide-layout';\n/** @hidden */\nexport var updateTreeSelection = 'update-tree-selection';\n/** @hidden */\nexport var treeSelect = 'select-node';\n/** @hidden */\nexport var sortColumn = 'sort-column';\n/** @hidden */\nexport var pathColumn = 'path-column';\n/** @hidden */\nexport var searchTextChange = 'search-change';\n/** @hidden */\nexport var beforeDownload = 'before-download';\n/** @hidden */\nexport var downloadInit = 'download-init';\n/** @hidden */\nexport var dropInit = 'drop-init';\n/** @hidden */\nexport var dragEnd = 'drag-end';\n/** @hidden */\nexport var dropPath = 'drop-path';\n/** @hidden */\nexport var dragHelper = 'drag-helper';\n/** @hidden */\nexport var dragging = 'dragging';\n/** @hidden */\nexport var updateSelectionData = 'update-selection-data';\n/** @hidden */\nexport var methodCall = 'method-call';\n/** @hidden */\nexport var permissionRead = 'read';\n/** @hidden */\nexport var permissionEdit = 'write';\n/** @hidden */\nexport var permissionEditContents = 'writeContents';\n/** @hidden */\nexport var permissionCopy = 'copy';\n/** @hidden */\nexport var permissionUpload = 'upload';\n/** @hidden */\nexport var permissionDownload = 'download';\n","import { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, select, selectAll, EventHandler, KeyboardEvents, closest, Draggable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, Touch, isVisible } from '@syncfusion/ej2-base';\nimport { getValue, setValue, remove } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { read, GetDetails, Delete } from '../common/operations';\nimport { doRename, getAccessClass, getPathObject, getFullPath, getDirectoryPath, rename, doDownload, getItemName } from '../common/index';\nimport { removeBlur, cutFiles, copyFiles, addBlur, openSearchFolder, removeActive, pasteHandler } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule } from '../common/index';\nimport { updateRenamingData, doDeleteFiles, doDownloadFiles } from '../common/index';\nimport { openAction, fileType, refresh, getImageUrl, getSortedData, createDeniedDialog, updateLayout } from '../common/utility';\nimport { createEmptyElement, hasReadAccess, hasEditAccess } from '../common/utility';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\n/**\n * LargeIconsView module\n */\nvar LargeIconsView = /** @class */ (function () {\n /**\n * Constructor for the LargeIcons module.\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n function LargeIconsView(parent) {\n this.isInteraction = true;\n this.uploadOperation = false;\n this.count = 0;\n this.isRendered = true;\n this.tapCount = 0;\n this.isSelectAllCalled = false;\n this.isPasteOperation = false;\n this.isInteracted = true;\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n addClass([this.element], CLS.LARGE_ICONS);\n this.addEventListener();\n this.keyConfigs = {\n end: 'end',\n home: 'home',\n tab: 'tab',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n ctrlUp: 'ctrl+uparrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftLeft: 'shift+leftarrow',\n shiftRight: 'shift+rightarrow',\n shiftUp: 'shift+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csLeft: 'ctrl+shift+leftarrow',\n csRight: 'ctrl+shift+rightarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n ctrlA: 'ctrl+a',\n enter: 'enter',\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n f2: 'f2',\n shiftdel: 'shift+delete',\n back: 'backspace',\n ctrlD: 'ctrl+d'\n };\n }\n LargeIconsView.prototype.render = function (args) {\n this.parent.visitedItem = null;\n this.startItem = null;\n showSpinner(this.parent.element);\n if (this.parent.view === 'LargeIcons') {\n this.resetMultiSelect();\n this.element.setAttribute('tabindex', '0');\n if (this.listObj) {\n this.unWireEvents();\n this.removeEventListener();\n }\n this.parent.notify(events.hideLayout, {});\n var iconsView = select('#' + this.parent.element.id + CLS.LARGEICON_ID, this.parent.element);\n var ul = select('ul', iconsView);\n if (ul) {\n remove(ul);\n }\n this.listObj = {\n ariaAttributes: {\n itemRole: 'option', listRole: 'listbox', itemText: '',\n groupItemRole: 'group', wrapperRole: ''\n },\n showIcon: true,\n fields: { text: 'name', iconCss: '_fm_icon', imageUrl: '_fm_imageUrl', htmlAttributes: '_fm_htmlAttr' },\n sortOrder: this.parent.sortOrder,\n itemCreated: this.onItemCreated.bind(this),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer\n };\n this.items = [];\n this.items = this.renderList(args);\n this.items = this.allItems = getSortedData(this.parent, this.items);\n iconsView.classList.remove(CLS.DISPLAY_NONE);\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n if (!this.element.style.height) {\n this.adjustHeight();\n }\n this.parent.virtualizationModule.setUIVirtualization();\n }\n // eslint-disable-next-line\n this.listElements = ListBase.createListFromJson(createElement, this.items, this.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.listElements));\n this.element.appendChild(this.listElements);\n this.preventImgDrag();\n this.createDragObj();\n if (this.itemList.length === 0) {\n var emptyList = this.element.querySelector('.' + CLS.LIST_PARENT);\n this.element.removeChild(emptyList);\n createEmptyElement(this.parent, this.element, args);\n }\n else if (this.itemList.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n if (this.isPasteOperation === true) {\n this.selectItems(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n /* istanbul ignore next */\n if (this.uploadOperation === true) {\n this.selectItems(this.parent.uploadItem);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.count++;\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.parent.activeModule = 'largeiconsview';\n }\n for (var i = 0; i < activeEle.length; i++) {\n activeEle[i].setAttribute('aria-selected', 'true');\n }\n this.adjustHeight();\n this.element.style.maxHeight = '100%';\n this.getItemCount();\n this.addEventListener();\n this.wireEvents();\n if (this.parent.enableVirtualization && this.allItems.length > 0) {\n this.parent.virtualizationModule.setUlElementHeight();\n this.parent.virtualizationModule.wireScrollEvent(false);\n }\n this.isRendered = true;\n hideSpinner(this.parent.element);\n if (this.parent.selectedItems.length) {\n this.checkItem();\n }\n }\n };\n LargeIconsView.prototype.preventImgDrag = function () {\n var i = 0;\n while (i < this.itemList.length) {\n if (this.itemList[i].querySelector('img')) {\n /* istanbul ignore next */\n this.itemList[i].ondragstart = function () { return false; };\n }\n i++;\n }\n };\n LargeIconsView.prototype.createDragObj = function () {\n var _this = this;\n if (!this.parent.isMobile && this.listObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.listElements, {\n enableTailMode: true,\n distance: 5,\n enableAutoScroll: true,\n dragTarget: '.' + CLS.LARGE_ICON,\n helper: this.dragHelper.bind(this),\n cursorAt: this.parent.dragCursorPosition,\n dragArea: this.parent.element,\n dragStop: dragStopHandler.bind(this, this.parent),\n drag: draggingHandler.bind(this, this.parent),\n clone: true,\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n }\n });\n }\n else if (this.dragObj && !this.parent.allowDragAndDrop) {\n this.dragObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = closest(dragTarget, '.e-list-item');\n if (!dragLi) {\n return null;\n }\n if (dragLi && !dragLi.classList.contains('e-active')) {\n this.setFocus(dragLi);\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n for (var i = 0; i < activeEle.length; i++) {\n // eslint-disable-next-line\n this.parent.dragData.push(this.getItemObject(activeEle[i]));\n this.parent.activeElements.push(activeEle[i]);\n }\n getModule(this.parent, dragLi);\n this.parent.dragPath = this.parent.path;\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n LargeIconsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, '.e-list-item');\n // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (dropLi) {\n // eslint-disable-next-line\n var info = this.getItemObject(dropLi);\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n else {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n LargeIconsView.prototype.getModuleName = function () {\n return 'largeiconsview';\n };\n LargeIconsView.prototype.adjustHeight = function () {\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n this.element.style.height = (pane.offsetHeight - bar.offsetHeight) + 'px';\n };\n LargeIconsView.prototype.onItemCreated = function (args) {\n args.item.removeAttribute('aria-level');\n if (!this.parent.showFileExtension && getValue('isFile', args.curData)) {\n var textEle = args.item.querySelector('.' + CLS.LIST_TEXT);\n var txt = getValue('name', args.curData);\n var type = getValue('type', args.curData);\n textEle.innerHTML = txt.substr(0, txt.length - type.length);\n }\n this.renderCheckbox(args);\n var eventArgs = {\n element: args.item,\n fileDetails: args.curData,\n module: 'LargeIconsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n LargeIconsView.prototype.renderCheckbox = function (args) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkElement = createCheckBox(createElement, false, {\n checked: false,\n cssClass: 'e-small'\n });\n checkElement.setAttribute('role', 'checkbox');\n checkElement.setAttribute('aria-checked', 'false');\n args.item.firstElementChild.insertBefore(checkElement, args.item.firstElementChild.childNodes[0]);\n };\n LargeIconsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.destroy();\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.render(args);\n /* istanbul ignore next */\n if (getValue('name', args) === 'layout-change' && this.parent.fileAction === 'move' &&\n this.parent.isCut && this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n var indexes = this.getIndexes(this.parent.selectedNodes);\n var length_1 = 0;\n while (length_1 < indexes.length) {\n addBlur(this.itemList[indexes[length_1]]);\n length_1++;\n }\n }\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (activeEle.length !== 0) {\n this.element.focus();\n }\n this.checkItem();\n this.parent.isLayoutChange = false;\n }\n else {\n this.element.setAttribute('tabindex', '-1');\n }\n };\n LargeIconsView.prototype.checkItem = function () {\n var checkEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n if (checkEle) {\n var checkLength = 0;\n while (checkLength < checkEle.length) {\n this.checkState(checkEle[checkLength], true);\n checkLength++;\n }\n }\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.renderList = function (args) {\n var i = 0;\n // eslint-disable-next-line\n var items = JSON.parse(JSON.stringify(args.files));\n while (i < items.length) {\n var icon = fileType(items[i]);\n var name_1 = getValue('name', items[i]);\n var selected = getItemName(this.parent, items[i]);\n var className = ((this.parent.selectedItems &&\n this.parent.selectedItems.indexOf(selected) !== -1)) ?\n CLS.LARGE_ICON + ' e-active' : CLS.LARGE_ICON;\n if (!hasEditAccess(items[i])) {\n className += ' ' + getAccessClass(items[i]);\n }\n if (icon === CLS.ICON_IMAGE && this.parent.showThumbnail && hasReadAccess(items[i])) {\n var imgUrl = getImageUrl(this.parent, items[i]);\n setValue('_fm_imageUrl', imgUrl, items[i]);\n setValue('_fm_imageAttr', { alt: name_1 }, items[i]);\n }\n else {\n setValue('_fm_icon', icon, items[i]);\n }\n setValue('_fm_htmlAttr', { class: className, title: name_1 }, items[i]);\n i++;\n }\n return items;\n };\n LargeIconsView.prototype.onFinalizeEnd = function (args) {\n this.render(args);\n };\n LargeIconsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.clearSelect();\n this.selectItems([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n this.parent.largeiconsviewModule.element.focus();\n };\n LargeIconsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n this.updateSelectedData();\n }\n };\n LargeIconsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'largeiconsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.clearSelect();\n };\n LargeIconsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.onLayoutChange(args);\n };\n LargeIconsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'largeiconsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n LargeIconsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n /* istanbul ignore next */\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '') {\n this.parent.searchedItems = [];\n }\n if (this.parent.view === 'LargeIcons') {\n removeBlur(this.parent);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onLayoutChange(args);\n if (this.parent.renamedItem) {\n this.clearSelect();\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n }\n };\n LargeIconsView.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'largeiconsview') {\n this.doOpenAction(args.target);\n }\n };\n LargeIconsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'LargeIcons' && this.element) {\n this.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n LargeIconsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.startItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n var eveArgs = { ctrlKey: true, shiftKey: true };\n this.doSelection(lastItem, eveArgs);\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'LargeIcons') {\n this.clearSelection();\n this.isInteraction = true;\n this.isInteracted = true;\n }\n };\n LargeIconsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n LargeIconsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onSearch = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n this.parent.searchedItems = args.files;\n this.onLayoutChange(args);\n }\n };\n LargeIconsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.adjustHeight();\n };\n LargeIconsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n this.updateSelectedData();\n };\n LargeIconsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'LargeIcons' && !isNOU(this.listObj) &&\n this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered\n && this.parent.sortBy === 'filterPath') {\n this.parent.sortBy = 'name';\n this.parent.notify(events.sortByChange, {});\n }\n };\n LargeIconsView.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.search, this.onSearch);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.splitterResize, this.splitterResizeHandler);\n this.parent.off(events.resizeEnd, this.resizeHandler);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n this.parent.off(events.filterEnd, this.onPathChanged);\n };\n LargeIconsView.prototype.addEventListener = function () {\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.search, this.onSearch, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.splitterResize, this.splitterResizeHandler, this);\n this.parent.on(events.resizeEnd, this.resizeHandler, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n };\n LargeIconsView.prototype.onActionFailure = function () { this.isInteraction = true; this.isInteracted = true; };\n // eslint-disable-next-line\n LargeIconsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var ele = closest(args.target, 'li');\n this.parent.itemData = [this.getItemObject(ele)];\n }\n };\n LargeIconsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.updateSelectedData();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n LargeIconsView.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath === '') ? [getPathObject(this.parent)] :\n [this.getItemObject(select('.e-active', this.element))];\n }\n };\n LargeIconsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n var activeEle = this.element.querySelectorAll('.' + CLS.ACTIVE);\n this.parent.activeRecords = [];\n this.parent.activeElements = [];\n for (var i = 0; i < activeEle.length; i++) {\n this.parent.activeElements.push(activeEle[i]);\n this.parent.activeRecords.push(this.getItemObject(activeEle[i]));\n }\n }\n };\n LargeIconsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {\n this.onPathChanged(args);\n }\n }\n };\n LargeIconsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'LargeIcons') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n LargeIconsView.prototype.onPropertyChanged = function (e) {\n var currentSelected;\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'selectedItems':\n this.isInteraction = false;\n this.isInteracted = false;\n currentSelected = isNOU(this.parent.selectedItems) ? [] : this.parent.selectedItems.slice(0);\n currentSelected = this.parent.allowMultiSelection ? currentSelected :\n currentSelected.slice(currentSelected.length - 1);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.onClearAllInit();\n if (currentSelected.length) {\n this.selectItems(currentSelected);\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n this.isInteraction = true;\n this.isInteracted = true;\n break;\n case 'showThumbnail':\n refresh(this.parent);\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (this.parent.view !== 'LargeIcons') {\n break;\n }\n refresh(this.parent);\n break;\n case 'view':\n updateLayout(this.parent, 'LargeIcons');\n break;\n }\n }\n };\n LargeIconsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.listObj) {\n this.unWireEvents();\n }\n this.startItem = null;\n this.listElements = null;\n };\n LargeIconsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n };\n LargeIconsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n };\n /* istanbul ignore next */\n LargeIconsView.prototype.onMouseOver = function (e) {\n var targetEle = closest(e.target, '.e-list-item');\n removeBlur(this.parent, 'hover');\n if (targetEle !== null) {\n targetEle.classList.add(CLS.HOVER);\n }\n };\n LargeIconsView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n this.clickObj = new Touch(this.element, {\n tap: function (eve) {\n eve.originalEvent.preventDefault();\n if (proxy_1.parent.isDevice) {\n proxy_1.tapCount = eve.tapCount;\n proxy_1.tapEvent = eve;\n setTimeout(function () {\n if (proxy_1.tapCount > 0) {\n proxy_1.doTapAction(proxy_1.tapEvent);\n }\n proxy_1.tapCount = 0;\n }, 350);\n }\n else {\n if (eve.tapCount === 2 && eve.originalEvent.which !== 3) {\n proxy_1.dblClickHandler(eve);\n }\n else {\n proxy_1.clickHandler(eve);\n }\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n proxy_1.multiSelect = proxy_1.parent.allowMultiSelection ? true : false;\n if (proxy_1.parent.allowMultiSelection) {\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n proxy_1.clickHandler(e);\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n LargeIconsView.prototype.doTapAction = function (eve) {\n var target = eve.originalEvent.target;\n var item = closest(target, '.' + CLS.LIST_ITEM);\n if (this.multiSelect || target.classList.contains(CLS.LIST_PARENT) || isNOU(item)) {\n this.clickHandler(eve);\n }\n else {\n this.parent.isFile = false;\n this.updateType(item);\n if (!this.parent.isFile) {\n this.dblClickHandler(eve);\n }\n else if (eve.tapCount === 2) {\n this.clickHandler(eve);\n this.dblClickHandler(eve);\n }\n else {\n this.clickHandler(eve);\n }\n }\n };\n LargeIconsView.prototype.clickHandler = function (e) {\n var target = e.originalEvent.target;\n removeBlur(this.parent, 'hover');\n this.doSelection(target, e.originalEvent);\n this.parent.activeModule = 'largeiconsview';\n };\n /**\n *\n * @param {Element} target - specifies the target element.\n * @param {TouchEventArgs | MouseEventArgs | KeyboardEventArgs} e - specifies event arguements.\n * @returns {void}\n * @hidden\n */\n LargeIconsView.prototype.doSelection = function (target, e) {\n var item = closest(target, '.' + CLS.LIST_ITEM);\n var cList = target.classList;\n this.parent.isFile = false;\n var action = 'select';\n if (e.which === 3 && !isNOU(item) && item.classList.contains(CLS.ACTIVE)) {\n this.updateType(item);\n return;\n }\n else if (!isNOU(item)) {\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)\n && (e.ctrlKey || target.classList.contains(CLS.CHECK))) {\n action = 'unselect';\n }\n if (e.ctrlKey && e.shiftKey) {\n this.isSelectAllCalled = true;\n }\n var fileSelectionArgs = this.triggerSelection(action, item);\n if (fileSelectionArgs.cancel !== true) {\n if ((!this.parent.allowMultiSelection || (!this.multiSelect && (e && !e.ctrlKey)))\n && !cList.contains(CLS.FRAME)) {\n this.updateType(item);\n this.clearSelect();\n }\n if (this.parent.allowMultiSelection && e.shiftKey) {\n if (!(e && e.ctrlKey)) {\n this.clearSelect();\n }\n if (!this.startItem) {\n this.startItem = item;\n }\n var startIndex = this.itemList.indexOf(this.startItem);\n var endIndex = this.itemList.indexOf(item);\n if (startIndex > endIndex) {\n for (var i = startIndex; i >= endIndex; i--) {\n this.addActive(this.itemList[i]);\n }\n }\n else {\n for (var i = startIndex; i <= endIndex; i++) {\n this.addActive(this.itemList[i]);\n }\n }\n this.addFocus(this.itemList[endIndex]);\n }\n else {\n this.startItem = item;\n if (this.parent.allowMultiSelection && item.classList.contains(CLS.ACTIVE)) {\n this.removeActive(item);\n }\n else {\n this.addActive(item);\n }\n this.addFocus(item);\n }\n if (this.parent.selectedItems.length === 0) {\n this.resetMultiSelect();\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect(action, item);\n }\n }\n else {\n if (this.parent.selectedItems.length === this.itemList.length) {\n this.isSelectAllCalled = true;\n }\n this.clearSelection();\n }\n if (!isNOU(item)) {\n this.isSelectAllCalled = false;\n this.updateType(item);\n }\n };\n LargeIconsView.prototype.dblClickHandler = function (e) {\n this.parent.activeModule = 'largeiconsview';\n var target = e.originalEvent.target;\n this.doOpenAction(target);\n };\n LargeIconsView.prototype.clearSelection = function () {\n this.clearSelect();\n this.resetMultiSelect();\n this.parent.notify(events.selectionChanged, {});\n };\n LargeIconsView.prototype.resetMultiSelect = function () {\n this.multiSelect = false;\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n };\n LargeIconsView.prototype.doOpenAction = function (target) {\n var _this = this;\n if (isNOU(target)) {\n return;\n }\n var item = closest(target, '.' + CLS.LIST_ITEM);\n this.parent.isFile = false;\n if (!isNOU(item)) {\n this.updateType(item);\n // eslint-disable-next-line\n var details_1 = this.getItemObject(item);\n if (!hasReadAccess(details_1)) {\n createDeniedDialog(this.parent, details_1, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: details_1, module: 'LargeIconsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var text = getValue('name', details_1);\n if (!_this.parent.isFile) {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', details_1);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? text : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(text);\n _this.parent.pathId.push(getValue('_fm_id', details_1));\n _this.parent.itemData = [details_1];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, details_1);\n }\n _this.parent.isFiltered = false;\n _this.parent.setProperties({ selectedItems: [] }, true);\n }\n else {\n var icon = fileType(details_1);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, details_1);\n createImageDialog(_this.parent, text, imgUrl);\n }\n }\n }\n });\n }\n };\n LargeIconsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n LargeIconsView.prototype.keydownActionHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'moveDown':\n case 'moveLeft':\n case 'moveRight':\n case 'moveUp':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n LargeIconsView.prototype.keyActionHandler = function (e) {\n var _this = this;\n if (!this.isRendered) {\n return;\n }\n var fItem = this.getFocusedItem();\n var firstItem = this.getFirstItem();\n var lastItem = this.getLastItem();\n switch (e.action) {\n case 'end':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTo(0, this.element.firstElementChild.scrollHeight);\n setTimeout(function () {\n _this.navigateItem(_this.itemList[_this.itemList.length - 1]);\n }, 10);\n }\n else {\n this.navigateItem(lastItem);\n }\n break;\n case 'home':\n if (this.parent.enableVirtualization) {\n this.clearSelect();\n this.element.firstElementChild.scrollTop = 0;\n setTimeout(function () {\n _this.navigateItem(_this.itemList[0]);\n }, 10);\n }\n else {\n this.navigateItem(firstItem);\n }\n break;\n case 'tab':\n if (!isNOU(fItem)) {\n this.addFocus(fItem);\n }\n else if (!isNOU(firstItem)) {\n this.addFocus(firstItem);\n }\n break;\n case 'moveDown':\n this.navigateDown(fItem, true);\n break;\n case 'moveLeft':\n this.navigateRight(fItem, false);\n break;\n case 'moveRight':\n this.navigateRight(fItem, true);\n break;\n case 'moveUp':\n this.navigateDown(fItem, false);\n break;\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n this.csEndKey(lastItem, e);\n break;\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n this.csHomeKey(firstItem, e);\n break;\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n this.csDownKey(fItem, e);\n break;\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n this.csLeftKey(fItem, e);\n break;\n case 'ctrlRight':\n case 'shiftRight':\n case 'csRight':\n this.csRightKey(fItem, e);\n break;\n case 'ctrlUp':\n case 'shiftUp':\n case 'csUp':\n this.csUpKey(fItem, e);\n break;\n case 'space':\n this.spaceKey(fItem);\n break;\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n if (!isNOU(fItem)) {\n this.doSelection(fItem, e);\n }\n break;\n case 'ctrlA':\n this.ctrlAKey(firstItem, lastItem);\n break;\n case 'enter':\n this.doOpenAction(this.parent.visitedItem ? this.parent.visitedItem : this.getVisitedItem());\n break;\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n }\n };\n LargeIconsView.prototype.doDownload = function () {\n this.updateSelectedData();\n doDownload(this.parent);\n };\n LargeIconsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.updateSelectedData();\n // eslint-disable-next-line\n var data = this.parent.itemData;\n for (var i = 0; i < data.length; i++) {\n if (!hasEditAccess(data[i])) {\n createDeniedDialog(this.parent, data[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n LargeIconsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n LargeIconsView.prototype.updateRenameData = function () {\n var item = select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n // eslint-disable-next-line\n var data = this.getItemObject(item);\n updateRenamingData(this.parent, data);\n };\n LargeIconsView.prototype.getVisitedItem = function () {\n var item = this.parent.selectedItems[this.parent.selectedItems.length - 1];\n var indexes = this.getIndexes([item], this.parent.hasId);\n return this.itemList[indexes[0]];\n };\n LargeIconsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.FOCUS, this.element);\n };\n LargeIconsView.prototype.getActiveItem = function () {\n return select('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n };\n LargeIconsView.prototype.getFirstItem = function () {\n return this.itemList[0];\n };\n LargeIconsView.prototype.getLastItem = function () {\n return this.itemList[this.itemList.length - 1];\n };\n LargeIconsView.prototype.navigateItem = function (item) {\n this.setFocus(item);\n };\n LargeIconsView.prototype.navigateDown = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards, this.perRow);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.navigateRight = function (fItem, isTowards) {\n var nItem = this.getNextItem(fItem, isTowards);\n this.setFocus(nItem);\n };\n LargeIconsView.prototype.getNextItem = function (li, isTowards, perRow) {\n if (isNOU(li)) {\n return this.getFocusedItem() || this.getActiveItem() || this.getFirstItem();\n }\n var index = this.itemList.indexOf(li);\n var nextItem;\n do {\n if (isTowards) {\n index = perRow ? index + perRow : index + 1;\n }\n else {\n index = perRow ? index - perRow : index - 1;\n }\n nextItem = this.itemList[index];\n if (this.parent.enableVirtualization && isNOU(nextItem)) {\n var marginValue = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-bottom'), 10);\n var scrollHeight = this.itemList[0].getBoundingClientRect().height + marginValue;\n this.element.firstElementChild.scrollTo(this.element.firstElementChild.scrollTop, this.element.firstElementChild.scrollTop + scrollHeight);\n }\n if (isNOU(nextItem)) {\n return li;\n }\n } while (!isVisible(nextItem));\n return nextItem;\n };\n LargeIconsView.prototype.setFocus = function (nextItem) {\n if (!isNOU(nextItem)) {\n var fileSelectionArgs = this.triggerSelection('select', nextItem);\n if (fileSelectionArgs.cancel !== true) {\n this.startItem = nextItem;\n this.clearSelect();\n this.addActive(nextItem);\n this.addFocus(nextItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', nextItem);\n }\n }\n };\n LargeIconsView.prototype.spaceKey = function (fItem) {\n if (!isNOU(fItem) && !fItem.classList.contains(CLS.ACTIVE)) {\n var fileSelectionArgs = this.triggerSelection('select', fItem);\n if (fileSelectionArgs.cancel !== true) {\n this.addActive(fItem);\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('select', fItem);\n }\n }\n };\n LargeIconsView.prototype.ctrlAKey = function (firstItem, lastItem) {\n if (this.parent.allowMultiSelection && !isNOU(firstItem)) {\n this.startItem = firstItem;\n var eveArgs = { ctrlKey: true, shiftKey: true };\n var liParent = this.element.querySelector('.' + CLS.LIST_PARENT);\n var liScrPos = liParent.scrollTop;\n var getCurFocusedItem = this.getFocusedItem();\n this.doSelection(lastItem, eveArgs);\n liParent.scrollTop = liScrPos;\n if (!isNOU(getCurFocusedItem)) {\n this.addFocus(getCurFocusedItem);\n }\n }\n };\n LargeIconsView.prototype.csEndKey = function (lastItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(lastItem);\n }\n else if (!isNOU(lastItem)) {\n if (e.action === 'ctrlEnd') {\n this.addFocus(lastItem);\n }\n else {\n this.doSelection(lastItem, e);\n }\n }\n };\n LargeIconsView.prototype.csHomeKey = function (firstItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateItem(firstItem);\n }\n else if (!isNOU(firstItem)) {\n if (e.action === 'ctrlHome') {\n this.addFocus(firstItem);\n }\n else {\n this.doSelection(firstItem, e);\n }\n }\n };\n LargeIconsView.prototype.csDownKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, true);\n }\n else {\n var dItem = this.getNextItem(fItem, true, this.perRow);\n if (!isNOU(dItem)) {\n if (e.action === 'ctrlDown') {\n this.addFocus(dItem);\n }\n else {\n this.doSelection(dItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csLeftKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, false);\n }\n else {\n var lItem = this.getNextItem(fItem, false);\n if (!isNOU(lItem)) {\n if (e.action === 'ctrlLeft') {\n this.addFocus(lItem);\n }\n else {\n this.doSelection(lItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csRightKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateRight(fItem, true);\n }\n else {\n var rItem = this.getNextItem(fItem, true);\n if (!isNOU(rItem)) {\n if (e.action === 'ctrlRight') {\n this.addFocus(rItem);\n }\n else {\n this.doSelection(rItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.csUpKey = function (fItem, e) {\n if (!this.parent.allowMultiSelection) {\n this.navigateDown(fItem, false);\n }\n else {\n var uItem = this.getNextItem(fItem, false, this.perRow);\n if (!isNOU(uItem)) {\n if (e.action === 'ctrlUp') {\n this.addFocus(uItem);\n }\n else {\n this.doSelection(uItem, e);\n }\n }\n }\n };\n LargeIconsView.prototype.addActive = function (nextItem) {\n if (!isNOU(nextItem)) {\n if (!nextItem.classList.contains(CLS.ACTIVE)) {\n this.parent.selectedItems.push(this.getDataName(nextItem));\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n addClass([nextItem], [CLS.ACTIVE]);\n nextItem.setAttribute('aria-selected', 'true');\n this.checkState(nextItem, true);\n }\n this.parent.visitedItem = nextItem;\n }\n };\n LargeIconsView.prototype.removeActive = function (preItem) {\n if (!isNOU(preItem)) {\n removeClass([preItem], [CLS.ACTIVE]);\n if (this.parent.allowMultiSelection) {\n preItem.setAttribute('aria-selected', 'false');\n }\n else {\n preItem.removeAttribute('aria-selected');\n }\n this.checkState(preItem, false);\n var index = this.parent.selectedItems.indexOf(this.getDataName(preItem));\n if (index > -1) {\n this.parent.selectedItems.splice(index, 1);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n this.parent.visitedItem = null;\n }\n };\n LargeIconsView.prototype.getDataName = function (item) {\n // eslint-disable-next-line\n var data = this.getItemObject(item);\n return getItemName(this.parent, data);\n };\n LargeIconsView.prototype.addFocus = function (item) {\n this.element.setAttribute('tabindex', '-1');\n var fItem = this.getFocusedItem();\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS]);\n }\n addClass([item], [CLS.FOCUS]);\n item.setAttribute('tabindex', '0');\n item.focus();\n };\n LargeIconsView.prototype.checkState = function (item, toCheck) {\n if (!this.parent.showItemCheckBoxes) {\n return;\n }\n var checkEle = select('.' + CLS.FRAME, item);\n if (isNOU(checkEle)) {\n return;\n }\n if (toCheck) {\n if (!checkEle.classList.contains(CLS.CHECK)) {\n addClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'true');\n }\n }\n else {\n if (checkEle.classList.contains(CLS.CHECK)) {\n removeClass([checkEle], CLS.CHECK);\n closest(checkEle, '.' + CLS.CB_WRAP).setAttribute('aria-checked', 'false');\n }\n }\n };\n LargeIconsView.prototype.clearSelect = function () {\n var eles = Array.prototype.slice.call(selectAll('.' + CLS.ACTIVE, this.listElements));\n var fileSelectionArgs;\n if (eles.length !== 0) {\n fileSelectionArgs = this.triggerSelection('unselect', eles[0]);\n if (fileSelectionArgs.cancel !== true) {\n for (var i = 0, len = eles.length; i < len; i++) {\n this.removeActive(eles[i]);\n }\n }\n this.triggerSelect('unselect', eles[0]);\n }\n };\n LargeIconsView.prototype.resizeHandler = function () {\n this.getItemCount();\n if (!isNOU(this.listObj)) {\n this.adjustHeight();\n }\n };\n LargeIconsView.prototype.splitterResizeHandler = function () {\n this.getItemCount();\n };\n LargeIconsView.prototype.getItemCount = function () {\n var perRow = 1;\n if (this.itemList) {\n for (var i = 0, len = this.itemList.length - 1; i < len; i++) {\n if (this.itemList[i].getBoundingClientRect().top === this.itemList[i + 1].getBoundingClientRect().top) {\n perRow++;\n }\n else {\n break;\n }\n }\n }\n this.perRow = perRow;\n };\n LargeIconsView.prototype.triggerSelection = function (action, item) {\n // eslint-disable-next-line\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n }\n else {\n data[0] = this.getItemObject(item);\n }\n var eventArgs = {\n action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteraction, cancel: false, target: this.isSelectAllCalled ? null : item\n };\n this.parent.trigger('fileSelection', eventArgs);\n this.isInteraction = true;\n return eventArgs;\n };\n LargeIconsView.prototype.triggerSelect = function (action, item) {\n // eslint-disable-next-line\n var data = [];\n if (this.isSelectAllCalled) {\n for (var i = 0, len = this.itemList.length; i < len; i++) {\n data[i] = this.getItemObject(this.itemList[i]);\n }\n this.isSelectAllCalled = false;\n }\n else {\n data[0] = this.getItemObject(item);\n }\n this.parent.visitedData = data.length > 1 ? data[data.length - 1] : data[0];\n var eventArgs = { action: action, fileDetails: data.length > 1 ? data : data[0], isInteracted: this.isInteracted };\n this.parent.trigger('fileSelect', eventArgs);\n this.isInteracted = true;\n };\n LargeIconsView.prototype.selectItems = function (items) {\n var indexes = this.getIndexes(items, this.parent.hasId);\n for (var j = 0, len = indexes.length; j < len; j++) {\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[indexes[j]], eveArgs);\n }\n };\n LargeIconsView.prototype.getIndexes = function (items, byId) {\n var indexes = [];\n var filter = byId ? 'id' : 'name';\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filter, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n return indexes;\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.getItemObject = function (item) {\n var index = this.itemList.indexOf(item);\n return this.items[index];\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var newData = new DataManager(this.items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (newData.length > 0) {\n resultData = new DataManager(newData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n var index = this.items.indexOf(resultData[0]);\n var eveArgs = { ctrlKey: true, shiftKey: false };\n this.doSelection(this.itemList[index], eveArgs);\n }\n };\n LargeIconsView.prototype.updateSelectedData = function () {\n // eslint-disable-next-line\n var data = [];\n var items = selectAll('.' + CLS.LIST_ITEM + '.' + CLS.ACTIVE, this.element);\n for (var i = 0; i < items.length; i++) {\n data[i] = this.getItemObject(items[i]);\n }\n this.parent.itemData = data;\n };\n // eslint-disable-next-line\n LargeIconsView.prototype.onMethodCall = function (args) {\n if (this.parent.view !== 'LargeIcons') {\n return;\n }\n var action = getValue('action', args);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', args));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', args));\n break;\n case 'openFile':\n this.openFile(getValue('id', args));\n break;\n case 'renameFile':\n this.isInteraction = false;\n this.isInteracted = false;\n this.renameFile(getValue('id', args), getValue('newName', args));\n break;\n case 'createFolder':\n this.isInteraction = false;\n this.isInteracted = false;\n break;\n case 'clearSelection':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onClearAllInit();\n break;\n case 'selectAll':\n this.isInteraction = false;\n this.isInteracted = false;\n this.onSelectAllInit();\n break;\n }\n };\n LargeIconsView.prototype.getItemsIndex = function (items) {\n var indexes = [];\n var isFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filterName = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !isFilter) {\n for (var i = 0, len = this.items.length; i < len; i++) {\n if (items.indexOf(getValue(filterName, this.items[i])) !== -1) {\n indexes.push(i);\n }\n }\n }\n else {\n for (var i = 0, len = this.items.length; i < len; i++) {\n var name_2 = getValue('filterPath', this.items[i]) + getValue('name', this.items[i]);\n if ((items.indexOf(name_2) !== -1) || (items.indexOf(getValue(filterName, this.items[i])) !== -1)) {\n indexes.push(i);\n }\n }\n }\n return indexes;\n };\n LargeIconsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n var indexes = this.getItemsIndex(ids);\n if (indexes.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < indexes.length; i++) {\n data[i] = this.items[indexes[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n var index = this.getItemsIndex(ids);\n if (index.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < index.length; i++) {\n data[i] = this.items[index[i]];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n LargeIconsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n this.doOpenAction(this.itemList[indexes[0]]);\n }\n };\n LargeIconsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'largeiconsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n var indexes = this.getItemsIndex([id]);\n if (indexes.length > 0) {\n updateRenamingData(this.parent, this.items[indexes[0]]);\n if (isNOU(name)) {\n doRename(this.parent);\n }\n else {\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n rename(this.parent, this.parent.path, name);\n }\n }\n }\n };\n return LargeIconsView;\n}());\nexport { LargeIconsView };\n","import { EventHandler, closest, isNullOrUndefined, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, addClass, removeClass, remove, createElement } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { read } from '../common/operations';\nimport { getLocaleText, searchWordHandler } from '../common/utility';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * BreadCrumbBar module\n */\nvar BreadCrumbBar = /** @class */ (function () {\n /**\n * constructor for addressbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies parent element.\n * @private\n *\n */\n function BreadCrumbBar(parent) {\n this.addressPath = '';\n this.addressBarLink = '';\n this.searchTimer = null;\n this.searchWrapWidth = null;\n this.parent = parent;\n this.keyConfigs = {\n enter: 'enter'\n };\n this.render();\n }\n BreadCrumbBar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var value = e.newProp.searchSettings;\n switch (prop) {\n case 'searchSettings':\n if (!isNullOrUndefined(value.allowSearchOnTyping)) {\n this.searchEventBind(value.allowSearchOnTyping);\n }\n if (this.parent.breadcrumbbarModule.searchObj.value && this.parent.breadcrumbbarModule.searchObj.value !== '' &&\n !(!isNullOrUndefined(value.allowSearchOnTyping) && isNullOrUndefined(value.filterType) &&\n isNullOrUndefined(value.ignoreCase))) {\n searchWordHandler(this.parent, this.parent.breadcrumbbarModule.searchObj.value, false);\n }\n break;\n }\n }\n };\n BreadCrumbBar.prototype.render = function () {\n this.addEventListener();\n };\n BreadCrumbBar.prototype.onPathChange = function () {\n var pathNames = this.parent.pathNames;\n var paths = this.parent.path.split('/');\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var addressbarLI = null;\n var pathNamesLen = pathNames.length;\n if (pathNames.length > 0) {\n var id = '';\n for (var i = 0; i < pathNamesLen; i++) {\n var addressATag = null;\n addressbarLI = this.parent.createElement('li', { className: 'e-address-list-item' });\n for (var j = 0; j <= i; j++) {\n id = id + paths[j] + '/';\n }\n addressbarLI.setAttribute('data-utext', id);\n if (i !== 0) {\n var icon = createElement('span', { className: CLS.ICONS });\n addressbarLI.appendChild(icon);\n }\n if (pathNamesLen - i !== 1) {\n addressATag = createElement('a', { className: CLS.LIST_TEXT });\n addressbarLI.setAttribute('tabindex', '0');\n }\n else {\n addressATag = createElement('span', { className: CLS.LIST_TEXT });\n }\n id = '';\n addressATag.innerText = pathNames[i];\n addressbarLI.appendChild(addressATag);\n addressbarUL.appendChild(addressbarLI);\n }\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n if (!isNullOrUndefined(ulElement)) {\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n remove(ulElement);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n if (!searchWrap) {\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.appendChild(addressbarUL);\n }\n this.updateBreadCrumbBar(addressbarUL);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.updateBreadCrumbBar = function (addresBarUL) {\n var liElements = addresBarUL.querySelectorAll('li');\n var ulElement = this.parent.breadCrumbBarNavigation.querySelector('.e-addressbar-ul');\n var style = window.getComputedStyle(ulElement, null);\n var pRight = parseFloat(style.getPropertyValue('padding-right'));\n var pLeft = parseFloat(style.getPropertyValue('padding-left'));\n var breadCrumbBarWidth = ulElement.offsetWidth - pRight - pLeft;\n var addressbarUL = this.parent.createElement('ul', { className: 'e-addressbar-ul' });\n var liElementsWidth = 0;\n var liElementsWidths = [];\n for (var i = 0; i < liElements.length; i++) {\n var width = liElements[i].clientWidth;\n liElementsWidths.push(width);\n liElementsWidth = liElementsWidth + width;\n }\n if (!isNullOrUndefined(ulElement)) {\n remove(ulElement);\n }\n var searchContainer = this.parent.createElement('div');\n searchContainer.setAttribute('class', 'e-search-wrap');\n var id = this.parent.element.id + CLS.SEARCH_ID;\n var searchInput = createElement('input', { id: id,\n attrs: { autocomplete: 'off', 'aria-label': getLocaleText(this.parent, 'Search') } });\n searchContainer.appendChild(searchInput);\n var searchEle = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap .e-input');\n if (isNullOrUndefined(searchEle)) {\n this.parent.breadCrumbBarNavigation.appendChild(searchContainer);\n var span = createElement('span', { className: 'e-icons e-fe-search' });\n EventHandler.add(span, 'click', this.onShowInput, this);\n searchInput.parentElement.insertBefore(span, searchInput);\n this.searchObj = new TextBox({\n value: '',\n showClearButton: true,\n placeholder: getLocaleText(this.parent, 'Search'),\n focus: this.onFocus.bind(this),\n blur: this.onBlur.bind(this)\n });\n this.searchObj.appendTo('#' + this.parent.element.id + CLS.SEARCH_ID);\n this.searchEventBind(this.parent.searchSettings.allowSearchOnTyping);\n var search = this.searchObj.element.nextElementSibling;\n EventHandler.add(search, 'mousedown', this.searchChangeHandler.bind(this), this);\n EventHandler.add(this.searchObj.element, 'keyup', this.onKeyUp.bind(this), this);\n }\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n breadCrumbBarWidth = breadCrumbBarWidth - (this.searchWrapWidth ? this.searchWrapWidth : searchWrap.offsetWidth);\n if (liElementsWidth > breadCrumbBarWidth) {\n var i = liElements.length;\n while (i--) {\n var diff = breadCrumbBarWidth - liElementsWidths[i];\n if (diff > 40) {\n addressbarUL.insertBefore(liElements[i], addressbarUL.querySelector('li'));\n breadCrumbBarWidth = diff;\n }\n else {\n // eslint-disable-next-line\n var items = [];\n for (var j = 0; j <= i; j++) {\n var liElement = liElements[j];\n items.push({\n text: liElement.innerText,\n utext: liElement.getAttribute('data-utext')\n });\n }\n var subMenuLi = this.parent.createElement('li', { className: 'e-breadcrumb-menu' });\n // eslint-disable-next-line\n var attributes = { className: 'e-breadcrumb-submenu' };\n var subMenuSpan = this.parent.createElement('button', attributes);\n subMenuLi.appendChild(subMenuSpan);\n addressbarUL.insertBefore(subMenuLi, addressbarUL.querySelector('li'));\n this.subMenuObj = new DropDownButton({\n items: items,\n cssClass: 'e-caret-hide e-submenu',\n iconCss: CLS.ICON_BREADCRUMB,\n iconPosition: 'Top',\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.addSubMenuAttributes.bind(this),\n select: this.subMenuSelectOperations.bind(this)\n });\n this.subMenuObj.isStringTemplate = true;\n this.subMenuObj.appendTo(subMenuSpan);\n break;\n }\n }\n this.parent.breadCrumbBarNavigation.insertBefore(addressbarUL, searchWrap);\n }\n else {\n this.parent.breadCrumbBarNavigation.insertBefore(addresBarUL, searchWrap);\n }\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onFocus = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.add('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onKeyUp = function () {\n this.parent.notify(events.pathColumn, { args: this.parent });\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onBlur = function () {\n var wrap = closest(this.searchObj.element, '.e-search-wrap');\n wrap.classList.remove('e-focus');\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.subMenuSelectOperations = function (event) {\n // eslint-disable-next-line\n var args = { target: event.element };\n this.addressPathClickHandler(args);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.addSubMenuAttributes = function (args) {\n args.element.setAttribute('data-utext', getValue('utext', args.item));\n var anchor = this.parent.createElement('a', { className: 'e-list-text' });\n args.element.appendChild(anchor);\n };\n BreadCrumbBar.prototype.searchEventBind = function (allow) {\n if (allow) {\n this.searchObj.input = this.searchChangeHandler.bind(this);\n this.searchObj.change = null;\n }\n else {\n this.searchObj.change = this.searchChangeHandler.bind(this);\n this.searchObj.input = null;\n }\n };\n BreadCrumbBar.prototype.searchChangeHandler = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.value)) {\n this.parent.isFiltered = false;\n if (this.parent.searchSettings.allowSearchOnTyping) {\n window.clearTimeout(this.searchTimer);\n this.searchTimer = window.setTimeout(function () { searchWordHandler(_this.parent, args.value, false); }, 300);\n }\n else {\n searchWordHandler(this.parent, args.value, false);\n }\n }\n };\n BreadCrumbBar.prototype.addressPathClickHandler = function (e) {\n var li = e.target;\n if (li.nodeName === 'LI' || li.nodeName === 'A') {\n var node = li.nodeName === 'LI' ? li.children[0] : li;\n if (!isNullOrUndefined(node)) {\n this.parent.isFiltered = false;\n var currentPath = this.updatePath(node);\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n this.triggerFileOpen(this.parent.itemData[0]);\n read(this.parent, events.pathChanged, currentPath);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n }\n };\n // eslint-disable-next-line\n BreadCrumbBar.prototype.triggerFileOpen = function (data) {\n var eventArgs = { cancel: false, fileDetails: data, module: 'BreadCrumbBar' };\n delete eventArgs.cancel;\n this.parent.trigger('fileOpen', eventArgs);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onShowInput = function () {\n if (this.parent.isMobile) {\n if (this.parent.element.classList.contains(CLS.FILTER)) {\n removeClass([this.parent.element], CLS.FILTER);\n this.searchWrapWidth = null;\n }\n else {\n var searchWrap = this.parent.breadCrumbBarNavigation.querySelector('.e-search-wrap');\n this.searchWrapWidth = searchWrap.offsetWidth;\n addClass([this.parent.element], CLS.FILTER);\n this.searchObj.element.focus();\n }\n }\n };\n BreadCrumbBar.prototype.updatePath = function (list) {\n var li = closest(list, 'li');\n var liElementId = li.getAttribute('data-utext');\n this.addressBarLink = liElementId;\n var link = this.addressBarLink.split('/');\n var ids = this.parent.pathId;\n var names = this.parent.pathNames;\n this.parent.pathId = [];\n this.parent.pathNames = [];\n var newpath = '';\n for (var i = 0, len = link.length - 1; i < len; i++) {\n this.parent.pathId.push(ids[i]);\n this.parent.pathNames.push(names[i]);\n newpath += link[i] + '/';\n }\n this.parent.setProperties({ path: newpath }, true);\n return newpath;\n };\n BreadCrumbBar.prototype.onUpdatePath = function () {\n this.onPathChange();\n this.removeSearchValue();\n };\n BreadCrumbBar.prototype.onCreateEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onRenameEnd = function () {\n this.onPathChange();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDeleteEnd = function () {\n this.onUpdatePath();\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.removeSearchValue = function () {\n this.parent.isFiltered = false;\n if (this.searchObj && (this.searchObj.value !== '' || this.searchObj.element.value !== '')) {\n this.searchObj.value = '';\n this.searchObj.element.value = '';\n this.searchObj.dataBind();\n }\n };\n BreadCrumbBar.prototype.onResize = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.onPasteEnd = function () {\n this.onPathChange();\n };\n BreadCrumbBar.prototype.addEventListener = function () {\n this.keyboardModule = new KeyboardEvents(this.parent.breadCrumbBarNavigation, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n EventHandler.add(this.parent.breadCrumbBarNavigation, 'click', this.addressPathClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.pathChanged, this.onUpdatePath, this);\n this.parent.on(events.finalizeEnd, this.onUpdatePath, this);\n this.parent.on(events.refreshEnd, this.onUpdatePath, this);\n this.parent.on(events.openEnd, this.onUpdatePath, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.splitterResize, this.onResize, this);\n this.parent.on(events.pasteEnd, this.onPasteEnd, this);\n this.parent.on(events.resizeEnd, this.onResize, this);\n this.parent.on(events.searchTextChange, this.onSearchTextChange, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.layoutRefresh, this.onResize, this);\n this.parent.on(events.dropPath, this.onPathChange, this);\n };\n BreadCrumbBar.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'enter':\n this.addressPathClickHandler(e);\n break;\n }\n };\n BreadCrumbBar.prototype.removeEventListener = function () {\n this.keyboardModule.destroy();\n this.parent.off(events.pathChanged, this.onUpdatePath);\n this.parent.off(events.finalizeEnd, this.onUpdatePath);\n this.parent.off(events.refreshEnd, this.onUpdatePath);\n this.parent.off(events.openEnd, this.onUpdatePath);\n this.parent.off(events.pasteEnd, this.onPasteEnd);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.splitterResize, this.onResize);\n this.parent.off(events.resizeEnd, this.onResize);\n this.parent.off(events.searchTextChange, this.onSearchTextChange);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.layoutRefresh, this.onResize);\n this.parent.off(events.dropPath, this.onPathChange);\n };\n /* istanbul ignore next */\n BreadCrumbBar.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var liEle = args.target.closest('li');\n this.parent.dropPath = this.updatePath((liEle.children[0]));\n this.parent.dropData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n this.triggerFileOpen(this.parent.dropData);\n var treeNodeId = this.parent.pathId[this.parent.pathId.length - 1];\n this.parent.notify(events.updateTreeSelection, { module: 'treeview', selectedNode: treeNodeId });\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n BreadCrumbBar.prototype.getModuleName = function () {\n return 'breadcrumbbar';\n };\n BreadCrumbBar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.subMenuObj)) {\n this.subMenuObj.destroy();\n }\n if (!isNullOrUndefined(this.searchObj)) {\n this.searchObj.destroy();\n }\n };\n BreadCrumbBar.prototype.onSearchTextChange = function (args) {\n this.searchObj.element.placeholder = (this.parent.searchSettings.placeholder != null) ? this.parent.searchSettings.placeholder : getLocaleText(this.parent, 'Search') + ' ' + getLocaleText(this.parent, args.cwd.name.toString());\n };\n return BreadCrumbBar;\n}());\nexport { BreadCrumbBar };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, createElement, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { getValue, select } from '@syncfusion/ej2-base';\nimport { Download, GetDetails } from './../common/operations';\nimport { createDialog } from './dialog';\nimport { cutFiles, copyFiles, refresh, getPathObject, getLocaleText, updateLayout, getFullPath } from './../common/utility';\nimport { getCssClass, sortbyClickHandler, pasteHandler } from './../common/utility';\nimport { createDeniedDialog, createNewFolder, uploadItem, hasEditAccess, hasDownloadAccess } from './../common/utility';\nimport * as events from './../base/constant';\nimport * as CLS from '../base/classes';\n/**\n * ContextMenu module\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * Constructor for the ContextMenu module\n *\n * @param {IFileManager} parent - Specifies the parent element.\n * @hidden\n */\n function ContextMenu(parent) {\n this.currentItems = [];\n this.currentElement = null;\n this.disabledItems = [];\n this.parent = parent;\n this.render();\n }\n ContextMenu.prototype.render = function () {\n this.keyConfigs = {\n downarrow: 'downarrow',\n uparrow: 'uparrown'\n };\n this.contextMenu = new Menu({\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: '#' + this.parent.element.id,\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n beforeItemRender: this.onBeforeItemRender.bind(this),\n select: this.onSelect.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this),\n cssClass: getCssClass(this.parent, CLS.ROOT_POPUP)\n });\n this.contextMenu.isStringTemplate = true;\n this.contextMenu.appendTo('#' + this.parent.element.id + CLS.CONTEXT_MENU_ID);\n this.addEventListener();\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeItemRender = function (args) {\n if (args.item.id === this.getMenuId('largeiconsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'LargeIcons' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_LARGE + ' ' + CLS.MENU_ICON);\n }\n if (args.item.id === this.getMenuId('detailsview')) {\n var iconSpan = createElement('span');\n var element = args.element;\n element.insertBefore(iconSpan, this.parent.view === 'Details' ? element.childNodes[1] : element.childNodes[0]);\n iconSpan.setAttribute('class', CLS.ICON_GRID + ' ' + CLS.MENU_ICON);\n }\n };\n ContextMenu.prototype.onBeforeClose = function () {\n this.menuTarget = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onBeforeOpen = function (args) {\n var _this = this;\n this.disabledItems = [];\n var selected = false;\n var uid;\n // eslint-disable-next-line\n var data;\n var treeFolder = false;\n var target = args.event.target;\n this.menuTarget = this.targetNodeElement = target;\n this.currentElement = args.element;\n if (target.classList.contains('e-spinner-pane')) {\n target = this.parent.navigationpaneModule.activeNode.getElementsByClassName(CLS.FULLROW)[0];\n this.menuTarget = this.targetNodeElement = target;\n }\n this.targetElement = this.parent.view === 'Details' ? closest(target, 'tr.e-row') : target;\n if (this.parent.enableVirtualization && (target.classList.contains('e-virtual-bottom') || target.classList.contains('e-virtualtable'))) {\n target = target.parentElement.closest(\"div\");\n }\n var view = this.getTargetView(target);\n this.updateActiveModule();\n /* istanbul ignore next */\n if (target.classList.contains(CLS.TREE_VIEW) || closest(target, 'th') ||\n (closest(target, '#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID)) ||\n (closest(target, '#' + this.parent.element.id + CLS.TOOLBAR_ID))) {\n args.cancel = true;\n // eslint:disable-next-line\n }\n else if (!(this.parent.view === 'LargeIcons') && this.targetElement &&\n this.targetElement.classList.contains('e-emptyrow')) {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else if (closest(target, '.' + CLS.EMPTY)) {\n this.setLayoutItem(target);\n // eslint:disable-next-line\n }\n else if (!target.classList.contains(CLS.MENU_ITEM) &&\n !target.classList.contains(CLS.MENU_ICON) && !target.classList.contains(CLS.SUBMENU_ICON)) {\n /* istanbul ignore next */\n // eslint:disable-next-line\n if (this.parent.view === 'LargeIcons' && !isNOU(closest(target, 'li')) && !closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n var eveArgs = { ctrlKey: true, shiftKey: true };\n if (!closest(target, 'li').classList.contains('e-active')) {\n this.parent.largeiconsviewModule.doSelection(target, eveArgs);\n }\n // eslint-disable-next-line\n data = this.parent.visitedData;\n selected = true;\n }\n else if (!isNOU(closest(target, 'tr.e-row'))) {\n uid = this.targetElement.getAttribute('data-uid');\n // eslint-disable-next-line\n data = this.parent.detailsviewModule.gridObj.getRowObjectFromUID(uid).data;\n if (isNOU(this.targetElement.getAttribute('aria-selected'))) {\n /* istanbul ignore next */\n this.parent.detailsviewModule.gridObj.selectRows([parseInt(this.targetElement.getAttribute('data-rowindex'), 10)]);\n }\n selected = true;\n /* istanbul ignore next */\n }\n else if (closest(target, '#' + this.parent.element.id + CLS.TREE_ID)) {\n uid = closest(target, 'li').getAttribute('data-uid');\n treeFolder = true;\n }\n /* istanbul ignore next */\n if (selected) {\n if (getValue('isFile', data) === true) {\n this.setFileItem();\n }\n else {\n this.setFolderItem(false);\n }\n /* istanbul ignore next */\n }\n else if (treeFolder) {\n this.setFolderItem(true);\n if (uid === this.parent.pathId[0]) {\n this.disabledItems.push('Delete', 'Rename', 'Cut', 'Copy');\n }\n /* istanbul ignore next */\n // eslint:disable-next-line\n }\n else if (view === 'TreeView' || view === 'GridView' || view === 'LargeIcon') {\n this.setLayoutItem(target);\n /* istanbul ignore next */\n }\n else {\n args.cancel = true;\n }\n }\n var pasteEle = select('#' + this.getMenuId('Paste'), this.contextMenu.element);\n if (!args.cancel && !this.parent.enablePaste &&\n pasteEle && !pasteEle.classList.contains('e-disabled')) {\n this.disabledItems.push('Paste');\n }\n if (args.cancel) {\n this.menuTarget = this.currentElement = null;\n return;\n }\n this.contextMenu.dataBind();\n var isSubMenu = false;\n if (target.classList.contains(CLS.MENU_ITEM) ||\n target.classList.contains(CLS.MENU_ICON) || target.classList.contains(CLS.SUBMENU_ICON)) {\n isSubMenu = true;\n }\n this.menuItemData = isSubMenu ? this.menuItemData : this.getMenuItemData();\n var eventArgs = {\n fileDetails: [this.menuItemData],\n element: args.element,\n target: target,\n items: isSubMenu ? args.items : this.contextMenu.items,\n menuModule: this.contextMenu,\n cancel: false,\n menuType: this.menuType,\n isSubMenu: isSubMenu\n };\n this.currentItems = eventArgs.items;\n this.parent.trigger('menuOpen', eventArgs, function (menuOpenArgs) {\n if (!isSubMenu) {\n _this.contextMenu.dataBind();\n _this.contextMenu.items = menuOpenArgs.items;\n _this.contextMenu.dataBind();\n }\n _this.enableItems(_this.disabledItems, false, true);\n args.cancel = menuOpenArgs.cancel;\n if (menuOpenArgs.cancel) {\n _this.menuTarget = _this.targetNodeElement = _this.currentElement = null;\n }\n });\n };\n ContextMenu.prototype.updateActiveModule = function () {\n this.parent.activeModule = closest(this.menuTarget, '#' + this.parent.element.id + CLS.TREE_ID) ?\n 'navigationpane' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.GRID_ID) ?\n 'detailsview' : closest(this.menuTarget, '#' + this.parent.element.id + CLS.LARGEICON_ID) ?\n 'largeiconsview' : this.parent.activeModule;\n };\n /* istanbul ignore next */\n /**\n *\n * @param {Element} target - specifies the target element.\n * @returns {string} -returns the target view.\n * @hidden\n */\n ContextMenu.prototype.getTargetView = function (target) {\n return target.classList.contains(CLS.TREE_VIEW) ?\n 'TreeView' : target.classList.contains(CLS.GRID_VIEW) ?\n 'GridView' : target.classList.contains(CLS.ICON_VIEW) ?\n 'LargeIcon' : target.classList.contains(CLS.LARGE_ICONS) ?\n 'LargeIcon' : '';\n };\n ContextMenu.prototype.getItemIndex = function (item) {\n var itemId = this.getMenuId(item);\n for (var i = 0; i < this.currentItems.length; i++) {\n if ((this.currentItems[i].id === itemId) || (this.currentItems[i].id === item)) {\n return i;\n }\n }\n return -1;\n };\n ContextMenu.prototype.disableItem = function (items) {\n if (items.length !== 0) {\n this.disabledItems = this.disabledItems.concat(items);\n }\n };\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n if (this.checkValidItem(items[i]) === 1) {\n this.contextMenu.enableItems([this.getMenuId(items[i])], enable, isUniqueId);\n }\n else if (this.checkValidItem(items[i]) === 2) {\n this.contextMenu.enableItems([items[i]], enable, isUniqueId);\n }\n }\n };\n ContextMenu.prototype.setFolderItem = function (isTree) {\n this.menuType = 'folder';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.folder.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (isTree) {\n var selectedTreeNode = select('[data-uid=\"' + this.parent.navigationpaneModule.treeObj.selectedNodes[0] + '\"]', this.parent.navigationpaneModule.treeObj.element);\n if (this.parent.pathNames[this.parent.pathNames.length - 1] === selectedTreeNode.querySelector('.e-list-text').innerHTML && this.parent.activeModule === 'navigationpane') {\n this.disabledItems.push('Open');\n }\n }\n else if (this.parent.selectedItems.length !== 1 && this.parent.activeModule !== 'navigationpane') {\n this.disabledItems.push('Rename', 'Paste');\n }\n };\n ContextMenu.prototype.setFileItem = function () {\n this.menuType = 'file';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.file.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (this.parent.selectedItems.length !== 1) {\n this.disabledItems.push('Rename');\n }\n };\n ContextMenu.prototype.setLayoutItem = function (target) {\n this.menuType = 'layout';\n this.contextMenu.items = this.getItemData(this.parent.contextMenuSettings.layout.map(function (item) { return item.trim(); }));\n this.contextMenu.dataBind();\n if (!this.parent.allowMultiSelection || ((this.parent.view === 'LargeIcons' &&\n (closest(target, '#' + this.parent.element.id + CLS.LARGEICON_ID).getElementsByClassName(CLS.EMPTY).length !== 0))\n || (this.parent.view === 'Details' &&\n (closest(target, '#' + this.parent.element.id + CLS.GRID_ID).getElementsByClassName(CLS.EMPTY).length !== 0)))) {\n this.disabledItems.push('SelectAll');\n }\n if (this.parent.selectedNodes.length === 0) {\n this.disabledItems.push('Paste');\n }\n this.contextMenu.dataBind();\n };\n ContextMenu.prototype.checkValidItem = function (nameEle) {\n if (!isNOU(select('#' + this.getMenuId(nameEle), this.currentElement))) {\n return 1;\n }\n else if (!isNOU(select('#' + nameEle, this.currentElement))) {\n return 2;\n }\n else {\n return -1;\n }\n };\n // eslint-disable-next-line\n ContextMenu.prototype.getMenuItemData = function () {\n if (this.menuType === 'layout') {\n return getPathObject(this.parent);\n }\n else {\n // eslint-disable-next-line\n var args = { target: this.menuTarget };\n this.parent.notify(events.menuItemData, args);\n return this.parent.itemData[0];\n }\n };\n /* istanbul ignore next */\n ContextMenu.prototype.onSelect = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var itemText = args.item.id.substr((this.parent.element.id + '_cm_').length);\n // eslint-disable-next-line\n var details;\n if (itemText === 'refresh' || itemText === 'newfolder' || itemText === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n if (this.parent.activeModule === 'navigationpane' && itemText === 'open') {\n details = [this.menuItemData];\n }\n else {\n details = this.parent.itemData;\n }\n }\n var eventArgs = {\n cancel: false,\n element: args.element,\n fileDetails: details,\n item: args.item\n };\n this.parent.trigger('menuClick', eventArgs, function (menuClickArgs) {\n var sItems;\n if (!menuClickArgs.cancel) {\n // eslint:disable-next-line\n switch (itemText) {\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'paste':\n if (_this.menuType === 'folder') {\n if ((_this.parent.activeModule === 'largeiconsview') || (_this.parent.activeModule === 'detailsview')) {\n _this.parent.folderPath = getFullPath(_this.parent, _this.menuItemData, _this.parent.path);\n }\n else {\n _this.parent.folderPath = '';\n }\n }\n else {\n _this.parent.folderPath = '';\n }\n pasteHandler(_this.parent);\n break;\n case 'delete':\n for (var j = 0; j < details.length; j++) {\n if (!hasEditAccess(details[j])) {\n createDeniedDialog(_this.parent, details[j], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n /* istanbul ignore next */\n case 'download':\n for (var i = 0; i < details.length; i++) {\n if (!hasDownloadAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionDownload);\n return;\n }\n }\n if (_this.parent.activeModule === 'navigationpane') {\n _this.parent.notify(events.downloadInit, {});\n }\n else if (_this.parent.selectedItems.length > 0) {\n Download(_this.parent, _this.parent.path, _this.parent.selectedItems);\n }\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'selectall':\n /* istanbul ignore next */\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'open':\n if (_this.parent.visitedItem && _this.parent.activeModule !== 'navigationpane') {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n else if (_this.parent.activeModule === 'navigationpane') {\n if (_this.parent.visitedItem) {\n _this.parent.notify(events.openInit, { target: _this.parent.visitedItem });\n }\n _this.parent.navigationpaneModule.openFileOnContextMenuClick(closest(_this.targetNodeElement, 'li'));\n }\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n /* istanbul ignore next */\n case 'name':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'size':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'date':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'ascending':\n /* istanbul ignore next */\n // eslint-disable-next-line no-fallthrough\n case 'descending':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n case 'none':\n /* istanbul ignore next */\n sortbyClickHandler(_this.parent, args);\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\n case 'largeiconsview':\n updateLayout(_this.parent, 'LargeIcons');\n break;\n /* istanbul ignore next */\n // eslint:disable-next-line\n case 'detailsview':\n updateLayout(_this.parent, 'Details');\n break;\n }\n }\n });\n };\n ContextMenu.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.contextMenu.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n break;\n }\n }\n };\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.keyboardModule = new KeyboardEvents(this.contextMenu.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n ContextMenu.prototype.removeEventListener = function () {\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.keyboardModule.destroy();\n };\n ContextMenu.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'uparrow':\n case 'downarrow':\n e.preventDefault();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n this.contextMenu.destroy();\n this.targetElement = null;\n };\n /* istanbul ignore next */\n ContextMenu.prototype.getItemData = function (data) {\n var items = [];\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var itemId = this.getMenuId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n switch (data[i]) {\n case '|':\n item = { separator: true };\n break;\n case 'Open':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_OPEN };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_UPLOAD };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_CUT };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_COPY };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_PASTE };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DELETE };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_RENAME };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_NEWFOLDER };\n break;\n case 'Details':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DETAILS };\n break;\n case 'SortBy':\n item = {\n id: itemId, text: itemText, iconCss: CLS.ICON_SHORTBY,\n items: [\n {\n id: this.getMenuId('Name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : null\n },\n {\n id: this.getMenuId('Date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : null\n },\n { separator: true },\n {\n id: this.getMenuId('Ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('Descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : null\n },\n {\n id: this.getMenuId('None'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n /* istanbul ignore next */\n case 'View':\n item = {\n id: itemId, text: itemText, iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n items: [\n {\n id: this.getMenuId('largeiconsview'), text: getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? null : CLS.TB_OPTION_TICK\n },\n {\n id: this.getMenuId('detailsview'), text: getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : null\n }\n ]\n };\n break;\n case 'Refresh':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_REFRESH };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_SELECTALL };\n break;\n /* istanbul ignore next */\n case 'Download':\n item = { id: itemId, text: itemText, iconCss: CLS.ICON_DOWNLOAD };\n break;\n /* istanbul ignore next */\n default:\n item = { id: itemId, text: itemText };\n break;\n }\n items.push(item);\n }\n return items;\n };\n ContextMenu.prototype.getMenuId = function (id) {\n return this.parent.element.id + '_cm_' + id.toLowerCase();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/**\n * Specifies the default locale of FileManager component\n */\n// eslint-disable-next-line\nexport var defaultLocale = {\n 'NewFolder': 'New folder',\n 'Upload': 'Upload',\n 'Delete': 'Delete',\n 'Rename': 'Rename',\n 'Download': 'Download',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'SortBy': 'Sort by',\n 'Refresh': 'Refresh',\n 'Item-Selection': 'item selected',\n 'Items-Selection': 'items selected',\n 'View': 'View',\n 'Details': 'Details',\n 'SelectAll': 'Select all',\n 'Open': 'Open',\n 'Tooltip-NewFolder': 'New folder',\n 'Tooltip-Upload': 'Upload',\n 'Tooltip-Delete': 'Delete',\n 'Tooltip-Rename': 'Rename',\n 'Tooltip-Download': 'Download',\n 'Tooltip-Cut': 'Cut',\n 'Tooltip-Copy': 'Copy',\n 'Tooltip-Paste': 'Paste',\n 'Tooltip-SortBy': 'Sort by',\n 'Tooltip-Refresh': 'Refresh',\n 'Tooltip-Selection': 'Clear selection',\n 'Tooltip-View': 'View',\n 'Tooltip-Details': 'Details',\n 'Tooltip-SelectAll': 'Select all',\n 'Name': 'Name',\n 'Size': 'Size',\n 'DateModified': 'Modified',\n 'DateCreated': 'Date created',\n 'Path': 'Path',\n 'Modified': 'Modified',\n 'Created': 'Created',\n 'Location': 'Location',\n 'Type': 'Type',\n 'Permission': 'Permission',\n 'Ascending': 'Ascending',\n 'Descending': 'Descending',\n 'None': 'None',\n 'View-LargeIcons': 'Large icons',\n 'View-Details': 'Details',\n 'Search': 'Search',\n 'Button-Ok': 'OK',\n 'Button-Cancel': 'Cancel',\n 'Button-Yes': 'Yes',\n 'Button-No': 'No',\n 'Button-Create': 'Create',\n 'Button-Save': 'Save',\n 'Header-NewFolder': 'Folder',\n 'Content-NewFolder': 'Enter your folder name',\n 'Header-Rename': 'Rename',\n 'Content-Rename': 'Enter your new name',\n 'Header-Rename-Confirmation': 'Rename Confirmation',\n 'Content-Rename-Confirmation': 'If you change a file name extension, the file might become unstable. ' +\n 'Are you sure you want to change it?',\n 'Header-Delete': 'Delete File',\n 'Content-Delete': 'Are you sure you want to delete this file?',\n 'Header-Folder-Delete': 'Delete Folder',\n 'Content-Folder-Delete': 'Are you sure you want to delete this folder?',\n 'Header-Multiple-Delete': 'Delete Multiple Items',\n 'Content-Multiple-Delete': 'Are you sure you want to delete these {0} items?',\n 'Header-Duplicate': 'File/Folder exists',\n 'Content-Duplicate': '{0} already exists. Do you want to rename and paste?',\n 'Header-Upload': 'Upload Files',\n 'Error': 'Error',\n 'Validation-Empty': 'The file or folder name cannot be empty.',\n 'Validation-Invalid': 'The file or folder name {0} contains invalid characters. Please use a different name. ' +\n // eslint-disable-next-line no-useless-escape\n 'Valid file or folder names cannot end with a dot or space, and cannot contain any of the following characters: \\\\/:*?\\\"<>|',\n 'Validation-NewFolder-Exists': 'A file or folder with the name {0} already exists.',\n 'Validation-Rename-Exists': 'Cannot rename {0} to {1}: destination already exists.',\n 'Folder-Empty': 'This folder is empty',\n 'File-Upload': 'Drag files here to upload',\n 'Search-Empty': 'No results found',\n 'Search-Key': 'Try with different keywords',\n 'Filter-Empty': 'No results found',\n 'Filter-Key': 'Try with different filter',\n 'Sub-Folder-Error': 'The destination folder is the subfolder of the source folder.',\n 'Same-Folder-Error': 'The destination folder is the same as the source folder.',\n 'Access-Denied': 'Access Denied',\n 'Access-Details': 'You don\"t have permission to access this folder.',\n 'Header-Retry': 'File Already Exists',\n 'Content-Retry': 'A file with this name already exists in this folder. What would you like to do?',\n 'Button-Keep-Both': 'Keep both',\n 'Button-Replace': 'Replace',\n 'Button-Skip': 'Skip',\n 'ApplyAll-Label': 'Do this for all current items',\n 'KB': 'KB',\n 'Access-Message': '{0} is not accessible. You need permission to perform the {1} action.',\n 'Network-Error': 'NetworkError: Failed to send on XMLHTTPRequest: Failed to load',\n 'Server-Error': 'ServerError: Invalid response from'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isNullOrUndefined, L10n, closest, Collection } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Complex, select } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, setStyleAttribute as setAttr, getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, Browser, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Splitter } from '@syncfusion/ej2-layouts';\nimport { Dialog, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { createDialog, createExtDialog } from '../pop-up/dialog';\nimport { ToolbarSettings, AjaxSettings, NavigationPaneSettings, DetailsViewSettings } from '../models/index';\nimport { ToolbarItem } from '../models/index';\nimport { SearchSettings } from '../models/index';\nimport { LargeIconsView } from '../layout/large-icons-view';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { UploadSettings } from '../models/upload-settings';\nimport * as events from './constant';\nimport * as CLS from './classes';\nimport { read, filter, createFolder } from '../common/operations';\nimport { refresh, getPathObject, getLocaleText, setNextPath, createDeniedDialog, getCssClass } from '../common/utility';\nimport { hasContentAccess, hasUploadAccess, updateLayout, createNewFolder, uploadItem } from '../common/utility';\nimport { ContextMenuSettings } from '../models/contextMenu-settings';\nimport { BreadCrumbBar } from '../actions/breadcrumb-bar';\nimport { ContextMenu } from '../pop-up/context-menu';\nimport { defaultLocale } from '../models/default-locale';\n/**\n * The FileManager component allows users to access and manage the file system through the web browser. It can performs the\n * functionalities like add, rename, search, sort, upload and delete files or folders. And also it\n * provides an easy way of dynamic injectable modules like toolbar, navigationpane, detailsview, largeiconsview.\n * ```html\n * <div id=\"file\"></div>\n * ```\n * ```typescript,\n * let feObj: FileManager = new FileManager();\n * feObj.appendTo('#file');\n * ```\n */\nvar FileManager = /** @class */ (function (_super) {\n __extends(FileManager, _super);\n function FileManager(options, element) {\n var _this = _super.call(this, options, element) || this;\n // eslint-disable-next-line\n _this.filterData = null;\n _this.selectedNodes = [];\n _this.duplicateItems = [];\n // eslint-disable-next-line\n _this.duplicateRecords = [];\n _this.previousPath = [];\n _this.nextPath = [];\n _this.isLayoutChange = false;\n _this.layoutSelectedItems = [];\n _this.renamedId = null;\n _this.uploadItem = [];\n _this.deleteRecords = [];\n _this.isFile = false;\n _this.isCut = false;\n _this.isSearchCut = false;\n _this.isSearchDrag = false;\n _this.isPasteError = false;\n _this.folderPath = '';\n _this.isSameAction = false;\n _this.isFiltered = false;\n // Specifies whether the sort by option is clicked or not.\n _this.isSortByClicked = false;\n _this.enablePaste = false;\n _this.persistData = false;\n _this.retryArgs = [];\n _this.isOpened = false;\n _this.isRetryOpened = false;\n _this.isPathDrag = false;\n // eslint-disable-next-line\n _this.searchedItems = [];\n _this.retryFiles = [];\n _this.isApplySame = false;\n // eslint-disable-next-line\n _this.dragData = [];\n _this.dragNodes = [];\n _this.dragPath = '';\n _this.dropPath = '';\n _this.isDragDrop = false;\n _this.treeExpandTimer = null;\n _this.dragCursorPosition = { left: 44, top: 18 };\n _this.isDropEnd = false;\n _this.dragCount = 0;\n // eslint-disable-next-line\n _this.droppedObjects = [];\n _this.uploadingCount = 0;\n _this.uploadedCount = 0;\n //Specifies whether the operating system is MAC or not \n _this.isMac = false;\n FileManager_1.Inject(BreadCrumbBar, LargeIconsView, ContextMenu);\n return _this;\n }\n FileManager_1 = FileManager;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n FileManager.prototype.getModuleName = function () {\n return 'filemanager';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n FileManager.prototype.preRender = function () {\n if (isNOU(this.element.id) || this.element.id === '') {\n this.element.setAttribute('id', getUniqueID('filemanager'));\n }\n this.ensurePath();\n this.feParent = [];\n this.feFiles = [];\n setAttr(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.isDevice = Browser.isDevice;\n this.isMobile = this.checkMobile();\n if (this.isMobile) {\n this.setProperties({ navigationPaneSettings: { visible: false } }, true);\n }\n var ele = closest(this.element, '.e-bigger');\n this.isBigger = ele ? true : false;\n this.activeModule = (this.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n createSpinner({ target: this.element }, createElement);\n this.addWrapper();\n this.keyConfigs = {\n altN: 'alt+n',\n f5: 'f5',\n ctrlShift1: 'ctrl+shift+1',\n ctrlShift2: 'ctrl+shift+2',\n ctrlU: 'ctrl+u'\n };\n this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale);\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string} - returns the persisted data.\n * @hidden\n */\n FileManager.prototype.getPersistData = function () {\n var keyEntity = ['view', 'path', 'selectedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n FileManager.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'breadcrumbbar',\n args: [this]\n });\n modules.push({\n member: 'largeiconsview',\n args: [this]\n });\n if (this.toolbarSettings.visible) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.navigationPaneSettings.visible) {\n modules.push({\n member: 'navigationpane',\n args: [this]\n });\n }\n if (this.view) {\n modules.push({\n member: 'detailsview',\n args: [this]\n });\n }\n if (this.contextMenuSettings.visible && !this.isDevice) {\n modules.push({\n member: 'contextmenu',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualization',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n FileManager.prototype.render = function () {\n this.initialize();\n var slItems = isNOU(this.selectedItems) ? [] :\n this.allowMultiSelection ? this.selectedItems : this.selectedItems.slice(this.selectedItems.length - 1);\n this.setProperties({ selectedItems: slItems }, true);\n this.fileView = this.view;\n this.isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n this.setRtl(this.enableRtl);\n this.addEventListeners();\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n this.adjustHeight();\n if (isNOU(this.navigationpaneModule)) {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n this.wireEvents();\n this.renderComplete();\n };\n FileManager.prototype.ensurePath = function () {\n var currentPath = this.path;\n if (isNOU(currentPath)) {\n currentPath = '/';\n }\n if (currentPath.lastIndexOf('/') !== (currentPath.length - 1)) {\n currentPath = currentPath + '/';\n }\n this.originalPath = currentPath;\n var paths = currentPath.split('/');\n this.setProperties({ path: paths[0] + '/' }, true);\n this.pathNames = [];\n this.pathId = ['fe_tree'];\n this.itemData = [];\n };\n FileManager.prototype.initialize = function () {\n if (this.isMobile) {\n addClass([this.element], CLS.MOBILE);\n }\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n this.addCssClass(null, this.cssClass);\n this.renderFileUpload();\n };\n FileManager.prototype.addWrapper = function () {\n var headerWrap = this.createElement('div', { id: this.element.id + CLS.TOOLBAR_ID });\n this.element.appendChild(headerWrap);\n var layoutWrap = this.createElement('div', {\n id: this.element.id + CLS.LAYOUT_ID, className: CLS.LAYOUT\n });\n this.element.appendChild(layoutWrap);\n var navigationWrap = this.createElement('div', {\n id: this.element.id + CLS.NAVIGATION_ID, className: CLS.NAVIGATION\n });\n var treeWrap = this.createElement('div', {\n id: this.element.id + CLS.TREE_ID\n });\n navigationWrap.appendChild(treeWrap);\n var contentWrap = this.createElement('div', {\n id: this.element.id + CLS.CONTENT_ID, className: CLS.LAYOUT_CONTENT\n });\n this.breadCrumbBarNavigation = this.createElement('div', {\n id: this.element.id + CLS.BREADCRUMBBAR_ID,\n className: CLS.BREADCRUMBS\n });\n contentWrap.appendChild(this.breadCrumbBarNavigation);\n var gridWrap = this.createElement('div', {\n id: this.element.id + CLS.GRID_ID\n });\n contentWrap.appendChild(gridWrap);\n var largeiconWrap = this.createElement('div', {\n id: this.element.id + CLS.LARGEICON_ID,\n className: CLS.LARGE_ICONS, attrs: { 'role': 'group' }\n });\n contentWrap.appendChild(largeiconWrap);\n var overlay = this.createElement('span', { className: CLS.OVERLAY });\n contentWrap.appendChild(overlay);\n var paneSettings;\n if (!this.enableRtl) {\n layoutWrap.appendChild(navigationWrap);\n layoutWrap.appendChild(contentWrap);\n paneSettings = [\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n },\n { size: '75%', min: '270px' }\n ];\n }\n else {\n layoutWrap.appendChild(contentWrap);\n layoutWrap.appendChild(navigationWrap);\n paneSettings = [\n { size: '75%', min: '270px' },\n {\n size: '25%', min: this.navigationPaneSettings.minWidth.toString(),\n max: this.navigationPaneSettings.maxWidth.toString()\n }\n ];\n }\n this.splitterObj = new Splitter({\n paneSettings: paneSettings,\n width: '100%',\n enableRtl: false,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n resizing: this.splitterResize.bind(this)\n });\n this.splitterObj.isStringTemplate = true;\n this.splitterObj.appendTo(layoutWrap);\n var dialogWrap = this.createElement('div', { id: this.element.id + CLS.DIALOG_ID });\n this.element.appendChild(dialogWrap);\n var menuWrap = this.createElement('ul', { id: this.element.id + CLS.CONTEXT_MENU_ID });\n this.element.appendChild(menuWrap);\n var dialogImgWrap = this.createElement('div', { id: this.element.id + CLS.IMG_DIALOG_ID });\n this.element.appendChild(dialogImgWrap);\n var extnDialogWrap = this.createElement('div', { id: this.element.id + CLS.EXTN_DIALOG_ID });\n this.element.appendChild(extnDialogWrap);\n var uploadDialogWrap = this.createElement('div', { id: this.element.id + CLS.UPLOAD_DIALOG_ID });\n this.element.appendChild(uploadDialogWrap);\n };\n FileManager.prototype.adjustHeight = function () {\n var toolbar = select('#' + this.element.id + CLS.TOOLBAR_ID, this.element);\n var toolBarHeight = toolbar ? toolbar.offsetHeight : 0;\n if (this.splitterObj) {\n this.splitterObj.height = (this.element.clientHeight - toolBarHeight).toString();\n this.splitterObj.dataBind();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.splitterResize = function () {\n this.notify(events.splitterResize, {});\n };\n FileManager.prototype.splitterAdjust = function () {\n var bar = select('.' + CLS.SPLIT_BAR, this.element);\n if (this.navigationPaneSettings.visible) {\n this.splitterObj.expand(this.enableRtl ? 1 : 0);\n bar.classList.remove(CLS.DISPLAY_NONE);\n }\n else {\n this.splitterObj.collapse(this.enableRtl ? 1 : 0);\n bar.classList.add(CLS.DISPLAY_NONE);\n }\n };\n FileManager.prototype.addCssClass = function (oldOne, newOne) {\n if (!isNOU(oldOne) && oldOne !== '') {\n removeClass([this.element], oldOne.split(' '));\n }\n if (!isNOU(newOne) && newOne !== '') {\n addClass([this.element], newOne.split(' '));\n }\n };\n FileManager.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n FileManager.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n FileManager.prototype.onContextMenu = function (e) {\n e.preventDefault();\n };\n FileManager.prototype.checkMobile = function () {\n return (/iphone|ipod|android|blackberry|opera|mini|windows\\sce|palm|smartphone|iemobile/i.test(Browser.userAgent.toLowerCase())\n && /mobile/i.test(Browser.userAgent.toLowerCase()));\n };\n FileManager.prototype.renderFileUpload = function () {\n var id = this.element.id + CLS.UPLOAD_ID;\n var uploadEle = this.createElement('input', { id: id, attrs: { name: 'uploadFiles', type: 'file' } });\n this.element.appendChild(uploadEle);\n this.uploadDialogObj = new Dialog({\n header: getLocaleText(this, 'Header-Upload'),\n content: uploadEle,\n animationSettings: { effect: 'None' },\n showCloseIcon: true,\n closeOnEscape: true,\n visible: false,\n isModal: true,\n width: '350px',\n target: this.popupTarget ? this.popupTarget : '#' + this.element.id,\n cssClass: getCssClass(this, this.isMobile ? CLS.MOB_POPUP : CLS.ROOT_POPUP),\n locale: this.locale,\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n enableRtl: this.enableRtl,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n open: this.onOpen.bind(this),\n close: this.onClose.bind(this),\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n this.uploadDialogObj.appendTo('#' + this.element.id + CLS.UPLOAD_DIALOG_ID);\n this.renderUploadBox();\n };\n FileManager.prototype.renderUploadBox = function () {\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n this.uploadObj = new Uploader({\n dropArea: select('#' + this.element.id + CLS.CONTENT_ID, this.element),\n asyncSettings: {\n saveUrl: uploadUrl,\n removeUrl: uploadUrl\n },\n locale: this.locale,\n enableRtl: this.enableRtl,\n uploading: this.onUploading.bind(this),\n removing: this.onRemoving.bind(this),\n canceling: this.onCancel.bind(this),\n clearing: this.onClearing.bind(this),\n selected: this.onSelected.bind(this),\n success: this.onUploadSuccess.bind(this),\n failure: this.onUploadFailure.bind(this),\n autoUpload: this.uploadSettings.autoUpload,\n minFileSize: this.uploadSettings.minFileSize,\n maxFileSize: this.uploadSettings.maxFileSize,\n allowedExtensions: this.uploadSettings.allowedExtensions,\n directoryUpload: this.uploadSettings.directoryUpload,\n fileListRendering: this.onFileListRender.bind(this)\n });\n this.uploadObj.appendTo('#' + this.element.id + CLS.UPLOAD_ID);\n };\n FileManager.prototype.onFileListRender = function (args) {\n this.trigger('uploadListCreate', args);\n };\n FileManager.prototype.updateUploader = function () {\n this.uploadObj.autoUpload = this.uploadSettings.autoUpload;\n this.uploadObj.minFileSize = this.uploadSettings.minFileSize;\n this.uploadObj.maxFileSize = this.uploadSettings.maxFileSize;\n this.uploadObj.allowedExtensions = this.uploadSettings.allowedExtensions;\n this.uploadObj.directoryUpload = this.uploadSettings.directoryUpload;\n this.uploadObj.dataBind();\n };\n FileManager.prototype.onBeforeOpen = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupOpen', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onBeforeClose = function (args) {\n var eventArgs = {\n cancel: args.cancel, popupName: 'Upload', popupModule: this.uploadDialogObj\n };\n this.trigger('beforePopupClose', eventArgs, function (eventargs) {\n args.cancel = eventargs.cancel;\n });\n };\n FileManager.prototype.onOpen = function () {\n this.isOpened = true;\n this.uploadDialogObj.element.focus();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupOpen', args);\n };\n FileManager.prototype.onClose = function () {\n this.isOpened = false;\n this.uploadObj.clearAll();\n var args = {\n popupModule: this.uploadDialogObj, popupName: 'Upload',\n element: this.uploadDialogObj.element\n };\n this.trigger('popupClose', args);\n };\n /* istanbul ignore next */\n FileManager.prototype.onUploading = function (args) {\n var action = 'save';\n if ((this.retryArgs.length !== 0)) {\n for (var i = 0; i < this.retryArgs.length; i++) {\n if (args.fileData.name === this.retryArgs[i].file.name) {\n action = this.retryArgs[i].action;\n this.retryArgs.splice(i, 1);\n i = this.retryArgs.length;\n }\n }\n }\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': action }, { 'data': data }, { 'filename': args.fileData.name }];\n var uploadUrl = this.ajaxSettings.uploadUrl ? this.ajaxSettings.uploadUrl : this.ajaxSettings.url;\n // eslint-disable-next-line\n var ajaxSettings = {\n url: uploadUrl,\n type: 'POST',\n mode: true,\n dataType: null,\n contentType: null,\n data: JSON.stringify(args.customFormData),\n onSuccess: null,\n onFailure: null,\n beforeSend: null\n };\n this.uploadEventArgs = { action: 'Upload', ajaxSettings: ajaxSettings, cancel: false };\n this.trigger('beforeSend', this.uploadEventArgs, function (uploadEventArgs) {\n args.customFormData = JSON.parse(getValue('data', uploadEventArgs.ajaxSettings));\n args.cancel = uploadEventArgs.cancel;\n // eslint-disable-next-line\n var eventArgs = {\n cancel: false,\n httpRequest: args.currentRequest\n };\n if (typeof getValue('beforeSend', uploadEventArgs.ajaxSettings) === 'function') {\n getValue('beforeSend', uploadEventArgs.ajaxSettings)(eventArgs);\n if (getValue('cancel', eventArgs)) {\n args.cancel = getValue('cancel', eventArgs);\n }\n }\n });\n };\n FileManager.prototype.onRemoving = function () {\n this.onFileUploadSuccess({ count: 1 });\n if (this.uploadObj.getFilesData().length === 1) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onCancel = function (args) {\n var data = JSON.stringify(getValue(this.pathId[this.pathId.length - 1], this.feParent));\n args.customFormData = [{ 'path': this.path }, { 'action': 'remove' }, { 'data': data }];\n };\n /* istanbul ignore next */\n FileManager.prototype.onClearing = function () {\n if (this.isOpened) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.onSelected = function (args) {\n if (args.filesData.length === 0) {\n return;\n }\n this.uploadingCount = args.filesData.length;\n this.uploadedCount = 0;\n // eslint-disable-next-line\n var details = getPathObject(this);\n if (!hasUploadAccess(details)) {\n args.cancel = true;\n createDeniedDialog(this, details, events.permissionUpload);\n return;\n }\n this.uploadDialogObj.show();\n };\n // eslint-disable-next-line\n FileManager.prototype.onFileUploadSuccess = function (args) {\n this.uploadedCount = this.uploadedCount + args.count;\n if (this.uploadSettings.autoClose && (this.uploadingCount === this.uploadedCount)) {\n this.uploadDialogObj.hide();\n }\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n FileManager.prototype.onUploadSuccess = function (files) {\n var args = { action: 'Upload', result: files };\n this.trigger('success', args);\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n read(this, events.pathChanged, this.path);\n this.onFileUploadSuccess({ count: 1 });\n if (typeof getValue('onSuccess', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onSuccess', this.uploadEventArgs.ajaxSettings)();\n }\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n FileManager.prototype.onUploadFailure = function (files) {\n // eslint-disable-next-line\n var response = getValue('response', files);\n var statusText = getValue('statusText', response);\n if (statusText !== '') {\n setValue('statusText', statusText, files);\n }\n var args = { action: 'Upload', error: files };\n this.trigger('failure', args);\n if (getValue('statusCode', response) === 400) {\n this.retryFiles.push(getValue('file', files));\n if (!this.isRetryOpened) {\n createExtDialog(this, 'UploadRetry');\n }\n }\n if (typeof getValue('onFailure', this.uploadEventArgs.ajaxSettings) === 'function') {\n getValue('onFailure', this.uploadEventArgs.ajaxSettings)();\n }\n };\n FileManager.prototype.onInitialEnd = function () {\n setNextPath(this, this.path);\n };\n FileManager.prototype.addEventListeners = function () {\n this.on(events.beforeRequest, this.showSpinner, this);\n this.on(events.afterRequest, this.hideSpinner, this);\n this.on(events.initialEnd, this.onInitialEnd, this);\n this.on(events.detailsInit, this.onDetailsInit, this);\n this.on(events.skipUpload, this.onFileUploadSuccess, this);\n EventHandler.add(this.element, 'contextmenu', this.onContextMenu, this);\n };\n FileManager.prototype.removeEventListeners = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.beforeRequest, this.showSpinner);\n this.off(events.afterRequest, this.hideSpinner);\n this.off(events.initialEnd, this.onInitialEnd);\n this.off(events.detailsInit, this.onDetailsInit);\n this.off(events.skipUpload, this.onFileUploadSuccess);\n EventHandler.remove(this.element, 'contextmenu', this.onContextMenu);\n };\n FileManager.prototype.onDetailsInit = function () {\n if (isNOU(this.activeModule)) {\n this.itemData = [getValue(this.pathId[this.pathId.length - 1], this.feParent)];\n }\n };\n FileManager.prototype.resizeHandler = function () {\n this.adjustHeight();\n this.notify(events.resizeEnd, {});\n };\n FileManager.prototype.keyActionHandler = function (e) {\n var uploadEle;\n switch (e.action) {\n case 'altN':\n e.preventDefault();\n this.itemData = [getPathObject(this)];\n if (!hasContentAccess(this.itemData[0])) {\n createDeniedDialog(this, this.itemData[0], events.permissionEditContents);\n }\n else {\n createDialog(this, 'NewFolder');\n }\n break;\n case 'f5':\n e.preventDefault();\n refresh(this);\n break;\n /* istanbul ignore next */\n case 'ctrlShift1':\n e.preventDefault();\n this.fileView = 'Details';\n this.setProperties({ view: 'Details' }, true);\n showSpinner(this.element);\n updateLayout(this, 'Details');\n break;\n /* istanbul ignore next */\n case 'ctrlShift2':\n e.preventDefault();\n this.fileView = 'LargeIcons';\n this.setProperties({ view: 'LargeIcons' }, true);\n showSpinner(this.element);\n updateLayout(this, 'LargeIcons');\n break;\n case 'ctrlU':\n e.preventDefault();\n if (this.toolbarSettings.items.indexOf('Upload') != -1) {\n uploadEle = select('#' + this.element.id + CLS.UPLOAD_ID, this.element);\n uploadEle.click();\n }\n break;\n }\n };\n FileManager.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n FileManager.prototype.unWireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeHandler);\n this.keyboardModule.destroy();\n };\n FileManager.prototype.setPath = function () {\n this.setProperties({ selectedItems: [] }, true);\n this.ensurePath();\n this.notify(events.clearPathInit, { selectedNode: this.pathId[0] });\n read(this, (this.path !== this.originalPath) ? events.initialEnd : events.finalizeEnd, this.path);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {FileManager} newProp\n * @param {FileManager} oldProp\n * @returns void\n * @private\n */\n /* istanbul ignore next */\n // eslint:disable-next-line\n FileManager.prototype.onPropertyChanged = function (newProp, oldProp) {\n var height;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'ajaxSettings':\n this.ajaxSettingSetModel(newProp);\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'allowMultiSelection':\n if (this.allowMultiSelection) {\n addClass([this.element], CLS.CHECK_SELECT);\n }\n else {\n if (this.selectedItems.length > 1) {\n this.setProperties({ selectedItems: this.selectedItems.slice(this.selectedItems.length - 1) }, true);\n }\n removeClass([this.element], CLS.CHECK_SELECT);\n }\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'cssClass':\n this.addCssClass(oldProp.cssClass, newProp.cssClass);\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'detailsViewSettings':\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'enableRtl':\n this.enableRtl = newProp.enableRtl;\n this.refresh();\n break;\n case 'rootAliasName':\n this.rootAliasName = newProp.rootAliasName;\n this.refresh();\n break;\n case 'height':\n height = !isNOU(newProp.height) ? formatUnit(newProp.height) : newProp.height;\n setAttr(this.element, { 'height': height });\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'locale':\n if (!isNOU(newProp.enableRtl)) {\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n }\n this.localeSetModelOption(newProp);\n break;\n case 'navigationPaneSettings':\n this.splitterAdjust();\n this.notify(events.modelChanged, { module: 'navigationpane', newProp: newProp, oldProp: oldProp });\n break;\n case 'path':\n this.setPath();\n break;\n case 'searchSettings':\n if (!isNullOrUndefined(newProp.searchSettings.allowSearchOnTyping)) {\n this.setProperties({ searchSettings: { allowSearchOnTyping: newProp.searchSettings.allowSearchOnTyping } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.ignoreCase)) {\n this.setProperties({ searchSettings: { ignoreCase: newProp.searchSettings.ignoreCase } }, true);\n }\n if (isNullOrUndefined(newProp.searchSettings.filterType)) {\n this.setProperties({ searchSettings: { filterType: newProp.searchSettings.filterType } }, true);\n }\n this.notify(events.modelChanged, { module: 'breadcrumbbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'selectedItems':\n if (this.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (this.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'showFileExtension':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showHiddenItems':\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'showThumbnail':\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.adjustHeight();\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n break;\n case 'uploadSettings':\n this.updateUploader();\n break;\n case 'view':\n if (newProp.view === 'Details') {\n this.notify(events.modelChanged, { module: 'detailsview', newProp: newProp, oldProp: oldProp });\n }\n else if (newProp.view === 'LargeIcons') {\n this.notify(events.modelChanged, { module: 'largeiconsview', newProp: newProp, oldProp: oldProp });\n }\n break;\n case 'width':\n setAttr(this.element, { 'width': !isNOU(newProp.width) ? formatUnit(newProp.width) : newProp.width });\n this.notify(events.modelChanged, { module: 'common', newProp: newProp, oldProp: oldProp });\n break;\n case 'sortOrder':\n refresh(this);\n this.notify(events.sortByChange, {});\n break;\n case 'sortBy':\n refresh(this);\n this.notify(events.sortByChange, {});\n if (this.view === 'Details') {\n this.notify(events.sortColumn, {});\n }\n break;\n case 'popupTarget':\n if (this.uploadDialogObj) {\n this.uploadDialogObj.target = newProp.popupTarget;\n }\n if (this.dialogObj) {\n this.dialogObj.target = newProp.popupTarget;\n }\n if (this.extDialogObj) {\n this.extDialogObj.target = newProp.popupTarget;\n }\n if (this.viewerObj) {\n this.viewerObj.target = newProp.popupTarget;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n FileManager.prototype.ajaxSettingSetModel = function (newProp) {\n if (!isNullOrUndefined(newProp.ajaxSettings.url)) {\n this.setProperties({ ajaxSettings: { url: newProp.ajaxSettings.url } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.uploadUrl)) {\n this.setProperties({ ajaxSettings: { uploadUrl: newProp.ajaxSettings.uploadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.downloadUrl)) {\n this.setProperties({ ajaxSettings: { downloadUrl: newProp.ajaxSettings.downloadUrl } }, true);\n }\n if (!isNullOrUndefined(newProp.ajaxSettings.getImageUrl)) {\n this.setProperties({ ajaxSettings: { getImageUrl: newProp.ajaxSettings.getImageUrl } }, true);\n }\n this.setProperties({ path: '/' }, true);\n this.setProperties({ selectedItems: [] }, true);\n _super.prototype.refresh.call(this);\n };\n /* istanbul ignore next */\n FileManager.prototype.localeSetModelOption = function (newProp) {\n this.uploadObj.locale = newProp.locale;\n _super.prototype.refresh.call(this);\n };\n /**\n * Triggers when the component is destroyed.\n *\n * @returns {void}\n */\n FileManager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.refreshing) {\n this.notify(events.destroy, {});\n }\n this.uploadObj.destroy();\n this.uploadObj = null;\n this.uploadDialogObj.destroy();\n this.uploadDialogObj = null;\n this.splitterObj.destroy();\n this.splitterObj = null;\n if (this.dialogObj) {\n this.dialogObj.destroy();\n this.dialogObj = null;\n }\n if (this.viewerObj) {\n this.viewerObj.destroy();\n this.viewerObj = null;\n }\n if (this.extDialogObj) {\n this.extDialogObj.destroy();\n this.extDialogObj = null;\n }\n this.element.removeAttribute('style');\n this.element.removeAttribute('tabindex');\n this.removeEventListeners();\n this.unWireEvents();\n this.addCssClass(this.cssClass, null);\n removeClass([this.element], [CLS.RTL, CLS.MOBILE, CLS.CHECK_SELECT]);\n this.element.innerHTML = '';\n this.breadCrumbBarNavigation = null;\n this.activeElements = null;\n this.virtualDragElement = null;\n this.visitedItem = null;\n _super.prototype.destroy.call(this);\n this.virtualizationModule = null;\n this.navigationpaneModule = null;\n this.toolbarModule = null;\n this.contextmenuModule = null;\n this.largeiconsviewModule = null;\n this.detailsviewModule = null;\n this.breadcrumbbarModule = null;\n };\n /**\n * Creates a new folder in file manager.\n *\n * @param {string} name – Specifies the name of new folder in current path.\n * If it is not specified, then the default new folder dialog will be opened.\n * @returns {void}\n */\n FileManager.prototype.createFolder = function (name) {\n this.notify(events.methodCall, { action: 'createFolder' });\n // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n if (name) {\n if (/[/\\\\|*?\"<>:]/.test(name)) {\n var result = {\n files: null,\n error: {\n code: '402',\n message: getLocaleText(this, 'Validation-Invalid').replace('{0}', '\"' + name + '\"'),\n fileExists: null\n }\n };\n createDialog(this, 'Error', result);\n }\n else {\n if (!hasContentAccess(details[0])) {\n createDeniedDialog(this, details[0], events.permissionEditContents);\n }\n else {\n createFolder(this, name);\n }\n }\n }\n else {\n createNewFolder(this);\n }\n };\n /**\n * Deletes the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to delete the nested level folders or\n * files, then specify the filter path along with name of the folders or files when performing the search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then delete confirmation dialog will be opened for selected item.\n *\n * @returns {void}\n */\n FileManager.prototype.deleteFiles = function (ids) {\n this.notify(events.methodCall, { action: 'deleteFiles', ids: ids });\n };\n /**\n * Disables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, false);\n }\n };\n /**\n * Downloads the folders or files from the given unique identifiers.\n *\n * @param {string} ids - Specifies the name of folders or files in current path. If you want to download the nested level folders\n * or files, then specify the filter path along with name of the folders or files when performing search or custom filtering.\n * For ID based file provider, specify the unique identifier of folders or files.\n * If it is not specified, then the selected items will be downloaded.\n *\n * @returns {void}\n */\n FileManager.prototype.downloadFiles = function (ids) {\n this.notify(events.methodCall, { action: 'downloadFiles', ids: ids });\n };\n /**\n * Enables the specified toolbar items of the file manager.\n *\n * @param {string[]} items - Specifies an array of items to be enabled.\n * @returns {void}\n */\n FileManager.prototype.enableToolbarItems = function (items) {\n if (!isNOU(items) && this.toolbarModule) {\n this.toolbarModule.enableItems(items, true);\n }\n };\n /**\n * Disables the specified context menu items in file manager. This method is used only in the menuOpen event.\n *\n * @param {string[]} items - Specifies an array of items to be disabled.\n * @returns {void}\n */\n FileManager.prototype.disableMenuItems = function (items) {\n if (!isNOU(items) && !isNOU(this.contextmenuModule.contextMenu)) {\n this.contextmenuModule.disableItem(items);\n }\n };\n /**\n * Returns the index position of given current context menu item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns menu item index.\n */\n FileManager.prototype.getMenuItemIndex = function (item) {\n if (this.contextmenuModule) {\n return this.contextmenuModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Returns the index position of given toolbar item in file manager.\n *\n * @param {string} item - Specifies an item to get the index position.\n * @returns {number} - returns toolbar item index.\n */\n FileManager.prototype.getToolbarItemIndex = function (item) {\n if (this.toolbarModule) {\n return this.toolbarModule.getItemIndex(item);\n }\n else {\n return -1;\n }\n };\n /**\n * Display the custom filtering files in file manager.\n *\n * @param {Object} filterData - Specifies the custom filter details along with custom file action name,\n * which needs to be sent to the server side. If you do not specify the details, then default action name will be `filter`.\n *\n * @returns {void}\n */\n // eslint-disable-next-line\n FileManager.prototype.filterFiles = function (filterData) {\n this.filterData = filterData ? filterData : null;\n this.setProperties({ selectedItems: [] }, true);\n this.notify(events.selectionChanged, {});\n this.isFiltered = true;\n if (this.breadcrumbbarModule.searchObj.element.value !== '') {\n this.breadcrumbbarModule.searchObj.element.value = '';\n }\n filter(this, events.filterEnd);\n };\n /**\n * Gets the details of the selected files in the file manager.\n *\n * @returns {Object[]} - returns selected files.\n */\n // eslint-disable-next-line\n FileManager.prototype.getSelectedFiles = function () {\n this.notify(events.updateSelectionData, {});\n return this.itemData;\n };\n /**\n * Opens the corresponding file or folder from the given unique identifier.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to open the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n *\n * @returns {void}\n */\n FileManager.prototype.openFile = function (id) {\n this.notify(events.methodCall, { action: 'openFile', id: id });\n };\n /**\n * Refreshes the folder files of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshFiles = function () {\n refresh(this);\n };\n /**\n * Refreshes the layout of the file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.refreshLayout = function () {\n this.adjustHeight();\n this.notify(events.layoutRefresh, {});\n };\n /**\n * Selects the entire folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.selectAll = function () {\n this.notify(events.methodCall, { action: 'selectAll' });\n };\n /**\n * Deselects the currently selected folders and files in current path.\n *\n * @returns {void}\n */\n FileManager.prototype.clearSelection = function () {\n this.notify(events.methodCall, { action: 'clearSelection' });\n };\n /**\n * Renames the file or folder with given new name in file manager.\n *\n * @param {string} id - Specifies the name of folder or file in current path. If you want to rename the nested level folder or\n * file, then specify the filter path along with name of the folder or file when performing search or custom filtering. For ID based\n * file provider, specify the unique identifier of folder or file.\n * If it is not specified, then rename dialog will be opened for selected item.\n *\n * @param {string} name – Specifies the new name of the file or folder in current path. If it is not specified, then rename dialog\n * will be opened for given identifier.\n *\n * @returns {void}\n */\n FileManager.prototype.renameFile = function (id, name) {\n this.notify(events.methodCall, { action: 'renameFile', id: id, newName: name });\n };\n /**\n * Opens the upload dialog in file manager.\n *\n * @returns {void}\n */\n FileManager.prototype.uploadFiles = function () {\n // eslint-disable-next-line\n var details = [getPathObject(this)];\n this.itemData = details;\n uploadItem(this);\n };\n /**\n * Specifies the direction of FileManager\n *\n * @param {boolean} rtl - specifies rtl parameter.\n * @returns {void}\n */\n FileManager.prototype.setRtl = function (rtl) {\n if (rtl) {\n this.addCssClass(null, CLS.RTL);\n }\n else {\n this.addCssClass(CLS.RTL, null);\n }\n if (this.uploadObj) {\n this.uploadDialogObj.enableRtl = rtl;\n this.uploadObj.enableRtl = rtl;\n }\n };\n var FileManager_1;\n __decorate([\n Complex({}, AjaxSettings)\n ], FileManager.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showItemCheckBoxes\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], FileManager.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManager.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManager.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property('400px')\n ], FileManager.prototype, \"height\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManager.prototype, \"view\", void 0);\n __decorate([\n Complex({}, NavigationPaneSettings)\n ], FileManager.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManager.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"popupTarget\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManager.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], FileManager.prototype, \"selectedItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(null)\n ], FileManager.prototype, \"rootAliasName\", void 0);\n __decorate([\n Property(false)\n ], FileManager.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManager.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManager.prototype, \"sortOrder\", void 0);\n __decorate([\n Property('name')\n ], FileManager.prototype, \"sortBy\", void 0);\n __decorate([\n Complex({}, ToolbarSettings)\n ], FileManager.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Collection([], ToolbarItem)\n ], FileManager.prototype, \"toolbarItems\", void 0);\n __decorate([\n Complex({}, UploadSettings)\n ], FileManager.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('100%')\n ], FileManager.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeDownload\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeImageLoad\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforePopupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"beforeSend\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStart\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragging\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDragStop\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileDropped\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelection\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"fileSelect\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"menuOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"toolbarCreate\", void 0);\n __decorate([\n Event()\n ], FileManager.prototype, \"uploadListCreate\", void 0);\n FileManager = FileManager_1 = __decorate([\n NotifyPropertyChanges\n ], FileManager);\n return FileManager;\n}(Component));\nexport { FileManager };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Toolbar as BaseToolbar } from '@syncfusion/ej2-navigations';\nimport { select, isNullOrUndefined as isNOU, closest, selectAll } from '@syncfusion/ej2-base';\nimport { createDialog } from '../pop-up/dialog';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { refresh, getPathObject, getLocaleText, getCssClass, sortbyClickHandler } from '../common/utility';\nimport { createDeniedDialog, updateLayout } from '../common/utility';\nimport { GetDetails } from '../common/operations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { cutFiles, copyFiles, pasteHandler, hasEditAccess } from '../common/index';\nimport { doDownload, createNewFolder, uploadItem } from '../common/index';\n/**\n * Toolbar module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * Constructor for the Toolbar module\n *\n * @hidden\n * @param {IFileManager} parent - specifies the parent element.\n * @private\n */\n function Toolbar(parent) {\n this.default = ['Delete', 'Rename', 'Download', 'Cut', 'Copy', 'Paste'];\n this.single = ['Delete', 'Rename', 'Download', 'Cut', 'Copy'];\n this.multiple = ['Delete', 'Download', 'Cut', 'Copy', 'Refresh'];\n this.selection = ['NewFolder', 'Upload', 'SortBy', 'Refresh'];\n this.parent = parent;\n this.render();\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n var _this = this;\n this.items = this.toolbarItemData(this.getItems(this.parent.toolbarSettings.items.map(function (item) { return item.trim(); })));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj = new BaseToolbar({\n items: _this.items,\n created: _this.toolbarCreateHandler.bind(_this),\n overflowMode: 'Popup',\n clicked: _this.onClicked.bind(_this),\n enableHtmlSanitizer: _this.parent.enableHtmlSanitizer,\n enableRtl: _this.parent.enableRtl\n });\n _this.toolbarObj.isStringTemplate = true;\n _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;\n _this.toolbarObj.appendTo('#' + _this.parent.element.id + CLS.TOOLBAR_ID);\n });\n };\n Toolbar.prototype.getItemIndex = function (item) {\n var itemId = this.getId(item);\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].id === itemId) {\n return i;\n }\n }\n return -1;\n };\n Toolbar.prototype.getItems = function (items) {\n var currItems = items.slice();\n if (this.parent.isDevice && this.parent.allowMultiSelection) {\n currItems.push('SelectAll');\n }\n if (this.parent.toolbarItems.length > 0) {\n currItems = this.parent.toolbarItems.map(function (item) { return item.name; });\n }\n return currItems;\n };\n /* istanbul ignore next */\n Toolbar.prototype.onClicked = function (args) {\n var _this = this;\n if (isNOU(args.item) || !args.item.id) {\n return;\n }\n var tool = args.item.id.substr((this.parent.element.id + '_tb_').length);\n // eslint-disable-next-line\n var details;\n if (tool === 'refresh' || tool === 'newfolder' || tool === 'upload') {\n details = [getPathObject(this.parent)];\n this.parent.itemData = details;\n }\n else {\n this.parent.notify(events.selectedData, {});\n details = this.parent.itemData;\n }\n var eventArgs = { cancel: false, fileDetails: details, item: args.item };\n this.parent.trigger('toolbarClick', eventArgs, function (toolbarClickArgs) {\n var sItems;\n var target;\n if (!toolbarClickArgs.cancel) {\n switch (tool) {\n case 'sortby':\n target = closest(args.originalEvent.target, '.' + CLS.TB_ITEM);\n if (target && target.classList.contains('e-toolbar-popup')) {\n args.cancel = true;\n }\n break;\n case 'newfolder':\n createNewFolder(_this.parent);\n break;\n case 'cut':\n cutFiles(_this.parent);\n break;\n case 'copy':\n copyFiles(_this.parent);\n break;\n case 'delete':\n for (var i = 0; i < details.length; i++) {\n if (!hasEditAccess(details[i])) {\n createDeniedDialog(_this.parent, details[i], events.permissionEdit);\n return;\n }\n }\n createDialog(_this.parent, 'Delete');\n break;\n case 'details':\n _this.parent.notify(events.detailsInit, {});\n sItems = _this.parent.selectedItems;\n if (_this.parent.activeModule === 'navigationpane') {\n sItems = [];\n }\n GetDetails(_this.parent, sItems, _this.parent.path, 'details');\n break;\n case 'paste':\n _this.parent.folderPath = '';\n pasteHandler(_this.parent);\n break;\n case 'refresh':\n refresh(_this.parent);\n break;\n case 'download':\n doDownload(_this.parent);\n break;\n case 'rename':\n if (!hasEditAccess(details[0])) {\n createDeniedDialog(_this.parent, details[0], events.permissionEdit);\n }\n else {\n _this.parent.notify(events.renameInit, {});\n createDialog(_this.parent, 'Rename');\n }\n break;\n case 'upload':\n uploadItem(_this.parent);\n break;\n case 'selectall':\n _this.parent.notify(events.selectAllInit, {});\n break;\n case 'selection':\n _this.parent.notify(events.clearAllInit, {});\n break;\n }\n }\n });\n };\n Toolbar.prototype.toolbarCreateHandler = function () {\n if (!isNOU(select('#' + this.getId('SortBy'), this.parent.element))) {\n var items = [\n { id: this.getPupupId('name'), text: getLocaleText(this.parent, 'Name'),\n iconCss: this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('size'), text: getLocaleText(this.parent, 'Size'),\n iconCss: this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '' },\n { id: this.getPupupId('date'), text: getLocaleText(this.parent, 'DateModified'),\n iconCss: this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '' },\n { separator: true },\n { id: this.getPupupId('ascending'), text: getLocaleText(this.parent, 'Ascending'),\n iconCss: this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('descending'), text: getLocaleText(this.parent, 'Descending'),\n iconCss: this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '' },\n { id: this.getPupupId('none'), text: getLocaleText(this.parent, 'None'),\n iconCss: this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '' }\n ];\n this.buttonObj = new DropDownButton({\n items: items, cssClass: getCssClass(this.parent, CLS.ROOT_POPUP),\n select: sortbyClickHandler.bind(this, this.parent),\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n enableRtl: this.parent.enableRtl, iconCss: CLS.ICON_SHORTBY\n });\n this.buttonObj.isStringTemplate = true;\n this.buttonObj.appendTo('#' + this.getId('SortBy'));\n }\n if (!isNOU(select('#' + this.getId('View'), this.parent.element))) {\n var gridSpan = '<span class=\"' + CLS.ICON_GRID + ' ' + CLS.MENU_ICON + '\"></span>';\n var largeIconSpan = '<span class=\"' + CLS.ICON_LARGE + ' ' + CLS.MENU_ICON + '\"></span>';\n var layoutItems = [\n {\n id: this.getPupupId('large'), text: largeIconSpan + getLocaleText(this.parent, 'View-LargeIcons'),\n iconCss: this.parent.view === 'Details' ? '' : CLS.TB_OPTION_TICK\n },\n {\n id: this.getPupupId('details'), text: gridSpan + getLocaleText(this.parent, 'View-Details'),\n iconCss: this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : ''\n }\n ];\n this.layoutBtnObj = new DropDownButton({\n iconCss: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n cssClass: getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP),\n items: layoutItems, select: this.layoutChange.bind(this),\n enableRtl: this.parent.enableRtl,\n content: '<span class=\"e-tbar-btn-text\">' + getLocaleText(this.parent, 'View') + '</span>'\n });\n this.layoutBtnObj.isStringTemplate = true;\n this.layoutBtnObj.appendTo('#' + this.getId('View'));\n }\n this.hideItems(this.default, true);\n this.hideStatus();\n if (this.parent.portals && this.toolbarObj.portals) {\n this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);\n this.parent['renderReactTemplates']();\n }\n var btnElement = selectAll('.e-btn', this.toolbarObj.element);\n var _loop_1 = function (btnCount) {\n /* istanbul ignore next */\n btnElement[btnCount].onkeydown = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n e.preventDefault();\n }\n };\n btnElement[btnCount].onkeyup = function (e) {\n if (e.keyCode === 13 && !e.target.classList.contains('e-fe-popup')) {\n btnElement[btnCount].click();\n }\n };\n };\n for (var btnCount = 0; btnCount < btnElement.length; btnCount++) {\n _loop_1(btnCount);\n }\n this.parent.refreshLayout();\n };\n Toolbar.prototype.updateSortByButton = function () {\n if (this.buttonObj) {\n var items = this.buttonObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('name')) {\n items[itemCount].iconCss = this.parent.sortBy === 'name' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('size')) {\n items[itemCount].iconCss = this.parent.sortBy === 'size' ? CLS.TB_OPTION_DOT : '';\n }\n else if (items[itemCount].id === this.getPupupId('date')) {\n if (this.parent.sortBy === 'dateModified' || this.parent.sortBy === 'dateCreated') {\n items[itemCount].iconCss = this.parent.sortBy === this.parent.sortBy ? CLS.TB_OPTION_DOT : '';\n }\n else {\n items[itemCount].iconCss = this.parent.sortBy === '_fm_modified' ? CLS.TB_OPTION_DOT : '';\n }\n }\n else if (items[itemCount].id === this.getPupupId('ascending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Ascending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('descending')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'Descending' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('none')) {\n items[itemCount].iconCss = this.parent.sortOrder === 'None' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.getPupupId = function (id) {\n return this.parent.element.id + '_ddl_' + id.toLowerCase();\n };\n Toolbar.prototype.layoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (args.item.id === this.getPupupId('large')) {\n updateLayout(this.parent, 'LargeIcons');\n }\n }\n else {\n if (args.item.id === this.getPupupId('details')) {\n updateLayout(this.parent, 'Details');\n }\n }\n };\n Toolbar.prototype.toolbarItemData = function (data) {\n var items = [];\n var mode = 'Both';\n if (this.parent.isMobile) {\n mode = 'Overflow';\n }\n for (var i = 0; i < data.length; i++) {\n var item = void 0;\n var propItem = void 0;\n if (this.parent.toolbarItems.length > 0) {\n propItem = this.getItemModel(this.parent.toolbarItems[parseInt(i.toString(), 10)]);\n }\n var itemId = this.getId(data[i]);\n var itemText = getLocaleText(this.parent, data[i]);\n var itemTooltip = getLocaleText(this.parent, 'Tooltip-' + data[i]);\n switch (data[i]) {\n case '|':\n item = { type: 'Separator' };\n break;\n case 'Upload':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_UPLOAD, showTextOn: mode };\n break;\n case 'SortBy': {\n var spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + itemText + '</span>';\n if (propItem && propItem.text) {\n spanElement = '<span class=\"e-tbar-btn-text e-tbar-ddb-text\">' + propItem.text + '</span>';\n }\n item = {\n id: itemId, tooltipText: itemTooltip,\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\">' + spanElement + '</button>'\n };\n break;\n }\n case 'Refresh':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_REFRESH, showTextOn: mode };\n break;\n case 'Selection':\n item = {\n id: itemId, text: itemText, tooltipText: itemTooltip, suffixIcon: CLS.ICON_CLEAR, overflow: 'Show',\n align: 'Right'\n };\n break;\n case 'View': {\n var viewText = void 0;\n if (propItem && propItem.text) {\n viewText = propItem.text;\n }\n else {\n viewText = getLocaleText(this.parent, 'View');\n }\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE,\n overflow: 'Show', align: 'Right', text: itemText, showTextOn: 'Overflow',\n template: '<button id=\"' + itemId + '\" class=\"e-tbar-btn e-tbtn-txt\" tabindex=\"-1\" aria-label=' +\n viewText + '></button>'\n };\n break;\n }\n case 'Details':\n item = {\n id: itemId, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DETAILS, overflow: 'Show', align: 'Right',\n text: itemText, showTextOn: 'Overflow'\n };\n break;\n case 'NewFolder':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_NEWFOLDER, showTextOn: mode };\n break;\n case 'Cut':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_CUT, showTextOn: mode };\n break;\n case 'Copy':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_COPY, showTextOn: mode };\n break;\n case 'Paste':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_PASTE, showTextOn: mode };\n break;\n case 'Delete':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DELETE, showTextOn: mode };\n break;\n case 'Rename':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_RENAME, showTextOn: mode };\n break;\n case 'Download':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_DOWNLOAD, showTextOn: mode };\n break;\n case 'SelectAll':\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, prefixIcon: CLS.ICON_SELECTALL, showTextOn: mode };\n break;\n default:\n item = { id: itemId, text: itemText, tooltipText: itemTooltip, template: '' };\n break;\n }\n if (this.parent.toolbarItems.length > 0 && propItem) {\n var mergedItems = __assign({}, item, propItem);\n items.push(mergedItems);\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n Toolbar.prototype.getItemModel = function (propItem) {\n var item = {};\n if (propItem.id) {\n item.id = propItem.id;\n }\n if (propItem.text) {\n item.text = propItem.text;\n }\n if (propItem.tooltipText) {\n item.tooltipText = propItem.tooltipText;\n }\n if (propItem.prefixIcon) {\n item.prefixIcon = propItem.prefixIcon;\n }\n if (propItem.cssClass) {\n item.cssClass = propItem.cssClass;\n }\n if (propItem.showTextOn !== 'Both') {\n item.showTextOn = propItem.showTextOn;\n }\n if (propItem.template) {\n item.template = propItem.template;\n }\n if (propItem.disabled) {\n item.disabled = propItem.disabled;\n }\n if (propItem.width !== 'auto') {\n item.width = propItem.width;\n }\n if (propItem.suffixIcon) {\n item.suffixIcon = propItem.suffixIcon;\n }\n if (propItem.align !== 'Left') {\n item.align = propItem.align;\n }\n if (propItem.overflow !== 'None') {\n item.overflow = propItem.overflow;\n }\n if (propItem.htmlAttributes) {\n item.htmlAttributes = propItem.htmlAttributes;\n }\n if (propItem.type !== 'Button') {\n item.type = propItem.type;\n }\n if (propItem.visible !== true) {\n item.visible = propItem.visible;\n }\n if (propItem.showAlwaysInPopup) {\n item.showAlwaysInPopup = propItem.showAlwaysInPopup;\n }\n if (propItem.tabIndex !== -1) {\n item.tabIndex = propItem.tabIndex;\n }\n return item;\n };\n Toolbar.prototype.getId = function (id) {\n return this.parent.element.id + '_tb_' + id.toLowerCase();\n };\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.showPaste, this.showPaste, this);\n this.parent.on(events.hidePaste, this.hidePaste, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sortByChange, this.updateSortByButton, this);\n };\n Toolbar.prototype.reRenderToolbar = function (e) {\n var _this = this;\n var itemsToProcess = [];\n if (this.parent.toolbarItems.length > 0) {\n itemsToProcess = this.parent.toolbarItems.map(function (item) {\n return item.name;\n });\n }\n else if (e.newProp.toolbarSettings.items !== undefined) {\n itemsToProcess = e.newProp.toolbarSettings.items.map(function (item) {\n return item.trim();\n });\n }\n if (itemsToProcess.length > 0) {\n this.items = this.toolbarItemData(this.getItems(itemsToProcess));\n var eventArgs = { items: this.items };\n this.parent.trigger('toolbarCreate', eventArgs, function (toolbarCreateArgs) {\n if (_this.buttonObj) {\n _this.buttonObj.destroy();\n }\n if (_this.layoutBtnObj) {\n _this.layoutBtnObj.destroy();\n }\n _this.items = toolbarCreateArgs.items;\n _this.toolbarObj.items = _this.items;\n _this.toolbarObj.dataBind();\n _this.toolbarCreateHandler();\n });\n }\n };\n Toolbar.prototype.onSelectionChanged = function () {\n this.hideStatus();\n this.hideItems(this.single, true);\n this.hideItems(this.selection, false);\n if (this.parent.selectedItems.length === 1) {\n this.hideItems(this.single, false);\n this.hideItems(this.selection, true);\n }\n else if (this.parent.selectedItems.length > 1) {\n this.hideItems(this.multiple, false);\n this.hideItems(this.selection, true);\n }\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (this.parent.selectedItems.length > 0 && ele && !this.parent.enableVirtualization) {\n var txt = void 0;\n if (this.parent.selectedItems.length === 1) {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Item-Selection');\n }\n else {\n txt = this.parent.selectedItems.length + ' ' + getLocaleText(this.parent, 'Items-Selection');\n }\n select('.e-tbar-btn-text', ele).textContent = txt;\n this.toolbarObj.hideItem(ele.parentElement, false);\n }\n };\n Toolbar.prototype.hideItems = function (tools, toHide) {\n for (var i = 0; i < tools.length; i++) {\n var ele = select('#' + this.getId(tools[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, toHide);\n }\n }\n };\n Toolbar.prototype.hideStatus = function () {\n var ele = select('#' + this.getId('Selection'), this.toolbarObj.element);\n if (ele) {\n this.toolbarObj.hideItem(ele.parentElement, true);\n }\n };\n Toolbar.prototype.showPaste = function () {\n this.hideItems(['Paste'], false);\n };\n Toolbar.prototype.hidePaste = function () {\n this.hideItems(['Paste'], true);\n };\n Toolbar.prototype.onLayoutChange = function () {\n if (this.layoutBtnObj) {\n this.layoutBtnObj.iconCss = this.parent.view === 'Details' ? CLS.ICON_GRID : CLS.ICON_LARGE;\n var items = this.layoutBtnObj.items;\n for (var itemCount = 0; itemCount < items.length; itemCount++) {\n if (items[itemCount].id === this.getPupupId('large')) {\n items[itemCount].iconCss = this.parent.view === 'LargeIcons' ? CLS.TB_OPTION_TICK : '';\n }\n else if (items[itemCount].id === this.getPupupId('details')) {\n items[itemCount].iconCss = this.parent.view === 'Details' ? CLS.TB_OPTION_TICK : '';\n }\n }\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.showPaste, this.showPaste);\n this.parent.off(events.hidePaste, this.hidePaste);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sortByChange, this.updateSortByButton);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (this.buttonObj) {\n this.buttonObj.cssClass = getCssClass(this.parent, CLS.ROOT_POPUP);\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.cssClass = getCssClass(this.parent, 'e-caret-hide ' + CLS.ROOT_POPUP);\n }\n break;\n case 'height':\n case 'width':\n this.toolbarObj.refreshOverflow();\n break;\n case 'toolbarSettings':\n case 'toolbarItems':\n this.reRenderToolbar(e);\n break;\n }\n }\n };\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n if (this.layoutBtnObj) {\n this.layoutBtnObj.destroy();\n }\n this.toolbarObj.destroy();\n this.parent.refreshLayout();\n };\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var i = 0; i < items.length; i++) {\n var ele = select('#' + this.getId(items[i]), this.parent.element);\n if (ele) {\n this.toolbarObj.enableItems(ele.parentElement, isEnable);\n }\n }\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, isNullOrUndefined, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createElement, selectAll } from '@syncfusion/ej2-base';\nimport * as CLS from '../base/classes';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.filemanagerInstance = instance;\n this.largeIconInstance = instance.largeiconsviewModule;\n }\n /**\n * Sets up UI virtualization for the large icon view.\n */\n Virtualization.prototype.setUIVirtualization = function () {\n // Get the current view data source\n var currentViewItems = this.largeIconInstance.items;\n // Get the first item in the data source\n var firstItem = currentViewItems.slice(0, 1);\n // Create a list element from the first item in the data source\n var listElements = ListBase.createListFromJson(createElement, firstItem, this.largeIconInstance.listObj);\n // Get the list items from the list element\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Append the list element to the large icon element\n this.largeIconInstance.element.appendChild(listElements);\n // Get the total number of items\n this.itemCount = this.getItemCount(Object.keys(this.largeIconInstance.allItems).length);\n // Remove the first child element from the large icon element\n this.largeIconInstance.element.firstChild.remove();\n // Set the items for the large icon view to the current view data source, limited to the number of items to display\n this.largeIconInstance.items = currentViewItems.slice(0, this.itemCount);\n };\n /**\n * Sets the height of the top and bottom elements that are used for virtualization.\n * These elements are used to give the appearance of an infinitely scrolling list.\n */\n Virtualization.prototype.setUlElementHeight = function () {\n // Calculate the number of items in the last row\n this.lastRowCount = (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount ?\n (this.largeIconInstance.allItems.length - this.itemCount) % this.rowItemCount : this.rowItemCount;\n // Create top and bottom elements\n this.topElement = this.filemanagerInstance.createElement('div');\n this.topElement.classList.add(\"e-virtual-top\");\n this.largeIconInstance.element.firstElementChild.insertBefore(this.topElement, this.largeIconInstance.element.firstElementChild.firstChild);\n this.bottomElement = this.filemanagerInstance.createElement('div');\n this.bottomElement.classList.add(\"e-virtual-bottom\");\n this.largeIconInstance.element.firstElementChild.insertBefore(this.bottomElement, null);\n // Get the margin value for list items\n var marginValue = parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-top'), 10) +\n parseInt(window.getComputedStyle(this.largeIconInstance.itemList[0]).getPropertyValue('margin-bottom'), 10);\n // Calculate the height of a single list item\n this.listItemHeight = this.largeIconInstance.itemList[0].getBoundingClientRect().height + marginValue;\n // Calculate the total height of the list\n this.totalHeight = (Object.keys(this.largeIconInstance.allItems).length / this.rowItemCount) * this.listItemHeight;\n // Set the initial height of the top and bottom elements\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n // Initialize the top and bottom element heights\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n // Initialize the list difference variable\n this.listDiff = 0;\n // Set the initial rendered count\n this.renderedCount = this.itemCount;\n };\n /**\n * Calculates the number of items to display in the list based on the available width and height.\n * @param dataSourceLength The length of the data source.\n * @returns The number of items to display.\n */\n Virtualization.prototype.getItemCount = function (dataSourceLength) {\n // Get the margin values for list items\n var widthMargin = parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-right'), 10) +\n parseInt(window.getComputedStyle(this.itemList[0]).getPropertyValue('margin-left'), 10);\n // Calculate the number of items that can fit in a single row\n this.rowItemCount = Math.floor(parseFloat(formatUnit(this.largeIconInstance.element.firstElementChild.clientWidth)) / (this.itemList[0].offsetWidth + widthMargin));\n // Calculate the number of items that can fit in the available height\n var itemCount = this.rowItemCount * (Math.round(parseFloat(formatUnit(this.largeIconInstance.element.clientHeight)) / this.itemList[0].offsetHeight));\n // If the calculated item count is greater than the data source length, set the item count to the data source length\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n /**\n * Wires or un wires the scroll event for the list element.\n * @param destroy - Set `true` to unwire the scroll event.\n */\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n // Wire the scroll event\n EventHandler.add(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll, this);\n }\n else {\n // Unwire the scroll event\n EventHandler.remove(this.largeIconInstance.element.firstElementChild, 'scroll', this.onVirtualUiScroll);\n }\n };\n /**\n * Handles the scroll event for the list element.\n * This method updates the top and bottom elements and the displayed items based on the scroll position.\n */\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n // Set the starting height to 0\n var startingHeight = 0;\n // Get the current scroll position\n this.scrollPosition = isNullOrUndefined(this.scrollPosition) ? 0 : this.scrollPosition;\n var scroll = this.getscrollerHeight(startingHeight);\n // Calculate the height of the top element\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n // Calculate the height of the bottom element\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n // If the scroll position is less than or equal to the total height, set the top and bottom element heights.\n // Otherwise, set the top element height to the total height and the bottom element height to 0.\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n // If the top element height has changed, update the top and bottom element heights and re-render the items.\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n // Check whether the scroll direction is upward or downward\n if (scroll > this.scrollPosition) {\n // Scrolling is upward\n var listDiff = Math.round(((this.topElementHeight / this.listItemHeight) - this.listDiff));\n this.onNormalScroll(listDiff, true);\n }\n else {\n // Scrolling is downward\n var listDiff = Math.round((this.listDiff - (this.topElementHeight / this.listItemHeight)));\n this.onNormalScroll(listDiff, false);\n }\n }\n // Update the list difference and scroll position variables\n this.listDiff = Math.round(this.topElementHeight / this.listItemHeight);\n this.scrollPosition = scroll;\n // Update the list of items and the items property of the largeIconInstance\n this.largeIconInstance.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, this.largeIconInstance.element));\n this.largeIconInstance.items = this.largeIconInstance.allItems.slice(this.renderedCount -\n this.itemCount, this.renderedCount);\n };\n /**\n * Calculates the current scroll position of the list element.\n * @param startingHeight The starting height from which to calculate the scroll position.\n * @returns The current scroll position.\n */\n Virtualization.prototype.getscrollerHeight = function (startingHeight) {\n // If the scroll position is less than or equal to the starting height, return 0.\n // Otherwise, return the scroll position minus the starting height.\n return ((this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight) <= 0) ? 0 :\n (this.largeIconInstance.element.firstElementChild.scrollTop - startingHeight);\n };\n /**\n * This method updates the displayed items and the selection based on the scroll direction.\n * @param listDiff The number of rows to update.\n * @param isScrollingDown If set to true, the scroll direction is downward.\n */\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n // Update the displayed items\n for (var i = 0; i < listDiff; i++) {\n this.updateUI(isScrollingDown);\n }\n };\n /**\n * Updates the items in the large icons view.\n * @param isScrollingDown If set to true, the scroll direction is downward.\n */\n Virtualization.prototype.updateUI = function (isScrollingDown) {\n var _this = this;\n if (isScrollingDown) {\n // Get the next batch of items to be displayed\n this.items = this.largeIconInstance.allItems.slice(this.renderedCount, this.renderedCount + this.rowItemCount);\n // If there are items to be displayed, create list elements for them and append them to the list\n if (this.items.length > 0) {\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n this.itemList.forEach(function (liEle) {\n _this.largeIconInstance.element.firstElementChild.insertBefore(liEle, _this.bottomElement);\n });\n // Update the rendered count variable\n this.renderedCount = (this.largeIconInstance.allItems.length >= this.renderedCount + this.rowItemCount) ?\n this.renderedCount + this.rowItemCount : this.renderedCount + this.lastRowCount;\n // Remove the first batch of items from the list\n for (var i = 0; i < this.rowItemCount; i++) {\n detach(this.topElement.nextElementSibling);\n }\n }\n }\n else {\n // Scrolling up\n var lastItemIndex = void 0;\n var isAllRendered = void 0;\n if (this.renderedCount === this.largeIconInstance.allItems.length) {\n // Set lastItemIndex to the last item in the last row\n lastItemIndex = this.renderedCount - (this.itemCount - this.rowItemCount + this.lastRowCount);\n // Set renderedCount to the total number of items that have been rendered, except for the items in the last row\n this.renderedCount = ((this.renderedCount - this.lastRowCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.lastRowCount);\n // Set isAllRendered to true to indicate that all items have been rendered\n isAllRendered = true;\n }\n else {\n // Set lastItemIndex to the last item in the current row\n lastItemIndex = this.renderedCount - this.itemCount;\n // Set renderedCount to the total number of items that have been rendered, except for the items in the current row\n this.renderedCount = ((this.renderedCount - this.rowItemCount) < this.itemCount) ?\n this.itemCount : (this.renderedCount - this.rowItemCount);\n }\n // Set startItemIndex to the first item in the current or previous row\n var startItemIndex = (lastItemIndex - this.rowItemCount > 0) ? lastItemIndex - this.rowItemCount : 0;\n // Set the items array to the items in the current or previous row\n this.items = this.largeIconInstance.allItems.slice(startItemIndex, lastItemIndex);\n if (this.items.length > 0) {\n // Create a list of elements from the items array\n var listElements = ListBase.createListFromJson(createElement, this.items, this.largeIconInstance.listObj);\n // Set the itemList array to the list items in the list elements\n this.itemList = Array.prototype.slice.call(selectAll('.' + CLS.LIST_ITEM, listElements));\n // Add the items to the beginning of the list\n for (var len = this.itemList.length; len > 0; len--) {\n this.largeIconInstance.element.firstElementChild.insertBefore(this.itemList[len - 1], this.topElement.nextElementSibling);\n }\n // Remove the last row of items from the list\n for (var i = 0; i < ((isAllRendered) ? this.lastRowCount : this.rowItemCount); i++) {\n detach(this.bottomElement.previousElementSibling);\n }\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n /**\n * Destroys the component.\n */\n Virtualization.prototype.destroy = function () {\n // If the file manager has already been destroyed, return immediately\n if (this.filemanagerInstance.isDestroyed) {\n return;\n }\n // If the large icon element has a child element, unwire the scroll event\n if (!isNullOrUndefined(this.largeIconInstance.element.firstElementChild)) {\n this.wireScrollEvent(true);\n }\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","import { TreeView as BaseTreeView } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined as isNOU, select, setValue, getValue, Draggable } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { createDialog } from '../pop-up/dialog';\nimport { updatePath, getPath, getDirectories } from '../common/utility';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getDirectoryPath, getModule, getPathId } from '../common/index';\nimport { copyFiles, cutFiles, removeActive, pasteHandler, getParentPath, readDropPath } from '../common/index';\nimport { hasEditAccess, createDeniedDialog, hasDownloadAccess, getAccessClass } from '../common/index';\n/**\n * NavigationPane module\n */\nvar NavigationPane = /** @class */ (function () {\n /**\n * Constructor for the TreeView module\n *\n * @param {IFileManager} parent - specifies the parent element.\n * @hidden\n */\n /* istanbul ignore next */\n function NavigationPane(parent) {\n this.removeNodes = [];\n this.moveNames = [];\n this.expandTree = false;\n this.isDrag = false;\n this.isPathDragged = false;\n this.isRenameParent = false;\n this.isRightClick = false;\n this.isSameNodeClicked = false;\n this.isNodeExpandCalled = false;\n this.renameParent = null;\n // Specifies the previously selected nodes in the treeview control.\n this.previousSelected = null;\n // Specifies whether the nodeClicked event of the treeview control is triggered or not.\n this.isNodeClickCalled = false;\n // Specifies whether to restrict node selection in the treeview control.\n this.restrictSelecting = false;\n this.parent = parent;\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftF10: 'shift+F10',\n f2: 'f2'\n };\n }\n NavigationPane.prototype.onInit = function () {\n if (!isNOU(this.treeObj)) {\n return;\n }\n // eslint-disable-next-line\n var rootData = getValue(this.parent.pathId[0], this.parent.feParent);\n setValue('_fm_icon', 'e-fe-folder', rootData);\n // eslint-disable-next-line\n var attr = {};\n var id = getValue('id', rootData);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(rootData)) {\n setValue('class', getAccessClass(rootData), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, rootData);\n }\n this.treeObj = new BaseTreeView({\n fields: {\n dataSource: [rootData], id: '_fm_id', parentID: '_fm_pId', expanded: '_fm_expanded', selected: '_fm_selected', text: 'name',\n hasChildren: 'hasChild', iconCss: '_fm_icon', htmlAttributes: '_fm_htmlAttr', tooltip: 'name'\n },\n enableHtmlSanitizer: this.parent.enableHtmlSanitizer,\n sortOrder: this.parent.navigationPaneSettings.sortOrder,\n nodeSelecting: this.onNodeSelecting.bind(this),\n nodeSelected: this.onNodeSelected.bind(this),\n nodeExpanding: this.onNodeExpand.bind(this),\n nodeClicked: this.onNodeClicked.bind(this),\n allowEditing: true,\n nodeEditing: this.onNodeEditing.bind(this),\n drawNode: this.onDrowNode.bind(this),\n enableRtl: this.parent.enableRtl,\n dataBound: this.addDragDrop.bind(this)\n });\n this.treeObj.isStringTemplate = true;\n this.treeObj.appendTo('#' + this.parent.element.id + CLS.TREE_ID);\n this.wireEvents();\n };\n NavigationPane.prototype.addDragDrop = function () {\n var _this = this;\n if (!this.parent.isMobile && this.treeObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.treeObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n dragTarget: '.' + CLS.FULLROW,\n distance: 5,\n dragArea: this.parent.element,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableTailMode: true,\n enableAutoScroll: true,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n }\n }\n };\n NavigationPane.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n if (!dragTarget.classList.contains(CLS.FULLROW)) {\n return null;\n }\n var dragLi = closest(dragTarget, 'li');\n this.parent.dragPath = '';\n this.parent.dragData = [];\n this.parent.activeElements = [];\n this.parent.activeElements = [dragLi];\n this.parent.dragNodes = [];\n getModule(this.parent, dragLi);\n // eslint-disable-next-line\n this.parent.dragData = this.getTreeData(dragLi);\n this.parent.dragPath = this.getDragPath(dragLi, this.parent.dragData[0].name);\n this.parent.dragNodes.push(this.parent.dragData[0].name);\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n NavigationPane.prototype.getDragPath = function (dragLi, text) {\n var path = this.getDropPath(dragLi, text);\n return getParentPath(path);\n };\n NavigationPane.prototype.getDropPath = function (node, text) {\n var id = node.getAttribute('data-id');\n var newText = this.parent.hasId ? id : text;\n return getPath(node, newText, this.parent.hasId);\n };\n NavigationPane.prototype.onDrowNode = function (args) {\n var eventArgs = {\n element: args.node,\n fileDetails: args.nodeData,\n module: 'NavigationPane'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n // eslint-disable-next-line\n NavigationPane.prototype.addChild = function (files, target, prevent) {\n // eslint-disable-next-line\n var directories = getDirectories(files);\n if (directories.length > 0 &&\n (directories[0].filterPath == null || this.getTreeData(target)[0].filterPath == null || directories[0].filterPath !== this.getTreeData(target)[0].filterPath)) {\n var length_1 = 0;\n // eslint-disable-next-line\n var folders = directories;\n while (length_1 < directories.length) {\n // eslint-disable-next-line\n folders[length_1]._fm_icon = 'e-fe-folder';\n // eslint-disable-next-line\n var attr = {};\n var id = getValue('id', folders[length_1]);\n if (!isNOU(id)) {\n setValue('data-id', id, attr);\n }\n if (!hasEditAccess(folders[length_1])) {\n setValue('class', getAccessClass(folders[length_1]), attr);\n }\n if (!isNOU(attr)) {\n setValue('_fm_htmlAttr', attr, folders[length_1]);\n }\n length_1++;\n }\n // eslint-disable-next-line\n this.treeObj.addNodes(directories, target, null, prevent);\n }\n };\n // Node Selecting event handler\n NavigationPane.prototype.onNodeSelecting = function (args) {\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent || this.restrictSelecting) {\n this.restrictSelecting = false;\n this.isNodeClickCalled = false;\n return;\n }\n if (!this.renameParent) {\n this.parent.activeModule = 'navigationpane';\n // eslint-disable-next-line\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n if (args.node.getAttribute('data-uid') !== this.parent.pathId[this.parent.pathId.length - 1] && !this.isRightClick && !this.isNodeClickCalled || this.isSameNodeClicked) {\n this.isNodeClickCalled = false;\n if (!this.isSameNodeClicked) {\n this.isSameNodeClicked = true;\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: args.isInteracted };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n if (!this.isRightClick) {\n var eventArgs = { cancel: false, fileDetails: nodeData[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n args.cancel = eventArgs.cancel;\n }\n if (args.cancel) {\n this.restrictSelecting = this.isNodeClickCalled ? this.previousSelected[0] !== args.node.getAttribute('data-uid') : false;\n this.isNodeClickCalled = true;\n this.isSameNodeClicked = false;\n this.previousSelected = this.treeObj.selectedNodes;\n this.treeObj.selectedNodes = [args.node.getAttribute(\"data-uid\")];\n }\n }\n else if (this.previousSelected[0] !== args.node.getAttribute('data-uid')) {\n var selecEventArgs = { action: args.action, fileDetails: nodeData[0], isInteracted: this.isNodeClickCalled };\n this.parent.trigger('fileSelect', selecEventArgs);\n }\n }\n };\n // Opens the folder while clicking open context menu item in the treeview.\n NavigationPane.prototype.openFileOnContextMenuClick = function (node) {\n var data = this.treeObj.getTreeData(node);\n // eslint-disable-next-line\n this.parent.selectedItems = [];\n this.parent.itemData = data;\n this.activeNode = node;\n this.parent.activeModule = 'navigationpane';\n var eventArgs = { cancel: false, fileDetails: data[0], module: 'NavigationPane' };\n this.parent.trigger('fileOpen', eventArgs);\n this.isNodeClickCalled = true;\n if (!eventArgs.cancel) {\n updatePath(node, this.parent.itemData[0], this.parent);\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.parent.visitedItem = node;\n this.isPathDragged = this.isRenameParent = this.isRightClick = false;\n this.treeObj.selectedNodes = [node.getAttribute('data-uid')];\n }\n };\n NavigationPane.prototype.onNodeSelected = function (args) {\n if (this.parent.breadcrumbbarModule && this.parent.breadcrumbbarModule.searchObj && !this.renameParent) {\n this.parent.breadcrumbbarModule.searchObj.element.value = '';\n this.parent.isFiltered = false;\n this.isNodeClickCalled = false;\n }\n this.parent.searchedItems = [];\n if (!args.isInteracted && !this.isRightClick && !this.isSameNodeClicked && !this.isPathDragged && !this.isRenameParent) {\n this.parent.pathId = getPathId(args.node);\n return;\n }\n this.activeNode = args.node;\n this.parent.activeModule = 'navigationpane';\n // eslint-disable-next-line\n var nodeData = this.getTreeData(getValue('id', args.nodeData));\n this.parent.selectedItems = [];\n this.parent.itemData = nodeData;\n var previousPath = this.parent.path;\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n if (!this.isRightClick && this.isSameNodeClicked && sNode.querySelector('.e-list-text').innerHTML !== this.parent.pathNames[this.parent.pathNames.length - 1]) {\n updatePath(args.node, this.parent.itemData[0], this.parent);\n }\n else {\n this.parent.pathId = getPathId(args.node);\n this.parent.visitedItem = args.node;\n }\n if (args.node.querySelector('.' + CLS.ICONS) && args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n this.expandNodeTarget = 'add';\n }\n if (previousPath !== this.parent.path) {\n if (!this.isRightClick && this.isSameNodeClicked) {\n read(this.parent, this.isPathDragged ? events.pasteEnd : events.pathChanged, this.parent.path);\n this.isNodeClickCalled = true;\n }\n this.parent.visitedItem = args.node;\n }\n this.isPathDragged = this.isRenameParent = this.isRightClick = this.isSameNodeClicked = false;\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n NavigationPane.prototype.onPathDrag = function (args) {\n this.isPathDragged = true;\n this.selectResultNode(args[0]);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpand = function (args) {\n if (!args.isInteracted && !this.isDrag) {\n return;\n }\n if (args.node.querySelector('.' + CLS.LIST_ITEM) === null) {\n var text = getValue('text', args.nodeData);\n var id = args.node.getAttribute('data-id');\n var isId = isNOU(id) ? false : true;\n var newText = isNOU(id) ? text : id;\n var path = getPath(args.node, newText, isId);\n this.expandNodeTarget = args.node.getAttribute('data-uid');\n this.parent.expandedId = this.expandNodeTarget;\n this.parent.itemData = this.getTreeData(getValue('id', args.nodeData));\n read(this.parent, events.nodeExpand, path);\n this.isNodeExpandCalled = true;\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeExpanded = function (args) {\n this.addChild(args.files, this.expandNodeTarget, false);\n this.parent.expandedId = null;\n this.isNodeExpandCalled = false;\n };\n NavigationPane.prototype.onNodeClicked = function (args) {\n this.parent.activeModule = 'navigationpane';\n this.previousSelected = this.treeObj.selectedNodes;\n this.activeNode = args.node;\n if ((args.event.which === 3) && (args.node.getAttribute('data-uid') !== this.treeObj.selectedNodes[0])) {\n this.isRightClick = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && this.parent.selectedItems.length !== 0) {\n this.parent.setProperties({ selectedItems: [] }, true);\n var layout = (this.parent.view === 'LargeIcons') ? 'largeiconsview' : 'detailsview';\n this.parent.notify(events.modelChanged, { module: layout, newProp: { selectedItems: [] } });\n }\n else if (args.node.getAttribute('data-uid') === this.treeObj.selectedNodes[0] && !this.isNodeClickCalled && !this.isNodeExpandCalled) {\n if (args.event.which === 3) {\n this.isRightClick = true;\n }\n this.isSameNodeClicked = true;\n this.isNodeClickCalled = true;\n this.treeObj.selectedNodes = [args.node.getAttribute('data-uid')];\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onNodeEditing = function (args) {\n if (!isNOU(args.innerHtml)) {\n args.cancel = true;\n }\n };\n NavigationPane.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n // eslint-disable-next-line\n var currFiles = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feFiles);\n if (this.expandNodeTarget === 'add') {\n var sNode = select('[data-uid=\"' + this.treeObj.selectedNodes[0] + '\"]', this.treeObj.element);\n var ul = (!isNOU(sNode)) ? select('.' + CLS.LIST_PARENT, sNode) : null;\n if (isNOU(ul)) {\n this.addChild(args.files, this.treeObj.selectedNodes[0], !this.expandTree);\n }\n this.expandNodeTarget = '';\n }\n this.expandTree = false;\n if (isNOU(currFiles)) {\n setValue(this.parent.pathId[this.parent.pathId.length - 1], args.files, this.parent.feFiles);\n }\n if (this.parent.uploadObj.directoryUpload && !(this.parent.hasId)) {\n this.updateTree(args);\n }\n };\n NavigationPane.prototype.updateTree = function (args) {\n if (this.treeObj) {\n var id = this.treeObj.selectedNodes[0];\n this.updateTreeNode(args, id);\n }\n };\n NavigationPane.prototype.updateTreeNode = function (args, id) {\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1 ? false : true;\n this.removeChildNodes(id);\n this.addChild(args.files, id, !toExpand);\n };\n NavigationPane.prototype.removeChildNodes = function (id) {\n var sNode = select('[data-uid=\"' + id + '\"]', this.treeObj.element);\n var parent = select('.' + CLS.LIST_PARENT, sNode);\n var childs = parent ? Array.prototype.slice.call(parent.children) : null;\n if (childs) {\n this.treeObj.removeNodes(childs);\n }\n };\n NavigationPane.prototype.onOpenEnd = function (args) {\n var sleId = this.parent.pathId[this.parent.pathId.length - 1];\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n this.treeObj.selectedNodes = [sleId];\n this.expandNodeTarget = 'add';\n this.onPathChanged(args);\n };\n NavigationPane.prototype.onOpenInit = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n if (args.target.querySelector('.' + CLS.ICONS)) {\n this.treeObj.expandAll(this.treeObj.selectedNodes);\n }\n }\n };\n NavigationPane.prototype.onInitialEnd = function (args) {\n this.onInit();\n this.addChild(args.files, getValue('_fm_id', args.cwd), false);\n };\n NavigationPane.prototype.onFinalizeEnd = function (args) {\n this.onInit();\n var id = getValue('_fm_id', args.cwd);\n this.removeChildNodes(id);\n this.addChild(args.files, id, false);\n this.treeObj.selectedNodes = [this.parent.pathId[this.parent.pathId.length - 1]];\n };\n NavigationPane.prototype.onCreateEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateItemData();\n }\n };\n NavigationPane.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateActionData();\n var name_1 = getValue('name', this.parent.itemData[0]);\n Delete(this.parent, [name_1], this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDeleteEnd = function (args) {\n if (this.parent.activeModule === 'navigationpane') {\n var selectedNode = this.treeObj.selectedNodes[0];\n var selcetedEle = select('[data-uid=\"' + selectedNode + '\"]', this.treeObj.element);\n var selectedNodeEle = closest(selcetedEle, '.' + CLS.LIST_PARENT).parentElement;\n this.treeObj.selectedNodes = [selectedNodeEle.getAttribute('data-uid')];\n this.treeObj.dataBind();\n }\n this.updateTree(args);\n };\n NavigationPane.prototype.onRefreshEnd = function (args) {\n this.updateTree(args);\n };\n NavigationPane.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'navigationpane') {\n this.updateRenameData();\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEndParent = function (args) {\n var id = this.renameParent ? this.renameParent : this.parent.pathId[this.parent.pathId.length - 1];\n this.expandTree = this.treeObj.expandedNodes.indexOf(this.treeObj.selectedNodes[0]) !== -1;\n this.updateTreeNode(args, id);\n this.parent.expandedId = null;\n if (this.renameParent) {\n this.renameParent = null;\n }\n else {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.renameText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('_fm_pId', 'equal', id, false));\n }\n }\n if (resultData.length > 0) {\n var id_1 = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id_1];\n this.treeObj.dataBind();\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onRenameEnd = function (args) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.updateTree(args);\n }\n else {\n // eslint-disable-next-line\n var data = this.treeObj.getTreeData();\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(data).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(data).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', this.parent.currentItemText, false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (resultData.length > 0) {\n this.renameParent = getValue(this.treeObj.fields.parentID, resultData[0]);\n this.parent.expandedId = this.renameParent;\n this.parent.itemData = this.getTreeData(this.renameParent);\n read(this.parent, events.renameEndParent, this.parent.filterPath.replace(/\\\\/g, '/'));\n }\n }\n };\n NavigationPane.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.addDragDrop();\n break;\n case 'navigationPaneSettings':\n read(this.parent, events.finalizeEnd, '/');\n if (e.oldProp.navigationPaneSettings.sortOrder !== e.newProp.navigationPaneSettings.sortOrder) {\n this.treeObj.sortOrder = e.newProp.navigationPaneSettings.sortOrder;\n }\n break;\n }\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDownLoadInit = function () {\n this.doDownload();\n };\n NavigationPane.prototype.onSelectionChanged = function (e) {\n this.treeObj.selectedNodes = [e.selectedNode];\n };\n NavigationPane.prototype.onClearPathInit = function (e) {\n this.removeChildNodes(e.selectedNode);\n };\n NavigationPane.prototype.onDragEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchDrag) {\n moveNames = this.getMoveNames(args.files, this.parent.isSearchDrag, this.parent.dragPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n // eslint-disable-next-line\n NavigationPane.prototype.getMoveNames = function (files, flag, path) {\n var moveNames = [];\n for (var i = 0; i < files.length; i++) {\n if (!files[i].isFile) {\n if (!this.parent.hasId) {\n var name_2 = (files[i].previousName);\n if (flag) {\n path = path + files[i].previousName;\n var index = path.lastIndexOf('/');\n name_2 = path.substring(index + 1);\n path = path.substring(0, index + 1);\n }\n // eslint-disable-next-line\n var resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', name_2, false));\n for (var j = 0; j < resultData.length; j++) {\n var fPath = getValue('filterPath', resultData[j]);\n fPath = fPath.replace(/\\\\/g, '/');\n if (fPath === path) {\n moveNames.push(getValue(this.treeObj.fields.id, resultData[j]));\n break;\n }\n }\n }\n }\n }\n return moveNames;\n };\n NavigationPane.prototype.onCutEnd = function (args) {\n var moveNames = [];\n if (this.parent.isPasteError || this.parent.isSearchCut) {\n this.moveNames = this.getMoveNames(args.files, this.parent.isSearchCut, this.parent.targetPath);\n }\n else {\n moveNames = this.moveNames;\n }\n this.treeObj.removeNodes(moveNames);\n };\n /* istanbul ignore next */\n // eslint-disable-next-line\n NavigationPane.prototype.selectResultNode = function (resultObj) {\n if (!this.parent.hasId) {\n var path = getValue('filterPath', resultObj);\n var itemname = getValue('name', resultObj);\n // eslint-disable-next-line\n var data = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', itemname, false));\n if (data.length > 0) {\n // eslint-disable-next-line\n var resultData = new DataManager(data).\n executeLocal(new Query().where('filterPath', 'equal', path, false));\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n this.treeObj.selectedNodes = [id];\n this.treeObj.dataBind();\n }\n }\n }\n else {\n var selectedNode = this.treeObj.getTreeData().filter(function (obj) { return obj.name === resultObj.name; })[0];\n this.treeObj.selectedNodes = [getValue('_fm_id', selectedNode)];\n this.treeObj.dataBind();\n }\n };\n NavigationPane.prototype.onDropPath = function (args) {\n this.onpasteEnd(args);\n this.selectResultNode(this.parent.dropData);\n this.parent.isDropEnd = !this.parent.isPasteError;\n };\n NavigationPane.prototype.onpasteEnd = function (args) {\n // eslint-disable-next-line\n var resultData = [];\n if (this.parent.hasId) {\n resultData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where('id', 'equal', getValue('id', args.cwd), false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(this.treeObj.getTreeData()).\n executeLocal(new Query().where(this.treeObj.fields.text, 'equal', getValue('name', args.cwd), false));\n if (nData.length > 0) {\n resultData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', getValue('filterPath', args.cwd), false));\n }\n }\n if (resultData.length > 0) {\n var id = getValue(this.treeObj.fields.id, resultData[0]);\n var toExpand = this.treeObj.expandedNodes.indexOf(id) === -1;\n this.removeChildNodes(id);\n this.addChild(args.files, id, toExpand);\n }\n this.parent.expandedId = null;\n this.onPathChanged(args);\n if (this.parent.isDragDrop) {\n this.checkDropPath(args);\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.checkDropPath = function (args) {\n if (this.parent.hasId) {\n this.parent.isDropEnd = !this.parent.isPasteError;\n readDropPath(this.parent);\n return;\n }\n if ((this.parent.dropPath.indexOf(getDirectoryPath(this.parent, args)) === -1)) {\n this.parent.isDropEnd = false;\n readDropPath(this.parent);\n }\n else {\n this.parent.isDropEnd = !this.parent.isPasteError;\n }\n };\n NavigationPane.prototype.onpasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.updateItemData();\n }\n this.moveNames = [];\n // eslint-disable-next-line\n var obj = this.parent.isDragDrop ? this.parent.dragData : this.parent.actionRecords;\n for (var i = 0; i < obj.length; i++) {\n if (getValue('isFile', obj[i]) === false) {\n this.moveNames.push(getValue('_fm_id', obj[i]));\n }\n }\n };\n NavigationPane.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.activeElements = [this.activeNode];\n }\n };\n NavigationPane.prototype.addEventListener = function () {\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.downloadInit, this.onDownLoadInit, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutEnd, this.onCutEnd, this);\n this.parent.on(events.pasteInit, this.onpasteInit, this);\n this.parent.on(events.nodeExpand, this.onNodeExpanded, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.updateTreeSelection, this.onSelectionChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.openEnd, this.onOpenEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onRenameEnd, this);\n this.parent.on(events.renameEndParent, this.onRenameEndParent, this);\n this.parent.on(events.clearPathInit, this.onClearPathInit, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.dragEnd, this.onDragEnd, this);\n this.parent.on(events.dragging, this.onDragging, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.pathDrag, this.onPathDrag, this);\n };\n NavigationPane.prototype.removeEventListener = function () {\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.downloadInit, this.onDownLoadInit);\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutEnd, this.onCutEnd);\n this.parent.off(events.pasteInit, this.onpasteInit);\n this.parent.off(events.updateTreeSelection, this.onSelectionChanged);\n this.parent.off(events.nodeExpand, this.onNodeExpanded);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.openEnd, this.onOpenEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onRenameEnd);\n this.parent.off(events.renameEndParent, this.onRenameEndParent);\n this.parent.off(events.clearPathInit, this.onClearPathInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.dragEnd, this.onDragEnd);\n this.parent.off(events.dragging, this.onDragging);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.pathDrag, this.onPathDrag);\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n // eslint-disable-next-line\n var dataobj = this.getTreeData(this.treeObj.selectedNodes[0]);\n this.parent.itemData = dataobj;\n }\n };\n // eslint-disable-next-line\n NavigationPane.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n var liEle = closest(args.target, 'li');\n this.parent.itemData = this.getTreeData(liEle.getAttribute('data-uid'));\n }\n };\n /* istanbul ignore next */\n NavigationPane.prototype.onDragging = function (args) {\n var ele = closest(args.target, 'li');\n if (ele.classList.contains('e-node-collapsed')) {\n this.isDrag = true;\n var level = parseInt(ele.getAttribute('aria-level'), 10);\n this.treeObj.expandAll([ele.getAttribute('data-uid')], level + 1);\n this.isDrag = false;\n }\n };\n NavigationPane.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n var dropLi = closest(args.target, 'li');\n this.parent.dropData = this.getTreeData(dropLi)[0];\n this.parent.dropPath = this.getDropPath(dropLi, getValue('name', this.parent.dropData));\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name.\n * @private\n */\n NavigationPane.prototype.getModuleName = function () {\n return 'navigationpane';\n };\n NavigationPane.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.treeObj) {\n this.unWireEvents();\n this.treeObj.destroy();\n }\n };\n NavigationPane.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.treeObj.element, {\n keyAction: this.keyDown.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n NavigationPane.prototype.unWireEvents = function () {\n this.keyboardModule.destroy();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.keyDown = function (e) {\n var action = e.action;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, [], this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n if (this.parent.pathId[0] !== this.activeNode.getAttribute('data-uid')) {\n this.updateItemData();\n if (!hasEditAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n else {\n this.removeNodes = [];\n createDialog(this.parent, 'Delete');\n }\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'shiftF10':\n this.updateItemData();\n if (!hasDownloadAccess(this.parent.itemData[0])) {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionDownload);\n return;\n }\n if (this.parent.selectedItems.length !== 0) {\n this.doDownload();\n }\n break;\n case 'f2':\n if (this.parent.selectedItems.length === 0) {\n // eslint-disable-next-line\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n if (!hasEditAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionEdit);\n }\n else {\n this.updateRenameData();\n createDialog(this.parent, 'Rename');\n }\n }\n break;\n }\n };\n // eslint-disable-next-line\n NavigationPane.prototype.getTreeData = function (args) {\n // eslint-disable-next-line\n var data = this.treeObj.getTreeData(args);\n for (var i = 0; i < data.length; i++) {\n if (isNOU(getValue('hasChild', data[i]))) {\n setValue('hasChild', false, data[i]);\n }\n }\n return data;\n };\n NavigationPane.prototype.updateRenameData = function () {\n this.updateItemData();\n this.parent.currentItemText = getValue('name', this.parent.itemData[0]);\n };\n NavigationPane.prototype.updateItemData = function () {\n // eslint-disable-next-line\n var data = this.getTreeData(this.treeObj.selectedNodes[0])[0];\n this.parent.itemData = [data];\n this.parent.isFile = false;\n };\n NavigationPane.prototype.updateActionData = function () {\n this.updateItemData();\n var newPath = getParentPath(this.parent.path);\n this.parent.setProperties({ path: newPath }, true);\n this.parent.pathId.pop();\n this.parent.pathNames.pop();\n };\n /* istanbul ignore next */\n NavigationPane.prototype.doDownload = function () {\n var newPath = getParentPath(this.parent.path);\n var itemId = this.treeObj.selectedNodes[0];\n var name = (itemId === this.parent.pathId[0]) ? '' : getValue('name', this.parent.itemData[0]);\n Download(this.parent, newPath, [name]);\n };\n return NavigationPane;\n}());\nexport { NavigationPane };\n","import { Grid, Resize, ContextMenu, Sort, VirtualScroll } from '@syncfusion/ej2-grids';\nimport { select, KeyboardEvents, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, Touch, setValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Internationalization, closest, Draggable, initializeCSPTemplate, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as CLS from '../base/classes';\nimport { createDialog, createImageDialog } from '../pop-up/dialog';\nimport { removeBlur, openAction, getImageUrl, fileType, getSortedData, getLocaleText, updateLayout } from '../common/utility';\nimport { createEmptyElement } from '../common/utility';\nimport { read, Download, GetDetails, Delete } from '../common/operations';\nimport { cutFiles, addBlur, openSearchFolder, copyFiles, removeActive, pasteHandler, getPathObject, getName } from '../common/index';\nimport { hasReadAccess, hasEditAccess, hasDownloadAccess, doRename, getAccessClass, createDeniedDialog, rename } from '../common/index';\nimport { createVirtualDragElement, dragStopHandler, dragStartHandler, draggingHandler, getModule, getFullPath } from '../common/index';\nimport { getDirectoryPath, updateRenamingData, getItemName, doDeleteFiles, doDownloadFiles } from '../common/index';\n/**\n * DetailsView module\n */\nvar DetailsView = /** @class */ (function () {\n /**\n * Constructor for the GridView module\n *\n * @param {FileManager} parent - specifies the parent.\n * @hidden\n */\n function DetailsView(parent) {\n this.isInteracted = true;\n this.interaction = true;\n this.isPasteOperation = false;\n this.isColumnRefresh = false;\n this.dragObj = null;\n this.startIndex = null;\n this.firstItemIndex = null;\n this.isSelectionUpdate = false;\n this.currentSelectedItem = [];\n this.count = 0;\n this.isRendered = true;\n this.isLoaded = false;\n this.isNameWidth = false;\n this.pasteOperation = false;\n this.uploadOperation = false;\n /* istanbul ignore next */\n // eslint:disable-next-line\n this.actionDivert = false;\n Grid.Inject(Resize, ContextMenu, Sort, VirtualScroll);\n this.parent = parent;\n this.element = select('#' + this.parent.element.id + CLS.GRID_ID, this.parent.element);\n this.addEventListener();\n this.keyConfigs = {\n altEnter: 'alt+enter',\n esc: 'escape',\n tab: 'tab',\n moveDown: 'downarrow',\n ctrlEnd: 'ctrl+end',\n ctrlHome: 'ctrl+home',\n ctrlDown: 'ctrl+downarrow',\n ctrlLeft: 'ctrl+leftarrow',\n ctrlRight: 'ctrl+rightarrow',\n shiftEnd: 'shift+end',\n shiftHome: 'shift+home',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n ctrlUp: 'ctrl+uparrow',\n csEnd: 'ctrl+shift+end',\n csHome: 'ctrl+shift+home',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n space: 'space',\n ctrlSpace: 'ctrl+space',\n shiftSpace: 'shift+space',\n csSpace: 'ctrl+shift+space',\n end: 'end',\n home: 'home',\n moveUp: 'uparrow',\n del: 'delete',\n ctrlX: this.parent.isMac ? 'cmd+x' : 'ctrl+x',\n ctrlC: this.parent.isMac ? 'cmd+c' : 'ctrl+c',\n ctrlV: this.parent.isMac ? 'cmd+v' : 'ctrl+v',\n ctrlShiftN: 'ctrl+shift+n',\n shiftdel: 'shift+delete',\n ctrlD: 'ctrl+d',\n f2: 'f2',\n ctrlA: 'ctrl+a',\n enter: 'enter'\n };\n }\n /* istanbul ignore next */\n DetailsView.prototype.render = function (args) {\n showSpinner(this.parent.element);\n if (this.parent.view === 'Details') {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n this.checkNameWidth();\n var columns = this.getColumns();\n var sortSettings = void 0;\n if (this.parent.isMobile) {\n sortSettings = [];\n }\n else {\n if (this.parent.sortOrder !== 'None') {\n sortSettings = [{ direction: this.parent.sortOrder, field: this.parent.sortBy }];\n }\n }\n this.gridObj = new Grid({\n dataSource: items,\n allowSorting: true,\n rowSelecting: this.onSelection.bind(this, 'select'),\n rowDeselecting: this.onSelection.bind(this, 'unselect'),\n rowSelected: this.onSelected.bind(this),\n rowDeselected: this.onDeSelection.bind(this),\n allowResizing: this.parent.detailsViewSettings.columnResizing,\n selectionSettings: {\n type: this.parent.allowMultiSelection ? 'Multiple' : 'Single',\n checkboxMode: 'ResetOnRowClick',\n persistSelection: (this.parent.enableVirtualization) ? true : false\n },\n enableRtl: this.parent.enableRtl,\n pageSettings: { pageSize: 20 },\n enableVirtualization: this.parent.enableVirtualization,\n enablePersistence: this.parent.enablePersistence,\n enableVirtualMaskRow: true,\n sortSettings: { allowUnsort: false, columns: sortSettings },\n columns: columns,\n recordDoubleClick: this.DblClickEvents.bind(this),\n beforeDataBound: this.onBeforeDataBound.bind(this),\n dataBound: this.onDataBound.bind(this),\n rowDataBound: this.onRowDataBound.bind(this),\n actionBegin: this.onActionBegin.bind(this),\n headerCellInfo: this.onHeaderCellInfo.bind(this),\n width: '100%',\n height: (this.parent.enableVirtualization) ? this.getGridHeight() : 'auto',\n beforeCopy: function (args) { args.cancel = true; },\n // eslint-disable-next-line\n load: function (args) {\n this.focusModule.destroy();\n },\n locale: this.parent.locale\n });\n if (this.parent.isReact) {\n this.gridObj.isReact = true;\n this.gridObj.portals = [];\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n this.gridObj.isStringTemplate = true;\n this.gridObj.appendTo('#' + this.parent.element.id + CLS.GRID_ID);\n this.wireEvents();\n this.adjustHeight();\n this.emptyArgs = args;\n }\n };\n DetailsView.prototype.reactTemplateRender = function (args) {\n this.parent[\"portals\"] = args;\n if (this.parent.portals && this.parent.toolbarModule && this.parent.toolbarModule.toolbarObj &&\n this.parent.toolbarModule.toolbarObj.portals) {\n this.parent[\"portals\"] = this.parent[\"portals\"].concat(this.parent.toolbarModule.toolbarObj.portals);\n }\n this.parent.notify('renderReactTemplate', this.parent[\"portals\"]);\n this.parent[\"renderReactTemplates\"]();\n };\n /**\n * Gets the grid height.\n *\n * @returns The grid height.\n * @private\n */\n DetailsView.prototype.getGridHeight = function () {\n // Get the content pane and breadcrumb bar elements\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n // The maximum height of the header is 36\n var headerMaxHeight = 36;\n // Calculate and return the grid height\n return (pane.offsetHeight - bar.offsetHeight - headerMaxHeight);\n };\n DetailsView.prototype.checkNameWidth = function () {\n var initialColumn = this.parent.detailsViewSettings.columns;\n this.isNameWidth = false;\n for (var i = 0; i < initialColumn.length; i++) {\n if (initialColumn[i].field === 'name') {\n this.isNameWidth = !isNOU(initialColumn[i].width);\n return;\n }\n }\n };\n DetailsView.prototype.adjustWidth = function (columns, fieldName) {\n if (this.isNameWidth && (fieldName === 'name')) {\n return;\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n var nameWidth = void 0;\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n nameWidth = (this.element.clientWidth <= 500) ? '120px' : 'auto';\n }\n else {\n nameWidth = (this.element.clientWidth <= 680) ? ((fieldName === 'name') ? '120px' : '180px') : 'auto';\n }\n columns[i].width = nameWidth;\n }\n }\n };\n DetailsView.prototype.getColumns = function () {\n var columns;\n if (this.parent.isMobile) {\n columns = [\n {\n field: 'name', headerText: getLocaleText(this.parent, 'Name'), width: 'auto', minWidth: 120, headerTextAlign: 'Left',\n template: initializeCSPTemplate(function (data) {\n return \"<div class=\\\"e-fe-text\\\">\" + data.name + \"</div><div class=\\\"e-fe-date\\\">\" + data._fm_modified + \"</div>' +\\n '<span class=\\\"e-fe-size\\\">\" + data.size + \"</span>\";\n })\n }\n ];\n }\n else {\n columns = extend([], this.parent.detailsViewSettings.columns, null, true);\n this.adjustWidth(columns, 'name');\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].headerText = getLocaleText(this.parent, columns[i].headerText);\n }\n }\n var iWidth = ((this.parent.isMobile || this.parent.isBigger) ? '54' : '46');\n var icon = {\n field: 'type', width: iWidth, minWidth: iWidth,\n template: initializeCSPTemplate(function (data) {\n return \"<span class=\\\"e-fe-icon \" + data._fm_iconClass + \"\\\"></span>\";\n }), allowResizing: false, allowSorting: true, customAttributes: { class: 'e-fe-grid-icon' },\n headerTemplate: initializeCSPTemplate(function () {\n return \"<span class=\\\"e-fe-icon e-fe-folder\\\"></span>\";\n })\n };\n columns.unshift(icon);\n if (this.parent.showItemCheckBoxes) {\n var cWidth = (this.parent.isBigger ? '36' : '26');\n var cBox = {\n type: 'checkbox', width: cWidth, minWidth: cWidth, customAttributes: { class: 'e-fe-checkbox' },\n allowResizing: false, allowSorting: false\n };\n if (this.parent.isMobile) {\n columns.push(cBox);\n }\n else {\n columns.unshift(cBox);\n }\n }\n for (var i = 0, len = columns.length; i < len; i++) {\n columns[i].disableHtmlEncode = !this.parent.enableHtmlSanitizer;\n }\n return columns;\n };\n DetailsView.prototype.adjustHeight = function () {\n if (!this.gridObj) {\n return;\n }\n var pane = select('#' + this.parent.element.id + CLS.CONTENT_ID, this.parent.element);\n var bar = select('#' + this.parent.element.id + CLS.BREADCRUMBBAR_ID, this.parent.element);\n var gridHeader = select('.' + CLS.GRID_HEADER, this.parent.element);\n var height = (pane.offsetHeight - bar.offsetHeight - gridHeader.offsetHeight);\n this.gridObj.height = height;\n this.gridObj.dataBind();\n };\n DetailsView.prototype.renderCheckBox = function () {\n this.gridObj.columns = this.getColumns();\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n };\n DetailsView.prototype.onRowDataBound = function (args) {\n var td = select('.e-fe-grid-name', args.row);\n if (!td) {\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'name') {\n td = args.row.children[this.parent.allowMultiSelection ? (i + 2) : (i + 1)];\n break;\n }\n }\n }\n if (td) {\n td.setAttribute('title', getValue('name', args.data));\n }\n if (this.parent.isLayoutChange && this.parent.isCut && this.parent.fileAction === 'move' &&\n this.parent.selectedNodes && this.parent.selectedNodes.length !== 0) {\n if (this.parent.selectedNodes.indexOf(getValue('name', args.data)) !== -1) {\n addBlur(args.row);\n }\n }\n if (!this.parent.showFileExtension && getValue('isFile', args.data)) {\n var textEle = args.row.querySelector('.e-fe-text');\n if (textEle) {\n var name_1 = getValue('name', args.data);\n var type = getValue('type', args.data);\n textEle.innerHTML = name_1.substr(0, name_1.length - type.length);\n }\n }\n if (getValue('size', args.data) !== undefined && args.row.querySelector('.e-fe-size')) {\n var sizeEle = args.row.querySelector('.e-fe-size');\n var modifiedSize = void 0;\n if (!getValue('isFile', args.data)) {\n modifiedSize = '';\n }\n else {\n var sizeValue = getValue('size', args.data);\n var intl = new Internationalization(this.parent.locale);\n var sizeFormat = void 0;\n var columns = this.parent.detailsViewSettings.columns;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'size') {\n sizeFormat = !isNullOrUndefined(columns[i].format) ? columns[i].format.toString() : 'n';\n break;\n }\n }\n var value = intl.formatNumber((sizeValue / 1024), { format: sizeFormat });\n modifiedSize = value + ' ' + getLocaleText(this.parent, 'KB');\n }\n sizeEle.innerHTML = modifiedSize;\n }\n if (this.parent.isMobile) {\n if (getValue('_fm_modified', args.data) !== undefined && args.row.querySelector('.e-fe-date')) {\n var dateEle = args.row.querySelector('.e-fe-date');\n var intl = new Internationalization(this.parent.locale);\n var columns = this.parent.detailsViewSettings.columns;\n // eslint-disable-next-line\n var format = void 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === 'dateModified') {\n format = columns[i].format;\n break;\n }\n }\n var formattedString = intl.formatDate(new Date(getValue('_fm_modified', args.data)), format);\n dateEle.innerHTML = formattedString;\n }\n }\n var checkWrap = args.row.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n if (!hasEditAccess(args.data)) {\n args.row.className += ' ' + getAccessClass(args.data);\n }\n var eventArgs = {\n element: args.row,\n fileDetails: args.data,\n module: 'DetailsView'\n };\n this.parent.trigger('fileLoad', eventArgs);\n };\n DetailsView.prototype.onActionBegin = function (args) {\n if (args.requestType === 'sorting') {\n this.parent.setProperties({ sortOrder: args.direction }, true);\n this.parent.setProperties({ sortBy: args.columnName }, true);\n if (this.parent.selectedItems.length !== 0) {\n this.sortItem = true;\n var rows = this.gridObj.getSelectedRowIndexes();\n var len = rows.length;\n this.sortSelectedNodes = [];\n while (len > 0) {\n // eslint-disable-next-line\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.sortSelectedNodes.push(getValue(this.parent.hasId ? 'id' : 'name', data));\n len--;\n }\n }\n this.parent.notify(events.sortByChange, {});\n }\n };\n DetailsView.prototype.onHeaderCellInfo = function (args) {\n var checkWrap = args.node.querySelector('.' + CLS.CB_WRAP);\n if (checkWrap) {\n checkWrap.classList.add('e-small');\n }\n };\n DetailsView.prototype.onBeforeDataBound = function (args) {\n showSpinner(this.parent.element);\n // eslint-disable-next-line\n var items = getSortedData(this.parent, (this.parent.enableVirtualization) ? args.result : this.gridObj.dataSource);\n args.result = items;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDataBound = function () {\n this.createDragObj();\n if ((this.parent.selectedItems.length !== 0 && !this.parent.enableVirtualization) ||\n ((this.parent.selectedItems.length !== 0 && this.parent.enableVirtualization &&\n this.element.querySelector('.e-content').scrollTop == 0))) {\n this.selectRecords(this.parent.selectedItems);\n }\n if (this.isPasteOperation === true) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.parent.pasteNodes);\n this.isPasteOperation = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.parent.createdItem) {\n this.selectRecords([getValue(this.parent.hasId ? 'id' : 'name', this.parent.createdItem)]);\n this.parent.createdItem = null;\n }\n if (this.parent.layoutSelectedItems.length) {\n this.selectRecords(this.parent.layoutSelectedItems);\n }\n if (this.parent.renamedItem) {\n this.addSelection(this.parent.renamedItem);\n this.parent.renamedItem = null;\n }\n if (this.sortItem === true) {\n this.selectRecords(this.sortSelectedNodes);\n this.sortItem = false;\n }\n if (this.isSelectionUpdate) {\n if (!this.isColumnRefresh) {\n this.selectRecords(this.currentSelectedItem);\n this.isSelectionUpdate = false;\n }\n else {\n this.isColumnRefresh = false;\n }\n }\n if (this.uploadOperation === true) {\n this.count++;\n this.selectRecords(this.parent.uploadItem);\n if (this.count === this.parent.uploadItem.length) {\n this.uploadOperation = false;\n this.parent.uploadItem = [];\n }\n }\n if (this.gridObj.currentViewData.length * this.gridObj.getRowHeight() < this.gridObj.height) {\n var hdTable = this.gridObj.getHeaderContent();\n hdTable.style.paddingRight = '';\n hdTable.style.paddingLeft = '';\n var hdContent = select('.e-headercontent', hdTable);\n hdContent.style.borderRightWidth = '0';\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.style.overflowY = '';\n cnTable.classList.add('e-scrollShow');\n }\n else {\n var hdTable = this.gridObj.getHeaderContent();\n if (!this.parent.enableRtl) {\n hdTable.style.paddingRight = '16px';\n }\n else {\n hdTable.style.paddingLeft = '16px';\n }\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n cnTable.classList.remove('e-scrollShow');\n }\n this.isRendered = true;\n this.parent.isLayoutChange = false;\n hideSpinner(this.parent.element);\n this.checkEmptyDiv(this.emptyArgs);\n this.isInteracted = this.isLoaded ? true : this.isInteracted;\n this.isLoaded = false;\n };\n DetailsView.prototype.selectRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n var sRecords = [];\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var node = this.parent.hasId ? getValue('id', gridRecords[i]) : getName(this.parent, gridRecords[i]);\n if (nodes.indexOf(node) !== -1) {\n sRecords.push(i);\n }\n else if (!this.parent.showFileExtension && node.includes('.')) {\n var Str2 = node.split('.').slice(0, -1).join('.');\n if (nodes.indexOf(Str2) !== -1) {\n sRecords.push(i);\n }\n }\n }\n if (sRecords.length !== 0) {\n this.gridObj.selectRows(sRecords);\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.addSelection = function (data) {\n // eslint-disable-next-line\n var items = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\n var rData = [];\n if (this.parent.hasId) {\n rData = new DataManager(items).\n executeLocal(new Query().where('id', 'equal', this.parent.renamedId, false));\n }\n else {\n // eslint-disable-next-line\n var nData = new DataManager(items).\n executeLocal(new Query().where('name', 'equal', getValue('name', data), false));\n if (nData.length > 0) {\n rData = new DataManager(nData).\n executeLocal(new Query().where('filterPath', 'equal', this.parent.filterPath, false));\n }\n }\n if (rData.length > 0) {\n var index = items.indexOf(rData[0]);\n this.gridObj.selectRows([index]);\n }\n };\n DetailsView.prototype.onSortColumn = function () {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortModule.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n else {\n // eslint-disable-next-line\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n if (this.element.querySelector('.e-content').scrollTop !== 0) {\n this.gridObj.freezeRefresh();\n }\n };\n DetailsView.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() && e.module !== 'common') {\n /* istanbul ignore next */\n return;\n }\n for (var _i = 0, _a = Object.keys(e.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.createDragObj();\n break;\n case 'height':\n this.adjustHeight();\n break;\n case 'detailsViewSettings':\n if (!isNullOrUndefined(this.gridObj)) {\n this.checkNameWidth();\n var columns = this.getColumns();\n this.gridObj.columns = columns;\n this.gridObj.allowResizing = this.parent.detailsViewSettings.columnResizing;\n this.gridObj.dataBind();\n this.gridObj.refreshColumns();\n }\n break;\n case 'selectedItems':\n this.interaction = false;\n if (this.parent.selectedItems.length !== 0) {\n if (!this.parent.allowMultiSelection) {\n var slItems = this.parent.selectedItems.slice(this.parent.selectedItems.length - 1);\n this.parent.setProperties({ selectedItems: slItems }, true);\n }\n this.selectRecords(this.parent.selectedItems);\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n }\n else if (!isNOU(this.gridObj)) {\n this.gridObj.clearSelection();\n this.interaction = true;\n }\n break;\n case 'showFileExtension':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'showHiddenItems':\n read(this.parent, events.pathChanged, this.parent.path);\n break;\n case 'allowMultiSelection':\n if (!isNullOrUndefined(this.gridObj)) {\n this.currentSelectedItem = this.parent.selectedItems;\n this.gridObj.selectionSettings.type = e.newProp.allowMultiSelection ? 'Multiple' : 'Single';\n this.isSelectionUpdate = true;\n this.renderCheckBox();\n }\n break;\n case 'view':\n updateLayout(this.parent, 'Details');\n break;\n case 'width':\n this.onDetailsResize();\n }\n }\n };\n DetailsView.prototype.onPathChanged = function (args) {\n this.parent.isCut = false;\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() === '' && this.gridObj) {\n this.parent.searchedItems = [];\n if (!this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n else {\n this.updatePathColumn();\n }\n }\n removeBlur(this.parent);\n if (this.parent.view === 'Details') {\n /* istanbul ignore next */\n this.isInteracted = false;\n showSpinner(this.parent.element);\n this.parent.setProperties({ selectedItems: [] }, true);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.gridObj.freezeRefresh();\n if (this.parent.isReact) {\n this.gridObj.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n }\n this.emptyArgs = args;\n };\n DetailsView.prototype.updatePathColumn = function () {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && columnData[len - 1].field !== 'filterPath' && !this.parent.isMobile) {\n var pathColumn = {\n field: 'filterPath', headerText: getLocaleText(this.parent, 'Path'), minWidth: 180, width: 'auto'\n };\n this.gridObj.columns.push(pathColumn);\n this.adjustWidth(this.gridObj.columns, 'filterPath');\n this.adjustWidth(this.gridObj.columns, 'name');\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n };\n DetailsView.prototype.checkEmptyDiv = function (args) {\n // eslint-disable-next-line\n var items = getSortedData(this.parent, args.files);\n if (items.length === 0 && !isNOU(this.element.querySelector('.' + CLS.GRID_VIEW))) {\n createEmptyElement(this.parent, this.element, args);\n }\n else if (items.length !== 0 && this.element.querySelector('.' + CLS.EMPTY)) {\n if (this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY)) {\n var emptyDiv = this.element.querySelector('.' + CLS.GRID_VIEW).querySelector('.' + CLS.EMPTY);\n this.element.querySelector('.' + CLS.GRID_VIEW).removeChild(emptyDiv);\n }\n else {\n this.element.removeChild(this.element.querySelector('.' + CLS.EMPTY));\n }\n }\n };\n DetailsView.prototype.onOpenInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n // eslint-disable-next-line\n var data = this.gridObj.getSelectedRecords()[0];\n this.openContent(data);\n }\n };\n DetailsView.prototype.DblClickEvents = function (args) {\n this.gridObj.selectRows([args.rowIndex]);\n // eslint-disable-next-line\n var data;\n if (args.rowData) {\n data = JSON.parse(JSON.stringify(args.rowData));\n this.openContent(data);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.openContent = function (data) {\n var _this = this;\n if (!hasReadAccess(data)) {\n createDeniedDialog(this.parent, data, events.permissionRead);\n return;\n }\n var eventArgs = { cancel: false, fileDetails: data, module: 'DetailsView' };\n this.parent.trigger('fileOpen', eventArgs, function (fileOpenArgs) {\n if (!fileOpenArgs.cancel) {\n var name_2 = getValue('name', data);\n if (getValue('isFile', data)) {\n var icon = fileType(data);\n if (icon === CLS.ICON_IMAGE) {\n var imgUrl = getImageUrl(_this.parent, data);\n createImageDialog(_this.parent, name_2, imgUrl);\n }\n }\n else {\n var val = _this.parent.breadcrumbbarModule.searchObj.element.value;\n if (val === '' && !_this.parent.isFiltered) {\n var id = getValue('id', data);\n _this.parent.oldPath = _this.parent.path;\n var newPath = _this.parent.path + (isNOU(id) ? name_2 : id) + '/';\n _this.parent.setProperties({ path: newPath }, true);\n _this.parent.pathNames.push(name_2);\n _this.parent.pathId.push(getValue('_fm_id', data));\n _this.parent.itemData = [data];\n openAction(_this.parent);\n }\n else {\n openSearchFolder(_this.parent, data);\n }\n _this.parent.isFiltered = false;\n }\n _this.element.focus();\n if (_this.parent.enableVirtualization) {\n _this.parent.element.querySelector('#' + _this.parent.element.id + CLS.IMG_DIALOG_ID).focus();\n }\n }\n });\n };\n /* istanbul ignore next */\n DetailsView.prototype.onLayoutChange = function (args) {\n if (this.parent.view === 'Details') {\n if (this.parent.enableVirtualization) {\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.isLoaded = true;\n }\n if (this.parent.isFiltered) {\n this.updatePathColumn();\n this.parent.setProperties({ selectedItems: [] }, true);\n }\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.parent.notify(events.hideLayout, {});\n this.gridObj.element.classList.remove(CLS.DISPLAY_NONE);\n this.isInteracted = false;\n this.gridObj.clearSelection();\n if (this.parent.breadcrumbbarModule.searchObj.element.value.trim() !== '') {\n this.onSearchFiles(args);\n }\n this.adjustHeight();\n if (this.gridObj.sortSettings.columns.length > 0 && this.gridObj.sortSettings.columns[0].field !== this.parent.sortBy) {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn(this.parent.sortBy, this.parent.sortOrder);\n }\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSearchFiles = function (args) {\n if (this.parent.view === 'Details') {\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (!this.parent.isLayoutChange) {\n this.parent.layoutSelectedItems = [];\n }\n this.updatePathColumn();\n this.parent.searchedItems = args.files;\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.removePathColumn = function (isRefresh) {\n var len = this.gridObj.columns.length;\n var columnData = JSON.parse(JSON.stringify(this.gridObj.columns));\n if (columnData[len - 1].field && (columnData[len - 1].field === 'filterPath')) {\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.gridObj.sortSettings.columns[0]) && this.gridObj.sortSettings.columns[0].field === 'filterPath') {\n if (this.parent.sortOrder !== 'None') {\n this.gridObj.sortColumn('name', this.parent.sortOrder);\n }\n else {\n // eslint-disable-next-line\n this.gridObj.dataSource = getSortedData(this.parent, this.gridObj.dataSource);\n }\n this.parent.notify(events.sortByChange, {});\n }\n this.gridObj.columns.pop();\n if (!isRefresh) {\n this.isColumnRefresh = true;\n this.gridObj.refreshColumns();\n }\n }\n };\n DetailsView.prototype.onFinalizeEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n if (!this.gridObj) {\n this.render(args);\n }\n else {\n this.onPathChanged(args);\n }\n };\n DetailsView.prototype.onCreateEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n };\n DetailsView.prototype.onRenameInit = function () {\n if (this.parent.activeModule === 'detailsview' && this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n }\n };\n DetailsView.prototype.onSelectedData = function () {\n if (this.parent.activeModule === 'detailsview') {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n };\n DetailsView.prototype.onDeleteInit = function () {\n if (this.parent.activeModule === 'detailsview') {\n Delete(this.parent, this.parent.selectedItems, this.parent.path, 'delete');\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDeleteEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.onPathChanged(args);\n this.parent.setProperties({ selectedItems: [] }, true);\n };\n DetailsView.prototype.onRefreshEnd = function (args) {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.isInteracted = false;\n this.removePathColumn(false);\n this.gridObj.dataSource = getSortedData(this.parent, args.files);\n this.emptyArgs = args;\n };\n DetailsView.prototype.onHideLayout = function () {\n if (this.parent.view !== 'Details' && this.gridObj) {\n this.gridObj.element.classList.add(CLS.DISPLAY_NONE);\n }\n };\n DetailsView.prototype.onSelectAllInit = function () {\n if (this.parent.view === 'Details') {\n this.isInteracted = false;\n if (this.parent.allowMultiSelection) {\n this.gridObj.selectionModule.selectRowsByRange(0, this.gridObj.getRows().length);\n }\n else {\n this.gridObj.selectRow(this.gridObj.getRows().length - 1);\n }\n this.isInteracted = true;\n this.interaction = true;\n }\n };\n DetailsView.prototype.onClearAllInit = function () {\n if (this.parent.view === 'Details') {\n this.removeSelection();\n this.interaction = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelectionChanged = function () {\n removeClass([this.element], CLS.HEADER_CHECK);\n if (this.parent.selectedItems.length > 0) {\n addClass([this.element], CLS.HEADER_CHECK);\n }\n };\n DetailsView.prototype.onLayoutRefresh = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.adjustHeight();\n };\n DetailsView.prototype.onBeforeRequest = function () {\n this.isRendered = false;\n };\n DetailsView.prototype.onAfterRequest = function () {\n this.isRendered = true;\n };\n DetailsView.prototype.onUpdateSelectionData = function () {\n if (this.parent.view !== 'Details') {\n return;\n }\n this.parent.itemData = this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.addEventListener = function () {\n this.parent.on(events.finalizeEnd, this.onFinalizeEnd, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.layoutChange, this.onLayoutChange, this);\n this.parent.on(events.pathChanged, this.onPathChanged, this);\n this.parent.on(events.createEnd, this.onCreateEnd, this);\n this.parent.on(events.dropInit, this.onDropInit, this);\n this.parent.on(events.detailsInit, this.onDetailsInit, this);\n this.parent.on(events.refreshEnd, this.onRefreshEnd, this);\n this.parent.on(events.search, this.onSearchFiles, this);\n this.parent.on(events.methodCall, this.onMethodCall, this);\n this.parent.on(events.actionFailure, this.onActionFailure, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.deleteInit, this.onDeleteInit, this);\n this.parent.on(events.deleteEnd, this.onDeleteEnd, this);\n this.parent.on(events.selectedData, this.onSelectedData, this);\n this.parent.on(events.renameInit, this.onRenameInit, this);\n this.parent.on(events.renameEnd, this.onPathChanged, this);\n this.parent.on(events.openInit, this.onOpenInit, this);\n this.parent.on(events.sortColumn, this.onSortColumn, this);\n this.parent.on(events.openEnd, this.onPathChanged, this);\n this.parent.on(events.filterEnd, this.onPathChanged, this);\n this.parent.on(events.pasteInit, this.onPasteInit, this);\n this.parent.on(events.hideLayout, this.onHideLayout, this);\n this.parent.on(events.selectAllInit, this.onSelectAllInit, this);\n this.parent.on(events.clearAllInit, this.onClearAllInit, this);\n this.parent.on(events.pathColumn, this.onPathColumn, this);\n this.parent.on(events.selectionChanged, this.onSelectionChanged, this);\n this.parent.on(events.beforeRequest, this.onBeforeRequest, this);\n this.parent.on(events.afterRequest, this.onAfterRequest, this);\n this.parent.on(events.pasteEnd, this.onpasteEnd, this);\n this.parent.on(events.cutCopyInit, this.oncutCopyInit, this);\n this.parent.on(events.menuItemData, this.onMenuItemData, this);\n this.parent.on(events.resizeEnd, this.onDetailsResizeHandler, this);\n this.parent.on(events.splitterResize, this.onDetailsResize, this);\n this.parent.on(events.layoutRefresh, this.onLayoutRefresh, this);\n this.parent.on(events.dropPath, this.onDropPath, this);\n this.parent.on(events.updateSelectionData, this.onUpdateSelectionData, this);\n };\n DetailsView.prototype.removeEventListener = function () {\n this.parent.off(events.finalizeEnd, this.onFinalizeEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.layoutChange, this.onLayoutChange);\n this.parent.off(events.pathChanged, this.onPathChanged);\n this.parent.off(events.pasteInit, this.onPasteInit);\n this.parent.off(events.createEnd, this.onCreateEnd);\n this.parent.off(events.refreshEnd, this.onRefreshEnd);\n this.parent.off(events.search, this.onSearchFiles);\n this.parent.off(events.methodCall, this.onMethodCall);\n this.parent.off(events.actionFailure, this.onActionFailure);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.renameInit, this.onRenameInit);\n this.parent.off(events.renameEnd, this.onPathChanged);\n this.parent.off(events.filterEnd, this.onPathChanged);\n this.parent.off(events.openInit, this.onOpenInit);\n this.parent.off(events.sortColumn, this.onSortColumn);\n this.parent.off(events.openEnd, this.onPathChanged);\n this.parent.off(events.hideLayout, this.onHideLayout);\n this.parent.off(events.selectAllInit, this.onSelectAllInit);\n this.parent.off(events.clearAllInit, this.onClearAllInit);\n this.parent.off(events.deleteInit, this.onDeleteInit);\n this.parent.off(events.deleteEnd, this.onDeleteEnd);\n this.parent.off(events.pathColumn, this.onPathColumn);\n this.parent.off(events.selectionChanged, this.onSelectionChanged);\n this.parent.off(events.beforeRequest, this.onBeforeRequest);\n this.parent.off(events.afterRequest, this.onAfterRequest);\n this.parent.off(events.pasteEnd, this.onpasteEnd);\n this.parent.off(events.cutCopyInit, this.oncutCopyInit);\n this.parent.off(events.dropInit, this.onDropInit);\n this.parent.off(events.selectedData, this.onSelectedData);\n this.parent.off(events.detailsInit, this.onDetailsInit);\n this.parent.off(events.menuItemData, this.onMenuItemData);\n this.parent.off(events.resizeEnd, this.onDetailsResizeHandler);\n this.parent.off(events.splitterResize, this.onDetailsResize);\n this.parent.off(events.layoutRefresh, this.onLayoutRefresh);\n this.parent.off(events.dropPath, this.onDropPath);\n this.parent.off(events.updateSelectionData, this.onUpdateSelectionData);\n };\n DetailsView.prototype.onActionFailure = function () { this.interaction = true; };\n // eslint-disable-next-line\n DetailsView.prototype.onMenuItemData = function (args) {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = [this.gridObj.getRowInfo(args.target).rowData];\n }\n };\n DetailsView.prototype.onPasteInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.itemData = (this.parent.folderPath !== '') ? this.gridObj.getSelectedRecords() :\n [getPathObject(this.parent)];\n }\n };\n DetailsView.prototype.onDetailsInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n }\n else {\n this.parent.itemData = [getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent)];\n }\n }\n };\n DetailsView.prototype.dragHelper = function (args) {\n var dragTarget = args.sender.target;\n var dragLi = dragTarget.closest('tr.e-row');\n if (!dragLi) {\n return null;\n }\n var name;\n if (dragLi.getElementsByClassName('e-fe-text')[0]) {\n name = dragLi.getElementsByClassName('e-fe-text')[0].innerText;\n }\n else if (dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling) {\n name = dragLi.getElementsByClassName('e-rowcell e-templatecell')[0].nextElementSibling.innerText;\n }\n if (dragLi && !dragLi.querySelector('.e-active')) {\n this.selectRecords([name]);\n }\n getModule(this.parent, dragLi);\n this.parent.activeElements = [];\n this.parent.dragData = [];\n // eslint-disable-next-line\n this.parent.dragData = this.gridObj.getSelectedRecords();\n var dragRow;\n if (this.parent.dragData.length === 0 && dragLi) {\n dragRow = this.gridObj.getRowInfo(dragLi);\n }\n if (dragRow) {\n this.parent.dragData.push(dragRow.rowData);\n }\n this.parent.dragPath = this.parent.path;\n this.parent.activeElements = this.gridObj.getSelectedRows();\n createVirtualDragElement(this.parent);\n return this.parent.virtualDragElement;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onDetailsResize = function () {\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n var gridHeader = this.gridObj.getHeaderContent().querySelector('.e-headercontent');\n var gridHeaderColGroup = gridHeader.firstChild.childNodes[0];\n var gridContentColGroup = this.gridObj.getContent().querySelector('.e-content .e-table').children[0];\n var gridHeaderColNames = this.gridObj.getColumns();\n for (var i = 0; i < gridHeaderColNames.length; i++) {\n if ((!this.isNameWidth && gridHeaderColNames[i].field === 'name') || gridHeaderColNames[i].field === 'filterPath') {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n if (this.element.clientWidth <= 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else if (this.element.clientWidth > 500) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n else {\n if (this.element.clientWidth <= 680) {\n if (gridHeaderColNames[i].field === 'name') {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 120px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 120px');\n }\n else {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: 180px');\n gridContentColGroup.children[i].setAttribute('style', 'width: 180px');\n }\n }\n else if (this.element.clientWidth > 680) {\n gridHeaderColGroup.children[i].setAttribute('style', 'width: auto');\n gridContentColGroup.children[i].setAttribute('style', 'width: auto');\n }\n }\n }\n }\n }\n };\n DetailsView.prototype.onDetailsResizeHandler = function () {\n this.onDetailsResize();\n if (this.parent.view === 'Details' && !this.parent.isMobile && !isNOU(this.gridObj)) {\n this.adjustHeight();\n }\n };\n DetailsView.prototype.createDragObj = function () {\n var _this = this;\n if (!this.parent.isMobile && this.gridObj) {\n if (this.parent.allowDragAndDrop) {\n if (this.dragObj) {\n this.dragObj.destroy();\n }\n this.dragObj = new Draggable(this.gridObj.element, {\n cursorAt: this.parent.dragCursorPosition,\n distance: 5,\n enableTailMode: true,\n dragArea: this.parent.element,\n dragTarget: '.' + CLS.ROW,\n drag: draggingHandler.bind(this, this.parent),\n dragStart: function (args) {\n dragStartHandler(_this.parent, args, _this.dragObj);\n },\n dragStop: dragStopHandler.bind(this, this.parent),\n enableAutoScroll: true,\n helper: this.dragHelper.bind(this)\n });\n }\n else if (!this.parent.allowDragAndDrop && this.dragObj) {\n this.dragObj.destroy();\n }\n }\n };\n DetailsView.prototype.onDropInit = function (args) {\n if (this.parent.targetModule === this.getModuleName()) {\n /* istanbul ignore next */\n // eslint-disable-next-line\n var cwdData = getValue(this.parent.pathId[this.parent.pathId.length - 1], this.parent.feParent);\n if (!args.target.closest('tr')) {\n this.parent.dropPath = this.parent.path;\n this.parent.dropData = cwdData;\n }\n else {\n // eslint-disable-next-line\n var info = null;\n // eslint-disable-next-line\n info = this.gridObj.getRowInfo(args.target).rowData;\n this.parent.dropPath = info.isFile ? this.parent.path : getFullPath(this.parent, info, this.parent.path);\n this.parent.dropData = info.isFile ? cwdData : info;\n }\n }\n };\n DetailsView.prototype.oncutCopyInit = function () {\n if (this.parent.activeModule === this.getModuleName()) {\n this.parent.activeRecords = this.gridObj.getSelectedRecords();\n this.parent.activeElements = this.gridObj.getSelectedRows();\n }\n };\n DetailsView.prototype.onpasteEnd = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n if (this.parent.path === this.parent.destinationPath || this.parent.path === getDirectoryPath(this.parent, args)) {\n this.onPathChanged(args);\n }\n }\n };\n DetailsView.prototype.onDropPath = function (args) {\n if (this.parent.view === 'Details') {\n this.isPasteOperation = true;\n this.onPathChanged(args);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns modules name.\n * @private\n */\n DetailsView.prototype.getModuleName = function () {\n return 'detailsview';\n };\n DetailsView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n if (this.gridObj) {\n if (this.parent.isReact) {\n this.gridObj.off('reactTemplateRender', this.reactTemplateRender);\n }\n this.unWireEvents();\n this.gridObj.destroy();\n }\n };\n DetailsView.prototype.updateType = function (item) {\n var folder = select('.' + CLS.FOLDER, item);\n this.parent.isFile = isNOU(folder) ? true : false;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelection = function (action, args) {\n var eventArgs = {\n action: action, fileDetails: args.data, isInteracted: this.interaction, cancel: false, target: args.target\n };\n this.parent.trigger('fileSelection', eventArgs);\n args.cancel = eventArgs.cancel;\n };\n /* istanbul ignore next */\n DetailsView.prototype.onSelected = function (args) {\n this.parent.activeModule = 'detailsview';\n if (!this.parent.isLayoutChange || this.parent.isFiltered) {\n this.selectedRecords();\n }\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.getSelectedRowIndexes().length === 1) {\n this.firstItemIndex = this.gridObj.selectedRowIndex;\n }\n this.gridObj.element.setAttribute('tabindex', '-1');\n this.triggerSelect('select', args);\n var item = this.gridObj.getRowByIndex(this.gridObj.selectedRowIndex);\n this.updateType(item);\n if (!isNOU(item) && !isNOU(item.querySelector('.e-checkselect'))) {\n if (this.gridObj.getSelectedRowIndexes().length !== 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n var lastItem = this.gridObj.getRowByIndex(lastItemIndex);\n lastItem.querySelector('.e-checkselect').setAttribute('tabindex', '-1');\n }\n item.querySelector('.e-rowcell.e-fe-checkbox').removeAttribute('tabindex');\n }\n if (!isNOU(this.gridObj) && !isNOU(this.gridObj.element.querySelector('.e-checkselectall'))) {\n this.gridObj.element.querySelector('.e-checkselectall').setAttribute('tabindex', '-1');\n }\n var rows = this.gridObj.getSelectedRowIndexes();\n if (!this.parent.allowMultiSelection) {\n for (var i = 0; i < rows.length; i++) {\n if (rows[i] === this.gridObj.selectedRowIndex) {\n this.gridObj.getRowByIndex(rows[i]).setAttribute('tabindex', '0');\n }\n else {\n this.gridObj.getRowByIndex(rows[i]).removeAttribute('tabindex');\n }\n }\n }\n var len = rows.length;\n if (this.parent.enableVirtualization) {\n this.parent.currentItemText = getValue('name', args.data);\n }\n else if (len > 0) {\n // eslint-disable-next-line\n var data = this.gridObj.getRowsObject()[rows[len - 1]].data;\n this.parent.currentItemText = getValue('name', data);\n }\n var indexes = getValue('rowIndexes', args);\n var multiSelect = getValue('enableSelectMultiTouch', this.gridObj.selectionModule);\n if (this.parent.isDevice && isNOU(indexes) && args.target && !multiSelect && !args.target.closest('.e-headercell')) {\n this.parent.isFile = getValue('isFile', args.data);\n if (!this.parent.isFile) {\n this.openContent(args.data);\n }\n }\n this.parent.visitedItem = args.row;\n if ((!this.parent.enableVirtualization) || (!args.isHeaderCheckboxClicked)) {\n this.addFocus(this.gridObj.selectedRowIndex);\n }\n if (!this.parent.isLayoutChange) {\n this.isInteracted = true;\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.onPathColumn = function () {\n if (this.parent.view === 'Details' && !isNOU(this.gridObj)) {\n if (this.parent.breadcrumbbarModule.searchObj.element.value === '' && !this.parent.isFiltered) {\n this.removePathColumn(false);\n }\n }\n };\n DetailsView.prototype.selectedRecords = function () {\n this.parent.setProperties({ selectedItems: [] }, true);\n // eslint-disable-next-line\n var selectedRecords = this.gridSelectNodes();\n var selectSize = 0;\n while (selectSize < selectedRecords.length) {\n var record = selectedRecords[selectSize];\n var name_3 = getItemName(this.parent, record);\n this.parent.selectedItems.push(name_3);\n selectSize++;\n }\n this.parent.setProperties({ selectedItems: this.parent.selectedItems }, true);\n };\n DetailsView.prototype.onDeSelection = function (args) {\n /* istanbul ignore next */\n if (!this.parent.allowMultiSelection && isNOU(args.data)) {\n this.gridObj.getRowByIndex(args.rowIndex).removeAttribute('tabindex');\n }\n else if (this.gridObj.getSelectedRowIndexes().length > 1) {\n var lastItemIndex = this.gridObj.getSelectedRowIndexes()[this.gridObj.getSelectedRowIndexes().length - 2];\n this.gridObj.getRowByIndex(lastItemIndex).querySelector('.e-checkselect').removeAttribute('tabindex');\n }\n if (this.gridObj.selectedRowIndex === -1) {\n this.gridObj.element.setAttribute('tabindex', '0');\n }\n if (!this.isInteracted) {\n this.isInteracted = true;\n return;\n }\n this.selectedRecords();\n if (this.parent.selectedItems.length === 0) {\n setValue('enableSelectMultiTouch', false, this.gridObj.selectionModule);\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n }\n this.parent.notify(events.selectionChanged, {});\n this.triggerSelect('unselect', args);\n this.parent.visitedItem = null;\n };\n DetailsView.prototype.triggerSelect = function (action, args) {\n var eventArgs = { action: action, fileDetails: args.data, isInteracted: this.interaction };\n this.parent.trigger('fileSelect', eventArgs);\n this.interaction = true;\n };\n DetailsView.prototype.wireEvents = function () {\n this.wireClickEvent(true);\n this.keyboardModule = new KeyboardEvents(this.gridObj.element, {\n keyAction: this.keyupHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keyup'\n });\n this.keyboardDownModule = new KeyboardEvents(this.element, {\n keyAction: this.keydownHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.gridObj.element, 'blur', this.removeFocus, this);\n };\n DetailsView.prototype.unWireEvents = function () {\n this.wireClickEvent(false);\n this.keyboardModule.destroy();\n this.keyboardDownModule.destroy();\n EventHandler.remove(this.gridObj.element, 'blur', this.removeFocus);\n };\n DetailsView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n // eslint-disable-next-line\n var proxy_1 = this;\n var ele = this.gridObj.getContent();\n this.clickObj = new Touch(ele, {\n tap: function (eve) {\n if (eve.tapCount === 1 && eve.originalEvent.target.classList.contains('e-content')) {\n proxy_1.onClearAllInit();\n }\n },\n tapHold: function (e) {\n if (proxy_1.parent.isDevice) {\n e.originalEvent.preventDefault();\n if (proxy_1.parent.allowMultiSelection) {\n setValue('enableSelectMultiTouch', proxy_1.parent.allowMultiSelection, proxy_1.gridObj.selectionModule);\n addClass([proxy_1.parent.element], CLS.MULTI_SELECT);\n }\n var target = e.originalEvent.target;\n if (target) {\n var row = closest(target, '.' + CLS.ROW);\n var index = proxy_1.gridObj.getRows().indexOf(row);\n proxy_1.gridObj.selectRow(index);\n }\n }\n }\n });\n }\n else {\n if (this.clickObj) {\n this.clickObj.destroy();\n }\n }\n };\n /* istanbul ignore next */\n DetailsView.prototype.removeSelection = function () {\n removeClass([this.parent.element], CLS.MULTI_SELECT);\n this.gridObj.clearSelection();\n this.parent.setProperties({ selectedItems: [] }, true);\n this.parent.notify(events.selectionChanged, {});\n if (this.gridObj.selectedRowIndex === -1) {\n this.startIndex = null;\n }\n this.isInteracted = true;\n };\n DetailsView.prototype.removeFocus = function () {\n this.addFocus(null);\n };\n DetailsView.prototype.getFocusedItemIndex = function () {\n return (!isNOU(this.getFocusedItem())) ?\n parseInt(this.getFocusedItem().getAttribute('data-rowindex'), 10) : null;\n };\n /* istanbul ignore next */\n // eslint:disable-next-line\n DetailsView.prototype.keydownHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n switch (e.action) {\n case 'end':\n case 'home':\n case 'space':\n case 'ctrlSpace':\n case 'shiftSpace':\n case 'csSpace':\n case 'ctrlA':\n case 'enter':\n case 'altEnter':\n case 'ctrlEnd':\n case 'shiftEnd':\n case 'csEnd':\n case 'ctrlHome':\n case 'shiftHome':\n case 'csHome':\n case 'ctrlDown':\n case 'shiftDown':\n case 'csDown':\n case 'ctrlLeft':\n case 'shiftLeft':\n case 'csLeft':\n case 'esc':\n case 'del':\n case 'shiftdel':\n case 'ctrlC':\n case 'ctrlV':\n case 'ctrlX':\n case 'f2':\n case 'moveDown':\n case 'moveUp':\n case 'ctrlD':\n e.preventDefault();\n break;\n default:\n break;\n }\n };\n DetailsView.prototype.keyupHandler = function (e) {\n if (!this.isRendered) {\n return;\n }\n e.preventDefault();\n var action = e.action;\n // eslint-disable-next-line\n var gridItems = getSortedData(this.parent, this.gridObj.dataSource);\n var gridLength = gridItems.length;\n var focItem = this.getFocusedItem();\n var focIndex = this.getFocusedItemIndex();\n var selIndex = this.gridObj.selectedRowIndex;\n var selRowIndeces = this.gridObj.getSelectedRowIndexes();\n // eslint-disable-next-line\n var rowData;\n var firstItem;\n var lastItem;\n switch (action) {\n case 'altEnter':\n this.parent.notify(events.detailsInit, {});\n GetDetails(this.parent, this.parent.selectedItems, this.parent.path, 'details');\n break;\n case 'esc':\n removeActive(this.parent);\n break;\n case 'del':\n case 'shiftdel':\n this.performDelete();\n break;\n case 'enter':\n if (this.gridObj.selectedRowIndex === -1) {\n break;\n }\n rowData = this.gridObj.getRowsObject()[this.gridObj.selectedRowIndex].data;\n if (rowData) {\n // eslint-disable-next-line\n var data = JSON.parse(JSON.stringify(rowData));\n this.openContent(data);\n }\n break;\n case 'ctrlC':\n copyFiles(this.parent);\n break;\n case 'ctrlV':\n this.parent.folderPath = '';\n pasteHandler(this.parent);\n break;\n case 'ctrlX':\n cutFiles(this.parent);\n break;\n case 'ctrlD':\n this.doDownload();\n break;\n case 'f2':\n this.performRename();\n break;\n case 'ctrlA':\n if (!isNOU(gridItems[0]) && this.parent.allowMultiSelection) {\n var cnTable = this.gridObj.getContent().querySelector('.e-content');\n var crtSrlPos = cnTable.scrollTop;\n var crtFocusIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n cnTable.scrollTop = crtSrlPos;\n if (crtFocusIndex !== -1) {\n this.addFocus(crtFocusIndex);\n }\n }\n break;\n case 'ctrlHome':\n case 'tab':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection && e.action === 'ctrlHome') {\n this.gridObj.selectRow(0);\n }\n else if (this.gridObj.selectedRowIndex !== -1 && e.action === 'tab') {\n return;\n }\n else if (!this.actionDivert) {\n this.addHeaderFocus();\n this.actionDivert = true;\n }\n else {\n this.addFocus(0);\n this.actionDivert = false;\n }\n }\n break;\n case 'ctrlEnd':\n if (!isNOU(gridItems[0])) {\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow(gridLength - 1);\n }\n else {\n this.addFocus(gridLength - 1);\n }\n }\n break;\n case 'shiftHome':\n case 'shiftEnd':\n case 'csHome':\n case 'csEnd':\n if (!this.parent.allowMultiSelection) {\n this.gridObj.selectRow((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : gridItems.length - 1);\n }\n else {\n if (!isNOU(gridItems[0])) {\n if (!isNOU(selIndex) && selIndex !== -1) {\n this.checkRowsKey(gridItems, selIndex, null, e);\n }\n else {\n if (e.action === 'csHome' || e.action === 'shiftHome') {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, gridItems.length - 1);\n }\n }\n }\n }\n break;\n case 'space':\n case 'csSpace':\n case 'shiftSpace':\n case 'ctrlSpace':\n this.spaceSelection(selRowIndeces, focIndex, selIndex, e);\n break;\n case 'csUp':\n case 'csDown':\n case 'shiftUp':\n case 'shiftDown':\n this.shiftMoveMethod(gridItems, selIndex, focIndex, selRowIndeces, e);\n break;\n case 'ctrlUp':\n case 'ctrlDown':\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n break;\n case 'home':\n firstItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[0])];\n this.parent.setProperties({ selectedItems: firstItem }, true);\n this.selectRecords(firstItem);\n break;\n case 'moveUp':\n case 'moveDown':\n this.moveFunction(gridItems, e, selIndex);\n break;\n case 'end':\n lastItem = [getValue(this.parent.hasId ? 'id' : 'name', gridItems[gridLength - 1])];\n this.parent.setProperties({ selectedItems: lastItem }, true);\n this.selectRecords(lastItem);\n break;\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.gridSelectNodes = function () {\n return this.gridObj.getSelectedRecords();\n };\n DetailsView.prototype.doDownload = function () {\n if (this.parent.selectedItems.length !== 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n // eslint-disable-next-line\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasDownloadAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionDownload);\n return;\n }\n }\n Download(this.parent, this.parent.path, this.parent.selectedItems);\n }\n };\n DetailsView.prototype.performDelete = function () {\n if (this.parent.selectedItems && this.parent.selectedItems.length > 0) {\n this.parent.itemData = this.gridObj.getSelectedRecords();\n // eslint-disable-next-line\n var items = this.parent.itemData;\n for (var i = 0; i < items.length; i++) {\n if (!hasEditAccess(items[i])) {\n createDeniedDialog(this.parent, items[i], events.permissionEdit);\n return;\n }\n }\n createDialog(this.parent, 'Delete');\n }\n };\n DetailsView.prototype.performRename = function () {\n if (this.parent.selectedItems.length === 1) {\n this.updateRenameData();\n doRename(this.parent);\n }\n };\n DetailsView.prototype.updateRenameData = function () {\n // eslint-disable-next-line\n var data = this.gridSelectNodes()[0];\n updateRenamingData(this.parent, data);\n };\n // eslint-disable-next-line\n DetailsView.prototype.shiftMoveMethod = function (gridItems, selIndex, focIndex, selRowIndeces, e) {\n if (!this.parent.allowMultiSelection) {\n this.moveFunction(gridItems, e, selIndex);\n }\n else {\n if (selIndex === -1 && (e.action === 'csUp' || e.action === 'csDown')) {\n this.ctrlMoveFunction(gridItems, e, selIndex);\n }\n else if (selIndex !== -1 && focIndex !== selIndex &&\n !((e.action === 'csUp' || e.action === 'csDown') && this.isSelected(selRowIndeces, focIndex))) {\n this.shiftSelectFocusItem(selIndex, focIndex, selRowIndeces, e);\n }\n else {\n this.shiftSelectedItem(selIndex, selRowIndeces, gridItems, e);\n }\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.moveFunction = function (selectedItems, e, rowIndex) {\n if (!isNOU(this.getFocusedItem()) && this.parent.allowMultiSelection) {\n if (e.action === 'moveDown') {\n this.gridObj.selectRow(this.getFocusedItemIndex() + 1);\n }\n else {\n this.gridObj.selectRow(this.getFocusedItemIndex() - 1);\n }\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n if (e.action === 'moveDown' || e.action === 'ctrlDown' || e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectRow(rowIndex + ((rowIndex !== selectedItems.length - 1) ? 1 : 0));\n }\n else {\n this.gridObj.selectRow(rowIndex - ((rowIndex !== 0) ? 1 : 0));\n }\n }\n else {\n if (!isNOU(selectedItems[0])) {\n this.gridObj.selectRow(0);\n }\n }\n };\n DetailsView.prototype.spaceSelection = function (selRowIndeces, focIndex, selIndex, e) {\n if (!this.isSelected(selRowIndeces, focIndex) && selIndex !== -1 && (e.action === 'shiftSpace' || e.action === 'csSpace')) {\n if (focIndex < selIndex) {\n this.gridObj.selectionModule.selectRowsByRange(focIndex, selIndex);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(selIndex, focIndex);\n }\n }\n else if (!isNOU(this.getFocusedItem()) && focIndex !== selIndex) {\n selRowIndeces.push(this.getFocusedItemIndex());\n this.gridObj.selectRows(selRowIndeces);\n }\n else if (selIndex !== -1 && e.action === 'ctrlSpace' && this.parent.allowMultiSelection) {\n var lItem = selIndex;\n selRowIndeces.pop();\n this.gridObj.selectRows(selRowIndeces);\n this.addFocus(lItem);\n }\n else if (e.action === 'shiftSpace') {\n this.gridObj.selectRow(selIndex);\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.ctrlMoveFunction = function (items, e, rowIndex) {\n var nextItem;\n if (!isNOU(this.getFocusedItem())) {\n var nextIndex = this.getFocusedItemIndex();\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n nextIndex + ((nextIndex < items.length - 1) ? 1 : 0) : nextIndex - ((nextIndex < 1) ? 0 : 1);\n }\n else if (!isNOU(rowIndex) && rowIndex !== -1) {\n nextItem = (e.action === 'ctrlDown' || e.action === 'csDown') ?\n rowIndex + ((rowIndex < items.length) ? 1 : 0) : rowIndex - ((rowIndex < 1) ? 0 : 1);\n }\n else {\n if (!isNOU(items[0])) {\n nextItem = 0;\n }\n }\n this.addFocus(nextItem);\n };\n // eslint-disable-next-line\n DetailsView.prototype.checkRowsKey = function (items, indexValue, focIndex, e) {\n if (this.gridObj.checkAllRows === 'Uncheck' || this.gridObj.checkAllRows === 'Intermediate') {\n if (e.action !== 'csHome' && e.action !== 'csEnd') {\n if (isNOU(this.startIndex) && this.firstItemIndex !== indexValue) {\n this.firstItemIndex = indexValue;\n }\n if (e.action === 'shiftEnd') {\n this.gridObj.selectionModule.selectRowsByRange(this.firstItemIndex, items.length - 1);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(0, this.firstItemIndex);\n }\n this.startIndex = indexValue;\n }\n else {\n if (e.action === 'csEnd') {\n this.gridObj.\n selectRows(this.InnerItems(isNOU(indexValue) ? 0 : indexValue, isNOU(focIndex) ? items.length - 1 : focIndex, e));\n }\n else {\n if (isNOU(indexValue)) {\n this.gridObj.selectRow(0);\n }\n else {\n this.gridObj.selectRows(this.InnerItems(isNOU(focIndex) ? 0 : focIndex, indexValue, e));\n }\n }\n }\n }\n else {\n this.gridObj.selectionModule.selectRow(((e.action === 'shiftHome' || e.action === 'csHome') ? 0 : items.length - 1));\n }\n };\n DetailsView.prototype.InnerItems = function (fItem, lItem, e) {\n var itemArr = this.gridObj.getSelectedRowIndexes();\n if (e.action === 'csEnd') {\n for (var i = fItem + 1; i <= lItem; i++) {\n itemArr.push(i);\n }\n }\n else {\n for (var i = lItem - 1; fItem <= i; i--) {\n itemArr.push(i);\n }\n }\n return itemArr;\n };\n DetailsView.prototype.shiftSelectFocusItem = function (selIndex, fIndex, selRowIndexes, e) {\n var lItem = fIndex + ((e.action === 'shiftDown' || e.action === 'csDown') ? 1 : -1);\n var fItem = isNOU(this.startIndex) ? selIndex : selRowIndexes[0];\n if (fItem === lItem) {\n this.gridObj.selectRow(fItem);\n }\n else {\n if (fItem < lItem) {\n if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n }\n else if (e.action === 'shiftDown' || e.action === 'csDown') {\n this.gridObj.selectionModule.selectRowsByRange(lItem, fItem);\n }\n else {\n this.gridObj.selectionModule.selectRowsByRange(fItem, lItem);\n }\n }\n this.startIndex = this.gridObj.selectedRowIndex;\n };\n DetailsView.prototype.addFocus = function (item) {\n var fItem = this.getFocusedItem();\n var itemElement = this.gridObj.getRowByIndex(item);\n if (fItem) {\n fItem.removeAttribute('tabindex');\n removeClass([fItem], [CLS.FOCUS, CLS.FOCUSED]);\n }\n if (!isNOU(itemElement)) {\n this.gridObj.element.setAttribute('tabindex', '-1');\n itemElement.setAttribute('tabindex', '0');\n itemElement.focus();\n addClass([itemElement], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.addHeaderFocus = function () {\n var treeFocus = select('.e-row', this.element);\n this.gridObj.element.setAttribute('tabindex', '-1');\n var nameFocus = select('th.e-fe-grid-name', this.element);\n nameFocus.setAttribute('tabindex', '0');\n nameFocus.focus();\n addClass([nameFocus], [CLS.FOCUS, CLS.FOCUSED]);\n treeFocus.setAttribute('tabindex', '0');\n if (treeFocus.tabIndex === 0 && nameFocus.tabIndex === 0) {\n removeClass([treeFocus], [CLS.FOCUS, CLS.FOCUSED]);\n }\n };\n DetailsView.prototype.getFocusedItem = function () {\n return select('.' + CLS.FOCUSED, this.element);\n };\n DetailsView.prototype.isSelected = function (selRowIndexes, focIndex) {\n var check = false;\n for (var i = 0; i <= selRowIndexes.length - 1; i++) {\n if (selRowIndexes[i] === focIndex) {\n check = true;\n break;\n }\n }\n return check;\n };\n // eslint-disable-next-line\n DetailsView.prototype.shiftSelectedItem = function (selIndex, selRowIndexes, gridItems, e) {\n if (selIndex === -1) {\n this.gridObj.selectRow(0);\n }\n else {\n if (isNOU(this.startIndex) && e.shiftKey) {\n this.startIndex = this.gridObj.selectedRowIndex;\n this.gridObj.selectRows([selIndex, (e.action === 'shiftDown' || e.action === 'csDown') ?\n (selIndex + ((selIndex !== gridItems.length - 1) ? 1 : 0)) : (selIndex - ((selIndex !== 0) ? 1 : 0))]);\n }\n else {\n if (e.action === 'shiftDown' || e.action === 'shiftUp') {\n if (e.action === 'shiftDown' && selRowIndexes.indexOf(selIndex + 1) === -1) {\n if (selIndex !== gridItems.length - 1) {\n selRowIndexes.push(selIndex + 1);\n }\n }\n else if (e.action === 'shiftUp' && selRowIndexes.indexOf(selIndex - 1) === -1) {\n if (selIndex !== 0) {\n selRowIndexes.push(selIndex - 1);\n }\n }\n else {\n selRowIndexes.pop();\n }\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n if (e.action === 'csDown') {\n if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() + 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() + 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() + 1);\n }\n }\n else if (!this.isSelected(selRowIndexes, this.getFocusedItemIndex() - 1)) {\n selRowIndexes.push((this.getFocusedItemIndex() - 1));\n this.gridObj.selectRows(selRowIndexes);\n }\n else {\n this.addFocus(this.getFocusedItemIndex() - 1);\n }\n }\n }\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.onMethodCall = function (e) {\n if (this.parent.view !== 'Details') {\n return;\n }\n var action = getValue('action', e);\n switch (action) {\n case 'deleteFiles':\n this.deleteFiles(getValue('ids', e));\n break;\n case 'downloadFiles':\n this.downloadFiles(getValue('ids', e));\n break;\n case 'openFile':\n this.openFile(getValue('id', e));\n break;\n case 'createFolder':\n this.interaction = false;\n break;\n case 'renameFile':\n this.interaction = false;\n this.renameFile(getValue('id', e), getValue('newName', e));\n break;\n case 'selectAll':\n this.interaction = false;\n this.onSelectAllInit();\n break;\n case 'clearSelection':\n this.interaction = false;\n this.onClearAllInit();\n break;\n }\n };\n // eslint-disable-next-line\n DetailsView.prototype.getRecords = function (nodes) {\n // eslint-disable-next-line\n var gridRecords = this.gridObj.getCurrentViewRecords();\n // eslint-disable-next-line\n var records = [];\n var hasFilter = (this.parent.breadcrumbbarModule.searchObj.element.value !== '' || this.parent.isFiltered) ? true : false;\n var filter = this.parent.hasId ? 'id' : 'name';\n if (this.parent.hasId || !hasFilter) {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n if (nodes.indexOf(getValue(filter, gridRecords[i])) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n else {\n for (var i = 0, len = gridRecords.length; i < len; i++) {\n var name_4 = getValue('filterPath', gridRecords[i]) + getValue('name', gridRecords[i]);\n if (nodes.indexOf(name_4) !== -1) {\n records.push(gridRecords[i]);\n }\n }\n }\n return records;\n };\n DetailsView.prototype.deleteFiles = function (ids) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(ids)) {\n this.performDelete();\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords(ids);\n if (records.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < records.length; i++) {\n data[i] = records[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDeleteFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.downloadFiles = function (ids) {\n if (isNOU(ids)) {\n this.doDownload();\n return;\n }\n // eslint-disable-next-line\n var dRecords = this.getRecords(ids);\n if (dRecords.length === 0) {\n return;\n }\n // eslint-disable-next-line\n var data = [];\n var newIds = [];\n for (var i = 0; i < dRecords.length; i++) {\n data[i] = dRecords[i];\n newIds[i] = getItemName(this.parent, data[i]);\n }\n doDownloadFiles(this.parent, data, newIds);\n };\n DetailsView.prototype.openFile = function (id) {\n if (isNOU(id)) {\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords([id]);\n if (records.length > 0) {\n this.openContent(records[0]);\n }\n };\n DetailsView.prototype.renameFile = function (id, name) {\n this.parent.activeModule = 'detailsview';\n if (isNOU(id)) {\n this.performRename();\n return;\n }\n // eslint-disable-next-line\n var records = this.getRecords([id]);\n if (records.length > 0) {\n updateRenamingData(this.parent, records[0]);\n if (!isNOU(name)) {\n if (hasEditAccess(this.parent.itemData[0])) {\n rename(this.parent, this.parent.path, name);\n }\n else {\n createDeniedDialog(this.parent, this.parent.itemData[0], events.permissionEdit);\n }\n }\n else {\n doRename(this.parent);\n }\n }\n };\n return DetailsView;\n}());\nexport { DetailsView };\n","import * as index from './index';\nindex.FileManager.Inject(index.DetailsView, index.NavigationPane, index.LargeIconsView, index.Toolbar, index.ContextMenu, index.BreadCrumbBar, index.Virtualization);\nexport * from './index';\n"],"names":["updatePath","node","data","instance","text","getValue","id","getAttribute","newText","isNOU","setProperties","path","getPath","hasId","pathId","getPathId","pathNames","getPathNames","element","matched","getParents","i","length","ids","push","names","isId","el","parentNode","matches","CLS.LIST_ITEM","parentText","select","CLS.LIST_TEXT","textContent","classList","contains","CLS.TREE_VIEW","generatePath","parent","key","newPath","feParent","removeActive","isCut","removeBlur","selectedNodes","actionRecords","enablePaste","notify","events.hidePaste","activeElement","action","isSearchCut","activeElements","events.cutCopyInit","blurEle","activeModule","targetPath","getParentPath","getModule","addBlur","events.showPaste","activeRecords","breadcrumbbarModule","searchObj","value","isFiltered","i_1","selectedItems","nodes","add","CLS.BLUR","hover","querySelectorAll","CLS.HOVER","remove","CLS.ROW","closest","CLS.LARGE_ICON","searchWordHandler","isLayoutChange","searchWord","events.pathColumn","args","searchSettings","filterType","itemData","getPathObject","caseSensitive","ignoreCase","hiddenItems","showHiddenItems","Search","events.layoutChange","events.search","filter","isSortByClicked","files","oldView","detailsviewModule","gridObj","dataSource","largeiconsviewModule","allItems","read","updateLayout","view","layoutSelectedItems","getTargetModule","tartgetModule","CLS.ROOT","CLS.CONTROL","CLS.GRID_CONTENT","CLS.LARGE_ICONS","targetModule","refresh","hasReadAccess","events.refreshEnd","createDeniedDialog","events.permissionRead","openAction","events.openEnd","copyFiles","fileAction","cutFiles","fileType","file","CLS.FOLDER","imageFormat","audioFormat","videoFormat","knownFormat","filetype","toLowerCase","indexOf","split","join","CLS.ICON_IMAGE","CLS.ICON_MUSIC","CLS.ICON_VIDEO","getImageUrl","item","imgUrl","baseUrl","ajaxSettings","url","pathUrl","fileName","encodeURIComponent","fPath","imgId","replace","eventArgs","fileDetails","imageUrl","Date","getTime","toString","trigger","getFullPath","filePath","getName","name","getSortedData","items","query","sortOrder","Query","sortBy","group","lists","DataManager","executeLocal","getObject","currFiles","feFiles","where","createEmptyElement","top","layoutElement","CLS.LAYOUT_ID","addressBarHeight","CLS.BREADCRUMBBAR_ID","offsetHeight","CLS.GRID_HEADER","querySelector","CLS.EMPTY","emptyDiv","createElement","className","emptyFolder","CLS.LARGE_EMPTY_FOLDER","emptyEle","CLS.EMPTY_CONTENT","dragFile","CLS.EMPTY_INNER_CONTENT","CLS.GRID_VIEW","appendChild","error","innerHTML","getLocaleText","eDiv","style","marginTop","getDirectories","events.isFile","setNodeId","result","rootId","dirs","len","setValue","setDateObject","localeString","dateFormat","createdDate","modifiedDate","formatDate","format","locale","localeObj","getConstant","getCssClass","css","cssClass","sortbyClickHandler","getSortField","isMobile","events.sortColumn","module","events.sortByChange","column","substring","lastIndexOf","field","detailsViewSettings","columns","setNextPath","currfolders","folders","originalPath","root","eventName","events.finalizeEnd","events.initialEnd","openSearchFolder","events.clearPathInit","selectedNode","pasteHandler","isDragDrop","folderPath","validateSubFolder","events.pasteInit","paste","createDialog","code","message","fileExists","dropPath","dragPath","subFolder","srcData","dragNodes","tempTarget","dropHandler","dragData","dropData","oldPath","getDirectoryPath","cwd","doPasteUpdate","operation","events.dragEnd","events.cutEnd","duplicateItems","pasteNodes","count","droppedObjects","duplicateRecords","isPasteError","isDropEnd","isSearchDrag","isPathDrag","events.pasteEnd","readDropPath","expandedId","events.pathDrag","navigationpaneModule","treeObj","document","events.dropPath","getDuplicateData","records","createVirtualDragElement","getItemName","cloneIcon","cloneName","virtualEle","ele","CLS.CLONE","badge","virtualDragElement","dragStopHandler","dragArgs","cancel","treeExpandTimer","window","clearTimeout","removeDropTarget","uploadObj","dropArea","CLS.CONTENT_ID","detach","target","events.dropInit","dragCount","dragStartHandler","dragObj","allowDragAndDrop","intDestroy","event","dragCancel","removeItemClass","CLS.DROP_FOLDER","CLS.DROP_FILE","draggingHandler","canDrop","setTimeout","events.dragging","objectToString","str","keys","Object","updateRenamingData","currentItemText","isFile","filterPath","doRename","hasEditAccess","events.permissionEdit","doDownload","hasDownloadAccess","events.permissionDownload","Download","doDeleteFiles","newIds","Delete","doDownloadFiles","getAccessClass","permission","hasContentAccess","hasUploadAccess","createNewFolder","details","events.permissionEditContents","uploadItem","eleId","CLS.UPLOAD_ID","click","events.permissionUpload","createAjax","readSuccess","createFolder","itemName","createSuccess","filterDataVal","filterData","extend","filterSuccess","rename","itemNewName","newName","renameSuccess","pasteOperation","renameItems","targetData","renameFiles","destinationPath","pasteSuccess","deleteSuccess","GetDetails","detailsSuccess","getDateFormat","fn","type","mode","dataType","contentType","JSON","stringify","onSuccess","onFailure","beforeSend","beforeSendArgs","events.beforeRequest","Ajax","result_1","triggerAjaxFailure","parse","events.afterRequest","rootAliasName","intl","Internationalization","rootName","location_1","RegExp","match","events.searchTextChange","send","events.selectionChanged","pop","dialogObj","visible","parentElement","nextElementSibling","hide","createdItem","events.createEnd","renamedItem","Array","isArray","renameText","events.renameEndParent","events.pathChanged","events.renameEnd","fileLength","createExtDialog","events.deleteEnd","searchString","searchSuccess","downloadUrl","downloadArgs","form","attrs","method","download","input","forms","namedItem","submit","removeChild","e","replaceItems","options","getOptions","Dialog","beforeOpen","keydownAction","bind","this","dialogName","beforeClose","triggerPopupBeforeClose","header","content","buttons","animationSettings","effect","showCloseIcon","closeOnEscape","allowDragging","isModal","popupTarget","CLS.MOB_POPUP","CLS.ROOT_POPUP","width","open","close","enableRtl","enableHtmlSanitizer","isStringTemplate","appendTo","CLS.DIALOG_ID","changeOptions","extOptions","getExtOptions","isApplySame","extDialogObj","beforeExtOpen","CLS.EXTN_DIALOG_ID","dataBind","show","triggerPopupBeforeOpen","dlgModule","popupName","popupModule","eventargs","isInteracted","events.actionFailure","triggerPopupOpen","triggerPopupClose","duplicateContent","index","buttonModel","isPrimary","item_1","indexval","item_2","ind","retryFiles","onRetryOpen","isRetryOpened","retryDlgClose","retryDlgUpdate","splice","events.skipUpload","isKeepBoth","onKeepBothAll","onReplaceAll","retryArgs","retry","flag","dialogEle","container","checkContainer","checkbox","CheckBox","label","change","checked","focusInput","focus","setSelectionRange","onFolderDialogOpen","createInput","oninput","onValidate","onkeyup","getKeyCode","onSubmit","onRenameDialogOpen","inputEle","onReSubmit","onFocusRenameInput","txt","showFileExtension","placeholder","Input","properties","formattedString","strArr","location","multipleFiles","onDeleteSubmit","modified","CLS.VALUE","size","index_1","undefined","map","val","substr","every","arr","toLocaleUpperCase","CLS.ERROR_CONTENT","preventKeydown","selectAll","dlgName","btnElement","btnCount","onkeydown","keyCode","preventDefault","onSubmitValidate","oIndex","renamedId","oldExtension","nIndex","newExtension","events.deleteInit","test","addInvalid","which","charCode","createImageDialog","image","src","alt","viewerObj","height","enableResize","position","X","Y","openImage","resizing","updateImage","resizeStop","CLS.IMG_DIALOG_ID","imgWrap","cssObj","getComputedStyle","paddingWidth","parseFloat","paddingRight","paddingHeight","paddingBottom","offsetWidth","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","AjaxSettings","_super","apply","Property","ChildProperty","defaultToolbarItems","ToolbarSettings","ToolbarItem","SearchSettings","columnArray","headerText","minWidth","isPrimaryKey","template","initializeCSPTemplate","customAttributes","class","DetailsViewSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","NavigationPaneSettings","UploadSettings","Column","LAYOUT_ID","GRID_ID","LARGEICON_ID","DIALOG_ID","IMG_DIALOG_ID","EXTN_DIALOG_ID","CONTENT_ID","BREADCRUMBBAR_ID","UPLOAD_ID","ROOT","CONTROL","ROOT_POPUP","MOB_POPUP","FILTER","LARGE_ICONS","LIST_ITEM","LIST_TEXT","TB_OPTION_TICK","TB_OPTION_DOT","BLUR","ACTIVE","HOVER","FOCUS","FOCUSED","CHECK","CB_WRAP","ROW","EMPTY","EMPTY_CONTENT","EMPTY_INNER_CONTENT","CLONE","DROP_FOLDER","DROP_FILE","FOLDER","ICON_IMAGE","ICON_MUSIC","ICON_VIDEO","LARGE_ICON","LARGE_EMPTY_FOLDER","GRID_HEADER","TREE_VIEW","MENU_ICON","GRID_VIEW","GRID_CONTENT","ICON_CUT","ICON_GRID","ICON_LARGE","ERROR_CONTENT","RTL","DISPLAY_NONE","VALUE","modelChanged","initialEnd","finalizeEnd","createEnd","pathDrag","deleteInit","deleteEnd","refreshEnd","resizeEnd","pathChanged","destroy","beforeRequest","skipUpload","afterRequest","actionFailure","search","openInit","openEnd","selectionChanged","clearPathInit","layoutChange","sortByChange","detailsInit","menuItemData","renameInit","renameEndParent","renameEnd","showPaste","hidePaste","cutCopyInit","pasteInit","pasteEnd","cutEnd","sortColumn","pathColumn","searchTextChange","dropInit","dragEnd","dragging","methodCall","permissionRead","permissionEdit","permissionEditContents","permissionUpload","permissionDownload","LargeIconsView","isInteraction","uploadOperation","isRendered","tapCount","isSelectAllCalled","isPasteOperation","CLS.LARGEICON_ID","addClass","addEventListener","keyConfigs","end","home","tab","moveDown","moveLeft","moveRight","moveUp","ctrlEnd","ctrlHome","ctrlDown","ctrlLeft","ctrlRight","ctrlUp","shiftEnd","shiftHome","shiftDown","shiftLeft","shiftRight","shiftUp","csEnd","csHome","csDown","csLeft","csRight","csUp","space","ctrlSpace","shiftSpace","csSpace","ctrlA","enter","altEnter","esc","del","ctrlX","isMac","ctrlC","ctrlV","f2","shiftdel","back","ctrlD","render","visitedItem","startItem","showSpinner","resetMultiSelect","setAttribute","listObj","unWireEvents","removeEventListener","iconsView","ul","ariaAttributes","itemRole","listRole","itemText","groupItemRole","wrapperRole","showIcon","fields","iconCss","htmlAttributes","itemCreated","onItemCreated","renderList","CLS.DISPLAY_NONE","enableVirtualization","adjustHeight","virtualizationModule","setUIVirtualization","listElements","ListBase","createListFromJson","itemList","slice","call","preventImgDrag","createDragObj","emptyList","selectItems","activeEle","CLS.ACTIVE","maxHeight","getItemCount","wireEvents","setUlElementHeight","wireScrollEvent","hideSpinner","checkItem","ondragstart","_this","Draggable","enableTailMode","distance","enableAutoScroll","dragTarget","helper","dragHelper","cursorAt","dragCursorPosition","dragArea","dragStop","drag","clone","dragStart","sender","dragLi","setFocus","getItemObject","onDropInit","getModuleName","dropLi","cwdData","info","pane","bar","removeAttribute","curData","textEle","renderCheckbox","showItemCheckBoxes","checkElement","createCheckBox","firstElementChild","insertBefore","childNodes","onLayoutChange","indexes","getIndexes","length_1","checkEle","checkLength","checkState","icon","name_1","selected","showThumbnail","title","onFinalizeEnd","onCreateEnd","clearSelect","onSelectedData","updateSelectedData","onDeleteInit","onDeleteEnd","onRefreshEnd","onRenameInit","updateRenameData","onPathChanged","searchedItems","addSelection","onOpenInit","doOpenAction","onHideLayout","onSelectAllInit","getFirstItem","lastItem","getLastItem","eveArgs","ctrlKey","shiftKey","doSelection","onClearAllInit","clearSelection","onBeforeRequest","onAfterRequest","onSearch","onLayoutRefresh","onUpdateSelectionData","onPathColumn","isDestroyed","off","events.openInit","events.modelChanged","onPropertyChanged","events.methodCall","onMethodCall","onActionFailure","events.renameInit","events.menuItemData","onMenuItemData","splitterResizeHandler","events.resizeEnd","resizeHandler","onpasteInit","onpasteEnd","oncutCopyInit","events.detailsInit","onDetailsInit","onDropPath","on","currentSelected","_i","_a","newProp","allowMultiSelection","wireClickEvent","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","keyboardDownModule","keydownActionHandler","EventHandler","onMouseOver","targetEle","toBind","proxy_1","clickObj","Touch","tap","eve","originalEvent","isDevice","tapEvent","doTapAction","dblClickHandler","clickHandler","tapHold","multiSelect","updateType","cList","CLS.CHECK","triggerSelection","startIndex","endIndex","addActive","addFocus","triggerSelect","removeClass","details_1","fileOpenArgs","folder","fItem","getFocusedItem","firstItem","scrollTo","scrollHeight","navigateItem","scrollTop","navigateDown","navigateRight","csEndKey","csHomeKey","csDownKey","csLeftKey","csRightKey","csUpKey","spaceKey","ctrlAKey","getVisitedItem","performDelete","performRename","CLS.FOCUS","getActiveItem","isTowards","nItem","getNextItem","perRow","li","nextItem","marginValue","parseInt","getPropertyValue","getBoundingClientRect","isVisible","liParent","liScrPos","getCurFocusedItem","dItem","lItem","rItem","uItem","getDataName","preItem","toCheck","CLS.CB_WRAP","eles","visitedData","j","byId","resultData","newData","deleteFiles","downloadFiles","openFile","renameFile","getItemsIndex","isFilter","filterName","name_2","BreadCrumbBar","addressPath","addressBarLink","searchTimer","searchWrapWidth","prop","isNullOrUndefined","allowSearchOnTyping","searchEventBind","onPathChange","paths","addressbarUL","addressbarLI","pathNamesLen","addressATag","innerText","ulElement","breadCrumbBarNavigation","subMenuObj","searchWrap","updateBreadCrumbBar","addresBarUL","liElements","pRight","pLeft","breadCrumbBarWidth","liElementsWidth","liElementsWidths","clientWidth","searchContainer","searchInput","autocomplete","aria-label","searchEle","span","onShowInput","TextBox","showClearButton","onFocus","blur","onBlur","searchChangeHandler","onKeyUp","diff","liElement","utext","subMenuLi","attributes","subMenuSpan","DropDownButton","iconPosition","beforeItemRender","addSubMenuAttributes","subMenuSelectOperations","addressPathClickHandler","anchor","allow","nodeName","children","currentPath","triggerFileOpen","treeNodeId","CLS.FILTER","list","liElementId","link","newpath","onUpdatePath","removeSearchValue","onRenameEnd","onResize","onPasteEnd","events.destroy","onSearchTextChange","liEle","ContextMenu","currentItems","currentElement","disabledItems","downarrow","uparrow","contextMenu","Menu","onBeforeItemRender","onSelect","onBeforeOpen","onBeforeClose","getMenuId","iconSpan","CLS.ICON_LARGE","CLS.MENU_ICON","CLS.ICON_GRID","menuTarget","uid","treeFolder","targetNodeElement","activeNode","getElementsByClassName","targetElement","getTargetView","updateActiveModule","setLayoutItem","getRowObjectFromUID","selectRows","setFileItem","setFolderItem","pasteEle","isSubMenu","getMenuItemData","menuModule","menuType","menuOpenArgs","enableItems","CLS.GRID_ID","getItemIndex","itemId","disableItem","concat","enable","isUniqueId","checkValidItem","isTree","getItemData","contextMenuSettings","trim","selectedTreeNode","layout","nameEle","menuClickArgs","sItems","openFileOnContextMenuClick","separator","CLS.ICON_CUT","CLS.TB_OPTION_DOT","CLS.TB_OPTION_TICK","defaultLocale","NewFolder","Upload","Rename","Cut","Copy","Paste","SortBy","Refresh","Item-Selection","Items-Selection","View","Details","SelectAll","Open","Tooltip-NewFolder","Tooltip-Upload","Tooltip-Delete","Tooltip-Rename","Tooltip-Download","Tooltip-Cut","Tooltip-Copy","Tooltip-Paste","Tooltip-SortBy","Tooltip-Refresh","Tooltip-Selection","Tooltip-View","Tooltip-Details","Tooltip-SelectAll","Name","Size","DateModified","DateCreated","Path","Modified","Created","Location","Type","Permission","Ascending","Descending","None","View-LargeIcons","View-Details","Button-Ok","Button-Cancel","Button-Yes","Button-No","Button-Create","Button-Save","Header-NewFolder","Content-NewFolder","Header-Rename","Content-Rename","Header-Rename-Confirmation","Content-Rename-Confirmation","Header-Delete","Content-Delete","Header-Folder-Delete","Content-Folder-Delete","Header-Multiple-Delete","Content-Multiple-Delete","Header-Duplicate","Content-Duplicate","Header-Upload","Error","Validation-Empty","Validation-Invalid","Validation-NewFolder-Exists","Validation-Rename-Exists","Folder-Empty","File-Upload","Search-Empty","Search-Key","Filter-Empty","Filter-Key","Sub-Folder-Error","Same-Folder-Error","Access-Denied","Access-Details","Header-Retry","Content-Retry","Button-Keep-Both","Button-Replace","Button-Skip","ApplyAll-Label","KB","Access-Message","Network-Error","Server-Error","FileManager","previousPath","nextPath","deleteRecords","isSameAction","persistData","isOpened","left","uploadingCount","uploadedCount","FileManager_1","Inject","preRender","getUniqueID","ensurePath","setAttr","formatUnit","Browser","checkMobile","navigationPaneSettings","isBigger","createSpinner","addWrapper","altN","f5","ctrlShift1","ctrlShift2","ctrlU","L10n","getPersistData","keyEntity","addOnPersist","requiredModules","modules","member","toolbarSettings","initialize","slItems","fileView","navigator","platform","toUpperCase","setRtl","addEventListeners","splitterObj","collapse","renderComplete","addCssClass","renderFileUpload","headerWrap","layoutWrap","navigationWrap","treeWrap","contentWrap","gridWrap","largeiconWrap","role","overlay","paneSettings","min","max","maxWidth","Splitter","splitterResize","dialogWrap","menuWrap","dialogImgWrap","extnDialogWrap","uploadDialogWrap","toolbar","toolBarHeight","clientHeight","splitterAdjust","expand","oldOne","newOne","onContextMenu","userAgent","uploadEle","uploadDialogObj","onOpen","onClose","renderUploadBox","uploadUrl","Uploader","asyncSettings","saveUrl","removeUrl","uploading","onUploading","removing","onRemoving","canceling","onCancel","clearing","onClearing","onSelected","success","onUploadSuccess","failure","onUploadFailure","autoUpload","uploadSettings","minFileSize","maxFileSize","allowedExtensions","directoryUpload","fileListRendering","onFileListRender","updateUploader","clearAll","fileData","customFormData","filename","uploadEventArgs","httpRequest","currentRequest","onFileUploadSuccess","getFilesData","filesData","autoClose","response","statusText","onInitialEnd","removeEventListeners","setPath","oldProp","ajaxSettingSetModel","localeSetModelOption","refreshing","CLS.RTL","toolbarModule","contextmenuModule","disableToolbarItems","enableToolbarItems","disableMenuItems","getMenuItemIndex","getToolbarItemIndex","filterFiles","getSelectedFiles","refreshFiles","refreshLayout","uploadFiles","rtl","Complex","Collection","Event","NotifyPropertyChanges","Component","__assign","assign","t","s","n","Toolbar","default","single","multiple","selection","toolbarItemData","getItems","toolbarCreateArgs","toolbarObj","BaseToolbar","created","toolbarCreateHandler","overflowMode","clicked","onClicked","getId","currItems","toolbarItems","tool","toolbarClickArgs","getPupupId","buttonObj","layoutBtnObj","hideItems","hideStatus","portals","updateSortByButton","itemCount","propItem","getItemModel","itemTooltip","tooltipText","prefixIcon","showTextOn","spanElement","suffixIcon","overflow","align","viewText","mergedItems","disabled","showAlwaysInPopup","tabIndex","onSelectionChanged","reRenderToolbar","itemsToProcess","hideItem","tools","toHide","refreshOverflow","isEnable","Virtualization","filemanagerInstance","largeIconInstance","currentViewItems","firstChild","lastRowCount","rowItemCount","topElement","bottomElement","listItemHeight","totalHeight","topElementHeight","bottomElementHeight","listDiff","renderedCount","dataSourceLength","widthMargin","Math","floor","round","onVirtualUiScroll","scrollPosition","scroll","getscrollerHeight","onNormalScroll","startingHeight","isScrollingDown","updateUI","forEach","lastItemIndex","isAllRendered","startItemIndex","previousElementSibling","NavigationPane","removeNodes","moveNames","expandTree","isDrag","isPathDragged","isRenameParent","isRightClick","isSameNodeClicked","isNodeExpandCalled","renameParent","previousSelected","isNodeClickCalled","restrictSelecting","ctrlShiftN","shiftF10","onInit","rootData","attr","BaseTreeView","parentID","expanded","hasChildren","tooltip","nodeSelecting","onNodeSelecting","nodeSelected","onNodeSelected","nodeExpanding","onNodeExpand","nodeClicked","onNodeClicked","allowEditing","nodeEditing","onNodeEditing","drawNode","onDrowNode","dataBound","addDragDrop","getTreeData","getDragPath","getDropPath","nodeData","addChild","prevent","directories","_fm_icon","addNodes","selecEventArgs","sNode","expandNodeTarget","onPathDrag","selectResultNode","onNodeExpanded","innerHtml","updateTree","updateTreeNode","toExpand","expandedNodes","removeChildNodes","childs","onOpenEnd","sleId","expandAll","updateItemData","updateActionData","selcetedEle","selectedNodeEle","onRenameEndParent","nData","id_1","onDownLoadInit","onClearPathInit","onDragEnd","getMoveNames","previousName","onCutEnd","resultObj","obj","itemname","checkDropPath","onDragging","dataobj","level","keyDown","DetailsView","interaction","isColumnRefresh","firstItemIndex","isSelectionUpdate","currentSelectedItem","isLoaded","isNameWidth","actionDivert","Grid","Resize","Sort","VirtualScroll","checkNameWidth","getColumns","sortSettings","direction","allowSorting","rowSelecting","onSelection","rowDeselecting","rowSelected","rowDeselected","onDeSelection","allowResizing","columnResizing","selectionSettings","checkboxMode","persistSelection","pageSettings","pageSize","enablePersistence","enableVirtualMaskRow","allowUnsort","recordDoubleClick","DblClickEvents","beforeDataBound","onBeforeDataBound","onDataBound","rowDataBound","onRowDataBound","actionBegin","onActionBegin","headerCellInfo","onHeaderCellInfo","getGridHeight","beforeCopy","load","focusModule","isReact","reactTemplateRender","emptyArgs","initialColumn","adjustWidth","fieldName","nameWidth","headerTextAlign","_fm_modified","iWidth","_fm_iconClass","headerTemplate","unshift","cWidth","cBox","disableHtmlEncode","gridHeader","renderCheckBox","refreshColumns","td","row","sizeEle","modifiedSize","sizeValue","sizeFormat","formatNumber","dateEle","checkWrap","requestType","columnName","sortItem","rows","getSelectedRowIndexes","sortSelectedNodes","getRowsObject","selectRecords","currentViewData","getRowHeight","hdTable","getHeaderContent","paddingLeft","borderRightWidth","cnTable","getContent","overflowY","checkEmptyDiv","gridRecords","getCurrentViewRecords","sRecords","includes","Str2","selectedRowIndex","rData","onSortColumn","sortModule","freezeRefresh","onDetailsResize","updatePathColumn","removePathColumn","columnData","getSelectedRecords","openContent","rowIndex","rowData","onSearchFiles","isRefresh","selectionModule","selectRowsByRange","getRows","selectRow","removeSelection","onPasteInit","onDetailsResizeHandler","getRowInfo","dragRow","getSelectedRows","gridHeaderColGroup","gridContentColGroup","gridHeaderColNames","selectedRecords","getRowByIndex","isHeaderCheckboxClicked","gridSelectNodes","selectSize","record","name_3","keyupHandler","keydownHandler","removeFocus","getFocusedItemIndex","gridItems","gridLength","focIndex","selIndex","selRowIndeces","crtSrlPos","crtFocusIndex","addHeaderFocus","checkRowsKey","spaceSelection","shiftMoveMethod","ctrlMoveFunction","moveFunction","isSelected","shiftSelectedItem","shiftSelectFocusItem","nextIndex","indexValue","checkAllRows","InnerItems","itemArr","fIndex","selRowIndexes","itemElement","CLS.FOCUSED","treeFocus","nameFocus","check","getRecords","hasFilter","name_4","dRecords","index.FileManager","index.DetailsView","index.NavigationPane","index.LargeIconsView","index.Toolbar","index.ContextMenu","index.BreadCrumbBar","index.Virtualization"],"mappings":"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"}