UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

271 lines 35.2 kB
import { __values } from "tslib"; import { ExcelStrings } from './excel-strings'; /** * @hidden */ var RootRelsFile = /** @class */ (function () { function RootRelsFile() { } RootRelsFile.prototype.writeElement = function (folder, worksheetData) { folder.file('.rels', ExcelStrings.getRels()); }; return RootRelsFile; }()); export { RootRelsFile }; /** * @hidden */ var AppFile = /** @class */ (function () { function AppFile() { } AppFile.prototype.writeElement = function (folder, worksheetData) { folder.file('app.xml', ExcelStrings.getApp()); }; return AppFile; }()); export { AppFile }; /** * @hidden */ var CoreFile = /** @class */ (function () { function CoreFile() { } CoreFile.prototype.writeElement = function (folder, worksheetData) { folder.file('core.xml', ExcelStrings.getCore()); }; return CoreFile; }()); export { CoreFile }; /** * @hidden */ var WorkbookRelsFile = /** @class */ (function () { function WorkbookRelsFile() { } WorkbookRelsFile.prototype.writeElement = function (folder, worksheetData) { var hasSharedStrings = worksheetData.isEmpty === false; folder.file('workbook.xml.rels', ExcelStrings.getWorkbookRels(hasSharedStrings)); }; return WorkbookRelsFile; }()); export { WorkbookRelsFile }; /** * @hidden */ var ThemeFile = /** @class */ (function () { function ThemeFile() { } ThemeFile.prototype.writeElement = function (folder, worksheetData) { folder.file('theme1.xml', ExcelStrings.getTheme()); }; return ThemeFile; }()); export { ThemeFile }; /** * @hidden */ var WorksheetFile = /** @class */ (function () { function WorksheetFile() { } WorksheetFile.prototype.writeElement = function (folder, worksheetData) { var sheetData = []; var cols = []; var dimension; var dictionary = worksheetData.dataDictionary; var freezePane = ''; var maxOutlineLevel = 0; if (worksheetData.isEmpty) { sheetData.push('<sheetData/>'); dimension = 'A1'; } else { sheetData.push('<sheetData>'); var height = worksheetData.options.rowHeight; var rowHeight = height ? ' ht="' + height + '" customHeight="1"' : ''; sheetData.push("<row r=\"1\"" + rowHeight + ">"); for (var i = 0; i < worksheetData.columnCount; i++) { var column = ExcelStrings.getExcelColumn(i) + 1; var value = dictionary.saveValue(worksheetData.keys[i], i, true); sheetData.push("<c r=\"" + column + "\" t=\"s\"><v>" + value + "</v></c>"); } sheetData.push('</row>'); for (var i = 1; i < worksheetData.rowCount; i++) { if (!worksheetData.isTreeGridData) { sheetData.push("<row r=\"" + (i + 1) + "\"" + rowHeight + ">"); } else { var rowData = worksheetData.data[i - 1].originalRowData; var sCollapsed = (!rowData.expanded) ? '' : (rowData.expanded === true) ? '' : " collapsed=\"1\""; var sHidden = (rowData.parent && this.hasCollapsedParent(rowData)) ? " hidden=\"1\"" : ''; var rowOutlineLevel = rowData.level ? rowData.level : 0; var sOutlineLevel = rowOutlineLevel > 0 ? " outlineLevel=\"" + rowOutlineLevel + "\"" : ''; maxOutlineLevel = maxOutlineLevel < rowOutlineLevel ? rowOutlineLevel : maxOutlineLevel; sheetData.push("<row r=\"" + (i + 1) + "\"" + rowHeight + sOutlineLevel + sCollapsed + sHidden + ">"); } for (var j = 0; j < worksheetData.columnCount; j++) { var cellData = WorksheetFile.getCellData(worksheetData, i, j); sheetData.push(cellData); } sheetData.push('</row>'); } sheetData.push('</sheetData>'); dimension = 'A1:' + ExcelStrings.getExcelColumn(worksheetData.columnCount - 1) + worksheetData.rowCount; cols.push('<cols>'); for (var i = 0; i < worksheetData.columnCount; i++) { var width = dictionary.columnWidths[i]; // Use the width provided in the options if it exists var widthInTwips = worksheetData.options.columnWidth ? worksheetData.options.columnWidth : Math.max(((width / 96) * 14.4), WorksheetFile.MIN_WIDTH); cols.push("<col min=\"" + (i + 1) + "\" max=\"" + (i + 1) + "\" width=\"" + widthInTwips + "\" customWidth=\"1\"/>"); } cols.push('</cols>'); if (worksheetData.indexOfLastPinnedColumn !== -1 && !worksheetData.options.ignorePinning && !worksheetData.options.ignoreColumnsOrder) { var frozenColumnCount = worksheetData.indexOfLastPinnedColumn + 1; var firstCell = ExcelStrings.getExcelColumn(frozenColumnCount) + '1'; freezePane = "<pane xSplit=\"" + frozenColumnCount + "\" topLeftCell=\"" + firstCell + "\" activePane=\"topRight\" state=\"frozen\"/>"; } } var hasTable = !worksheetData.isEmpty && worksheetData.options.exportAsTable; folder.file('sheet1.xml', ExcelStrings.getSheetXML(dimension, freezePane, cols.join(''), sheetData.join(''), hasTable, worksheetData.isTreeGridData, maxOutlineLevel)); }; WorksheetFile.prototype.hasCollapsedParent = function (rowData) { var result = !rowData.parent.expanded; while (rowData.parent) { result = result || !rowData.parent.expanded; rowData = rowData.parent; } return result; }; /* tslint:disable member-ordering */ WorksheetFile.getCellData = function (worksheetData, row, column) { var dictionary = worksheetData.dataDictionary; var columnName = ExcelStrings.getExcelColumn(column) + (row + 1); var columnHeader = worksheetData.keys[column]; var rowData = worksheetData.data[row - 1].rowData; var cellValue = worksheetData.isSpecialData ? rowData : rowData[columnHeader]; if (cellValue === undefined || cellValue === null) { return "<c r=\"" + columnName + "\" s=\"1\"/>"; } else { var savedValue = dictionary.saveValue(cellValue, column, false); var isSavedAsString = savedValue !== -1; var value = isSavedAsString ? savedValue : cellValue; var type = isSavedAsString ? " t=\"s\"" : ''; var format = isSavedAsString ? '' : " s=\"1\""; return "<c r=\"" + columnName + "\"" + type + format + "><v>" + value + "</v></c>"; } }; WorksheetFile.MIN_WIDTH = 8.34; return WorksheetFile; }()); export { WorksheetFile }; /** * @hidden */ var StyleFile = /** @class */ (function () { function StyleFile() { } StyleFile.prototype.writeElement = function (folder, worksheetData) { folder.file('styles.xml', ExcelStrings.getStyles(worksheetData.dataDictionary && worksheetData.dataDictionary.hasNonStringValues)); }; return StyleFile; }()); export { StyleFile }; /** * @hidden */ var WorkbookFile = /** @class */ (function () { function WorkbookFile() { } WorkbookFile.prototype.writeElement = function (folder, worksheetData) { folder.file('workbook.xml', ExcelStrings.getWorkbook()); }; return WorkbookFile; }()); export { WorkbookFile }; /** * @hidden */ var ContentTypesFile = /** @class */ (function () { function ContentTypesFile() { } ContentTypesFile.prototype.writeElement = function (folder, worksheetData) { folder.file('[Content_Types].xml', ExcelStrings.getContentTypesXML(!worksheetData.isEmpty, worksheetData.options.exportAsTable)); }; return ContentTypesFile; }()); export { ContentTypesFile }; /** * @hidden */ var SharedStringsFile = /** @class */ (function () { function SharedStringsFile() { } SharedStringsFile.prototype.writeElement = function (folder, worksheetData) { var e_1, _a; var dict = worksheetData.dataDictionary; var sortedValues = dict.getKeys(); var sharedStrings = new Array(sortedValues.length); try { for (var sortedValues_1 = __values(sortedValues), sortedValues_1_1 = sortedValues_1.next(); !sortedValues_1_1.done; sortedValues_1_1 = sortedValues_1.next()) { var value = sortedValues_1_1.value; sharedStrings[dict.getSanitizedValue(value)] = '<si><t>' + value + '</t></si>'; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (sortedValues_1_1 && !sortedValues_1_1.done && (_a = sortedValues_1.return)) _a.call(sortedValues_1); } finally { if (e_1) throw e_1.error; } } folder.file('sharedStrings.xml', ExcelStrings.getSharedStringXML(dict.stringsCount, sortedValues.length, sharedStrings.join(''))); }; return SharedStringsFile; }()); export { SharedStringsFile }; /** * @hidden */ var TablesFile = /** @class */ (function () { function TablesFile() { } TablesFile.prototype.writeElement = function (folder, worksheetData) { var columnCount = worksheetData.columnCount; var lastColumn = ExcelStrings.getExcelColumn(columnCount - 1) + worksheetData.rowCount; var dimension = 'A1:' + lastColumn; var values = worksheetData.keys; var sortString = ''; var tableColumns = '<tableColumns count="' + columnCount + '">'; for (var i = 0; i < columnCount; i++) { var value = values[i]; tableColumns += '<tableColumn id="' + (i + 1) + '" name="' + value + '"/>'; } tableColumns += '</tableColumns>'; if (worksheetData.sort) { var sortingExpression = worksheetData.sort; var sc = ExcelStrings.getExcelColumn(values.indexOf(sortingExpression.fieldName)); var dir = sortingExpression.dir - 1; sortString = "<sortState ref=\"A2:" + lastColumn + "\"><sortCondition descending=\"" + dir + "\" ref=\"" + sc + "1:" + sc + "15\"/></sortState>"; } folder.file('table1.xml', ExcelStrings.getTablesXML(dimension, tableColumns, sortString)); }; return TablesFile; }()); export { TablesFile }; /** * @hidden */ var WorksheetRelsFile = /** @class */ (function () { function WorksheetRelsFile() { } WorksheetRelsFile.prototype.writeElement = function (folder, worksheetData) { folder.file('sheet1.xml.rels', ExcelStrings.getWorksheetRels()); }; return WorksheetRelsFile; }()); export { WorksheetRelsFile }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2V4Y2VsL2V4Y2VsLWZpbGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLL0M7O0dBRUc7QUFDSDtJQUFBO0lBSUEsQ0FBQztJQUhVLG1DQUFZLEdBQW5CLFVBQW9CLE1BQWEsRUFBRSxhQUE0QjtRQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0wsbUJBQUM7QUFBRCxDQUFDLEFBSkQsSUFJQzs7QUFFRDs7R0FFRztBQUNIO0lBQUE7SUFJQSxDQUFDO0lBSFUsOEJBQVksR0FBbkIsVUFBb0IsTUFBYSxFQUFFLGFBQTRCO1FBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDTCxjQUFDO0FBQUQsQ0FBQyxBQUpELElBSUM7O0FBRUQ7O0dBRUc7QUFDSDtJQUFBO0lBSUEsQ0FBQztJQUhVLCtCQUFZLEdBQW5CLFVBQW9CLE1BQWEsRUFBRSxhQUE0QjtRQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0wsZUFBQztBQUFELENBQUMsQUFKRCxJQUlDOztBQUVEOztHQUVHO0FBQ0g7SUFBQTtJQUtBLENBQUM7SUFKVSx1Q0FBWSxHQUFuQixVQUFvQixNQUFhLEVBQUUsYUFBNEI7UUFDM0QsSUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQztRQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxlQUFl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QUMsQ0FBQztJQUM5RixDQUFDO0lBQ0wsaUJBQUM7QUFBRCxDQUFDLEFBekJELElBeUJDOztBQUVEOztHQUVHO0FBQ0g7SUFBQTtJQUlBLENBQUM7SUFIVSx3Q0FBWSxHQUFuQixVQUFvQixNQUFhLEVBQUUsYUFBNEI7UUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDTCx3QkFBQztBQUFELENBQUMsQUFKRCxJQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUV4Y2VsRmlsZSB9IGZyb20gJy4vZXhjZWwtaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFeGNlbFN0cmluZ3MgfSBmcm9tICcuL2V4Y2VsLXN0cmluZ3MnO1xuaW1wb3J0IHsgV29ya3NoZWV0RGF0YSB9IGZyb20gJy4vd29ya3NoZWV0LWRhdGEnO1xuXG5pbXBvcnQgKiBhcyBKU1ppcCBmcm9tICdqc3ppcC9kaXN0L2pzemlwJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb290UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJy5yZWxzJywgRXhjZWxTdHJpbmdzLmdldFJlbHMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJ2FwcC54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0QXBwKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb3JlRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBKU1ppcCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBmb2xkZXIuZmlsZSgnY29yZS54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0Q29yZSgpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tSZWxzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBKU1ppcCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBoYXNTaGFyZWRTdHJpbmdzID0gd29ya3NoZWV0RGF0YS5pc0VtcHR5ID09PSBmYWxzZTtcbiAgICAgICAgZm9sZGVyLmZpbGUoJ3dvcmtib29rLnhtbC5yZWxzJywgRXhjZWxTdHJpbmdzLmdldFdvcmtib29rUmVscyhoYXNTaGFyZWRTdHJpbmdzKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFRoZW1lRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBKU1ppcCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBmb2xkZXIuZmlsZSgndGhlbWUxLnhtbCcsIEV4Y2VsU3RyaW5ncy5nZXRUaGVtZSgpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0RmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHByaXZhdGUgc3RhdGljIE1JTl9XSURUSCA9IDguMzQ7XG5cbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3Qgc2hlZXREYXRhID0gW107XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbXTtcbiAgICAgICAgbGV0IGRpbWVuc2lvbjogc3RyaW5nO1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgbGV0IGZyZWV6ZVBhbmUgPSAnJztcbiAgICAgICAgbGV0IG1heE91dGxpbmVMZXZlbCA9IDA7XG5cbiAgICAgICAgaWYgKHdvcmtzaGVldERhdGEuaXNFbXB0eSkge1xuICAgICAgICAgICAgc2hlZXREYXRhLnB1c2goJzxzaGVldERhdGEvPicpO1xuICAgICAgICAgICAgZGltZW5zaW9uID0gJ0ExJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNoZWV0RGF0YS5wdXNoKCc8c2hlZXREYXRhPicpO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gIHdvcmtzaGVldERhdGEub3B0aW9ucy5yb3dIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCByb3dIZWlnaHQgPSBoZWlnaHQgPyAnIGh0PVwiJyArIGhlaWdodCArICdcIiBjdXN0b21IZWlnaHQ9XCIxXCInIDogJyc7XG5cbiAgICAgICAgICAgIHNoZWV0RGF0YS5wdXNoKGA8cm93IHI9XCIxXCIke3Jvd0hlaWdodH0+YCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihpKSArIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZSh3b3Jrc2hlZXREYXRhLmtleXNbaV0sIGksIHRydWUpO1xuICAgICAgICAgICAgICAgIHNoZWV0RGF0YS5wdXNoKGA8YyByPVwiJHtjb2x1bW59XCIgdD1cInNcIj48dj4ke3ZhbHVlfTwvdj48L2M+YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGVldERhdGEucHVzaCgnPC9yb3c+Jyk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgd29ya3NoZWV0RGF0YS5yb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF3b3Jrc2hlZXREYXRhLmlzVHJlZUdyaWREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoZWV0RGF0YS5wdXNoKGA8cm93IHI9XCIkeyhpICsgMSl9XCIke3Jvd0hlaWdodH0+YCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHdvcmtzaGVldERhdGEuZGF0YVtpIC0gMV0ub3JpZ2luYWxSb3dEYXRhO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzQ29sbGFwc2VkID0gKCFyb3dEYXRhLmV4cGFuZGVkKSA/ICcnIDogKHJvd0RhdGEuZXhwYW5kZWQgPT09IHRydWUpID8gJycgOiBgIGNvbGxhcHNlZD1cIjFcImA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNIaWRkZW4gPSAocm93RGF0YS5wYXJlbnQgJiYgdGhpcy5oYXNDb2xsYXBzZWRQYXJlbnQocm93RGF0YSkpID8gYCBoaWRkZW49XCIxXCJgIDogJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd091dGxpbmVMZXZlbCA9IHJvd0RhdGEubGV2ZWwgPyByb3dEYXRhLmxldmVsIDogMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc091dGxpbmVMZXZlbCA9IHJvd091dGxpbmVMZXZlbCA+IDAgPyBgIG91dGxpbmVMZXZlbD1cIiR7cm93T3V0bGluZUxldmVsfVwiYCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICBtYXhPdXRsaW5lTGV2ZWwgPSBtYXhPdXRsaW5lTGV2ZWwgPCByb3dPdXRsaW5lTGV2ZWwgPyByb3dPdXRsaW5lTGV2ZWwgOiBtYXhPdXRsaW5lTGV2ZWw7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hlZXREYXRhLnB1c2goYDxyb3cgcj1cIiR7KGkgKyAxKX1cIiR7cm93SGVpZ2h0fSR7c091dGxpbmVMZXZlbH0ke3NDb2xsYXBzZWR9JHtzSGlkZGVufT5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbERhdGEgPSBXb3Jrc2hlZXRGaWxlLmdldENlbGxEYXRhKHdvcmtzaGVldERhdGEsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBzaGVldERhdGEucHVzaChjZWxsRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNoZWV0RGF0YS5wdXNoKCc8L3Jvdz4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoZWV0RGF0YS5wdXNoKCc8L3NoZWV0RGF0YT4nKTtcbiAgICAgICAgICAgIGRpbWVuc2lvbiA9ICdBMTonICsgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgLSAxKSArIHdvcmtzaGVldERhdGEucm93Q291bnQ7XG5cbiAgICAgICAgICAgIGNvbHMucHVzaCgnPGNvbHM+Jyk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkaWN0aW9uYXJ5LmNvbHVtbldpZHRoc1tpXTtcbiAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIHByb3ZpZGVkIGluIHRoZSBvcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoSW5Ud2lwcyA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoKCh3aWR0aCAvIDk2KSAqIDE0LjQpLCBXb3Jrc2hlZXRGaWxlLk1JTl9XSURUSCk7XG5cbiAgICAgICAgICAgICAgICBjb2xzLnB1c2goYDxjb2wgbWluPVwiJHsoaSArIDEpfVwiIG1heD1cIiR7KGkgKyAxKX1cIiB3aWR0aD1cIiR7d2lkdGhJblR3aXBzfVwiIGN1c3RvbVdpZHRoPVwiMVwiLz5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29scy5wdXNoKCc8L2NvbHM+Jyk7XG5cbiAgICAgICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLmluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlUGlubmluZyAmJlxuICAgICAgICAgICAgICAgICF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJvemVuQ29sdW1uQ291bnQgPSB3b3Jrc2hlZXREYXRhLmluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICsgMTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENlbGwgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oZnJvemVuQ29sdW1uQ291bnQpICsgJzEnO1xuICAgICAgICAgICAgICAgIGZyZWV6ZVBhbmUgPSBgPHBhbmUgeFNwbGl0PVwiJHtmcm96ZW5Db2x1bW5Db3VudH1cIiB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzVGFibGUgPSAhd29ya3NoZWV0RGF0YS5pc0VtcHR5ICYmIHdvcmtzaGVldERhdGEub3B0aW9ucy5leHBvcnRBc1RhYmxlO1xuXG4gICAgICAgIGZvbGRlci5maWxlKCdzaGVldDEueG1sJyxcbiAgICAgICAgICAgICAgICAgICAgRXhjZWxTdHJpbmdzLmdldFNoZWV0WE1MKGRpbWVuc2lvbiwgZnJlZXplUGFuZSwgY29scy5qb2luKCcnKSwgc2hlZXREYXRhLmpvaW4oJycpLCBoYXNUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgd29ya3NoZWV0RGF0YS5pc1RyZWVHcmlkRGF0YSwgbWF4T3V0bGluZUxldmVsKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNDb2xsYXBzZWRQYXJlbnQocm93RGF0YSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gIXJvd0RhdGEucGFyZW50LmV4cGFuZGVkO1xuICAgICAgICB3aGlsZSAocm93RGF0YS5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCAhcm93RGF0YS5wYXJlbnQuZXhwYW5kZWQ7XG4gICAgICAgICAgICByb3dEYXRhID0gcm93RGF0YS5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW4pICsgKHJvdyArIDEpO1xuICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSB3b3Jrc2hlZXREYXRhLmtleXNbY29sdW1uXTtcblxuICAgICAgICBjb25zdCByb3dEYXRhID0gd29ya3NoZWV0RGF0YS5kYXRhW3JvdyAtIDFdLnJvd0RhdGE7XG5cbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gd29ya3NoZWV0RGF0YS5pc1NwZWNpYWxEYXRhID8gcm93RGF0YSA6IHJvd0RhdGFbY29sdW1uSGVhZGVyXTtcblxuICAgICAgICBpZiAoY2VsbFZhbHVlID09PSB1bmRlZmluZWQgfHwgY2VsbFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgcz1cIjFcIi8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNhdmVkVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjZWxsVmFsdWUsIGNvbHVtbiwgZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgaXNTYXZlZEFzU3RyaW5nID0gc2F2ZWRWYWx1ZSAhPT0gLTE7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXNTYXZlZEFzU3RyaW5nID8gc2F2ZWRWYWx1ZSA6IGNlbGxWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBpc1NhdmVkQXNTdHJpbmcgPyBgIHQ9XCJzXCJgIDogJyc7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBpc1NhdmVkQXNTdHJpbmcgPyAnJyA6IGAgcz1cIjFcImA7XG5cbiAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiR7dHlwZX0ke2Zvcm1hdH0+PHY+JHt2YWx1ZX08L3Y+PC9jPmA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyogdHNsaW50OmVuYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHlsZUZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJ3N0eWxlcy54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0U3R5bGVzKHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnkgJiYgd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeS5oYXNOb25TdHJpbmdWYWx1ZXMpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGZvbGRlci5maWxlKCd3b3JrYm9vay54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2soKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRUeXBlc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJ1tDb250ZW50X1R5cGVzXS54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0Q29udGVudFR5cGVzWE1MKCF3b3Jrc2hlZXREYXRhLmlzRW1wdHksIHdvcmtzaGVldERhdGEub3B0aW9ucy5leHBvcnRBc1RhYmxlKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFNoYXJlZFN0cmluZ3NGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGRpY3QgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICBjb25zdCBzb3J0ZWRWYWx1ZXMgPSBkaWN0LmdldEtleXMoKTtcbiAgICAgICAgY29uc3Qgc2hhcmVkU3RyaW5ncyA9IG5ldyBBcnJheTxzdHJpbmc+KHNvcnRlZFZhbHVlcy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc29ydGVkVmFsdWVzKSB7XG4gICAgICAgICAgICBzaGFyZWRTdHJpbmdzW2RpY3QuZ2V0U2FuaXRpemVkVmFsdWUodmFsdWUpXSA9ICc8c2k+PHQ+JyArIHZhbHVlICsgJzwvdD48L3NpPic7XG4gICAgICAgIH1cblxuICAgICAgICBmb2xkZXIuZmlsZSgnc2hhcmVkU3RyaW5ncy54bWwnLCBFeGNlbFN0cmluZ3MuZ2V0U2hhcmVkU3RyaW5nWE1MKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5zdHJpbmdzQ291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWRWYWx1ZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkU3RyaW5ncy5qb2luKCcnKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgVGFibGVzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBKU1ppcCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBjb2x1bW5Db3VudCA9IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQ7XG4gICAgICAgIGNvbnN0IGxhc3RDb2x1bW4gPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uQ291bnQgLSAxKSArIHdvcmtzaGVldERhdGEucm93Q291bnQ7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbiA9ICdBMTonICsgbGFzdENvbHVtbjtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gd29ya3NoZWV0RGF0YS5rZXlzO1xuICAgICAgICBsZXQgc29ydFN0cmluZyA9ICcnO1xuXG4gICAgICAgIGxldCB0YWJsZUNvbHVtbnMgPSAnPHRhYmxlQ29sdW1ucyBjb3VudD1cIicgKyBjb2x1bW5Db3VudCArICdcIj4nO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gIHZhbHVlc1tpXTtcbiAgICAgICAgICAgIHRhYmxlQ29sdW1ucyArPSAnPHRhYmxlQ29sdW1uIGlkPVwiJyArIChpICsgMSkgKyAnXCIgbmFtZT1cIicgKyB2YWx1ZSArICdcIi8+JztcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlQ29sdW1ucyArPSAnPC90YWJsZUNvbHVtbnM+JztcblxuICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5zb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0aW5nRXhwcmVzc2lvbiA9IHdvcmtzaGVldERhdGEuc29ydDtcbiAgICAgICAgICAgIGNvbnN0IHNjID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHZhbHVlcy5pbmRleE9mKHNvcnRpbmdFeHByZXNzaW9uLmZpZWxkTmFtZSkpO1xuICAgICAgICAgICAgY29uc3QgZGlyID0gc29ydGluZ0V4cHJlc3Npb24uZGlyIC0gMTtcbiAgICAgICAgICAgIHNvcnRTdHJpbmcgPSBgPHNvcnRTdGF0ZSByZWY9XCJBMjoke2xhc3RDb2x1bW59XCI+PHNvcnRDb25kaXRpb24gZGVzY2VuZGluZz1cIiR7ZGlyfVwiIHJlZj1cIiR7c2N9MToke3NjfTE1XCIvPjwvc29ydFN0YXRlPmA7XG4gICAgICAgIH1cblxuICAgICAgICBmb2xkZXIuZmlsZSgndGFibGUxLnhtbCcsIEV4Y2VsU3RyaW5ncy5nZXRUYWJsZXNYTUwoZGltZW5zaW9uLCB0YWJsZUNvbHVtbnMsIHNvcnRTdHJpbmcpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyLmZpbGUoJ3NoZWV0MS54bWwucmVscycsIEV4Y2VsU3RyaW5ncy5nZXRXb3Jrc2hlZXRSZWxzKCkpO1xuICAgIH1cbn1cbiJdfQ==