!function(t,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n(require("jQuery"));else if("function"==typeof define&&define.amd)define(["jQuery"],n);else{var e="object"==typeof exports?n(require("jQuery")):n(t.jQuery);for(var A in e)("object"==typeof exports?exports:t)[A]=e[A]}}(self,(function(__WEBPACK_EXTERNAL_MODULE_jquery__){return function(){var __webpack_modules__={"./libs/datatables-bs5/datatables-bootstrap5.js":function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataTable: function() { return /* reexport safe */ datatables_net_bs5__WEBPACK_IMPORTED_MODULE_3__["default"]; },\n/* harmony export */ JSZip: function() { return /* reexport default from dynamic */ jszip__WEBPACK_IMPORTED_MODULE_0___default.a; },\n/* harmony export */ pdfFonts: function() { return /* reexport default from dynamic */ pdfmake_build_vfs_fonts__WEBPACK_IMPORTED_MODULE_2___default.a; },\n/* harmony export */ pdfMake: function() { return /* reexport default from dynamic */ pdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_1___default.a; }\n/* harmony export */ });\n/* harmony import */ var jszip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jszip */ "./node_modules/jszip/dist/jszip.min.js");\n/* harmony import */ var jszip__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jszip__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var pdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! pdfmake/build/pdfmake */ "./node_modules/pdfmake/build/pdfmake.js");\n/* harmony import */ var pdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(pdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var pdfmake_build_vfs_fonts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! pdfmake/build/vfs_fonts */ "./node_modules/pdfmake/build/vfs_fonts.js");\n/* harmony import */ var pdfmake_build_vfs_fonts__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(pdfmake_build_vfs_fonts__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var datatables_net_bs5__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! datatables.net-bs5 */ "./node_modules/datatables.net-bs5/js/dataTables.bootstrap5.mjs");\n/* harmony import */ var datatables_net_fixedcolumns_bs5__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! datatables.net-fixedcolumns-bs5 */ "./node_modules/datatables.net-fixedcolumns-bs5/js/fixedColumns.bootstrap5.mjs");\n/* harmony import */ var datatables_net_fixedheader_bs5__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! datatables.net-fixedheader-bs5 */ "./node_modules/datatables.net-fixedheader-bs5/js/fixedHeader.bootstrap5.mjs");\n/* harmony import */ var datatables_net_select_bs5__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! datatables.net-select-bs5 */ "./node_modules/datatables.net-select-bs5/js/select.bootstrap5.mjs");\n/* harmony import */ var datatables_net_buttons__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! datatables.net-buttons */ "./node_modules/datatables.net-buttons/js/dataTables.buttons.mjs");\n/* harmony import */ var datatables_net_buttons_bs5__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! datatables.net-buttons-bs5 */ "./node_modules/datatables.net-buttons-bs5/js/buttons.bootstrap5.mjs");\n/* harmony import */ var datatables_net_buttons_js_buttons_html5__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! datatables.net-buttons/js/buttons.html5 */ "./node_modules/datatables.net-buttons/js/buttons.html5.js");\n/* harmony import */ var datatables_net_buttons_js_buttons_html5__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(datatables_net_buttons_js_buttons_html5__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var datatables_net_buttons_js_buttons_print__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! datatables.net-buttons/js/buttons.print */ "./node_modules/datatables.net-buttons/js/buttons.print.js");\n/* harmony import */ var datatables_net_buttons_js_buttons_print__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(datatables_net_buttons_js_buttons_print__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var datatables_net_responsive__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! datatables.net-responsive */ "./node_modules/datatables.net-responsive/js/dataTables.responsive.mjs");\n/* harmony import */ var datatables_net_responsive_bs5__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! datatables.net-responsive-bs5 */ "./node_modules/datatables.net-responsive-bs5/js/responsive.bootstrap5.mjs");\n/* harmony import */ var datatables_net_rowgroup_bs5__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! datatables.net-rowgroup-bs5 */ "./node_modules/datatables.net-rowgroup-bs5/js/rowGroup.bootstrap5.mjs");\n// Core libraries\n\n\n\n\n// DataTables libraries (with related plugins)\n\n\n\n\n\n\n\n\n\n\n\n\n// Attach libraries to the window object (if needed globally)\ntry {\n window.pdfMake = (pdfmake_build_pdfmake__WEBPACK_IMPORTED_MODULE_1___default());\n window.pdfFonts = (pdfmake_build_vfs_fonts__WEBPACK_IMPORTED_MODULE_2___default());\n window.JSZip = (jszip__WEBPACK_IMPORTED_MODULE_0___default());\n} catch (e) {}\n\n// Export the libraries/modules\n\n\n//# sourceURL=webpack://Vuexy/./libs/datatables-bs5/datatables-bootstrap5.js?')},"./node_modules/datatables.net-buttons/js/buttons.html5.js":function(module,exports,__webpack_require__){eval('var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * HTML5 export buttons for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n *\n * FileSaver.js (1.3.3) - MIT license\n * Copyright © 2016 Eli Grey - http://eligrey.com\n */\n\n(function( factory ){\n\tif ( true ) {\n\t\t// AMD\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "jquery"), __webpack_require__(/*! datatables.net */ "./node_modules/datatables.net/js/dataTables.mjs"), __webpack_require__(/*! datatables.net-buttons */ "./node_modules/datatables.net-buttons/js/dataTables.buttons.mjs")], __WEBPACK_AMD_DEFINE_RESULT__ = (function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t}\n\telse { var cjsRequires, jq; }\n}(function( $, window, document ) {\n\'use strict\';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Allow the constructor to pass in JSZip and PDFMake from external requires.\n// Otherwise, use globally defined variables, if they are available.\nvar useJszip;\nvar usePdfmake;\n\nfunction _jsZip() {\n\treturn useJszip || window.JSZip;\n}\nfunction _pdfMake() {\n\treturn usePdfmake || window.pdfMake;\n}\n\nDataTable.Buttons.pdfMake = function (_) {\n\tif (!_) {\n\t\treturn _pdfMake();\n\t}\n\tusePdfmake = _;\n};\n\nDataTable.Buttons.jszip = function (_) {\n\tif (!_) {\n\t\treturn _jsZip();\n\t}\n\tuseJszip = _;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * FileSaver.js dependency\n */\n\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\nvar _saveAs = (function (view) {\n\t\'use strict\';\n\t// IE <10 is explicitly unsupported\n\tif (\n\t\ttypeof view === \'undefined\' ||\n\t\t(typeof navigator !== \'undefined\' &&\n\t\t\t/MSIE [1-9]\\./.test(navigator.userAgent))\n\t) {\n\t\treturn;\n\t}\n\tvar doc = view.document,\n\t\t// only get URL when necessary in case Blob.js hasn\'t overridden it yet\n\t\tget_URL = function () {\n\t\t\treturn view.URL || view.webkitURL || view;\n\t\t},\n\t\tsave_link = doc.createElementNS(\'http://www.w3.org/1999/xhtml\', \'a\'),\n\t\tcan_use_save_link = \'download\' in save_link,\n\t\tclick = function (node) {\n\t\t\tvar event = new MouseEvent(\'click\');\n\t\t\tnode.dispatchEvent(event);\n\t\t},\n\t\tis_safari = /constructor/i.test(view.HTMLElement) || view.safari,\n\t\tis_chrome_ios = /CriOS\\/[\\d]+/.test(navigator.userAgent),\n\t\tthrow_outside = function (ex) {\n\t\t\t(view.setImmediate || view.setTimeout)(function () {\n\t\t\t\tthrow ex;\n\t\t\t}, 0);\n\t\t},\n\t\tforce_saveable_type = \'application/octet-stream\',\n\t\t// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to\n\t\tarbitrary_revoke_timeout = 1000 * 40, // in ms\n\t\trevoke = function (file) {\n\t\t\tvar revoker = function () {\n\t\t\t\tif (typeof file === \'string\') {\n\t\t\t\t\t// file is an object URL\n\t\t\t\t\tget_URL().revokeObjectURL(file);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// file is a File\n\t\t\t\t\tfile.remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetTimeout(revoker, arbitrary_revoke_timeout);\n\t\t},\n\t\tdispatch = function (filesaver, event_types, event) {\n\t\t\tevent_types = [].concat(event_types);\n\t\t\tvar i = event_types.length;\n\t\t\twhile (i--) {\n\t\t\t\tvar listener = filesaver[\'on\' + event_types[i]];\n\t\t\t\tif (typeof listener === \'function\') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlistener.call(filesaver, event || filesaver);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tthrow_outside(ex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tauto_bom = function (blob) {\n\t\t\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\n\t\t\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n\t\t\tif (\n\t\t\t\t/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n\t\t\t\t\tblob.type\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn new Blob([String.fromCharCode(0xfeff), blob], {\n\t\t\t\t\ttype: blob.type\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn blob;\n\t\t},\n\t\tFileSaver = function (blob, name, no_auto_bom) {\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\t// First try a.download, then web filesystem, then object URLs\n\t\t\tvar filesaver = this,\n\t\t\t\ttype = blob.type,\n\t\t\t\tforce = type === force_saveable_type,\n\t\t\t\tobject_url,\n\t\t\t\tdispatch_all = function () {\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\tfilesaver,\n\t\t\t\t\t\t\'writestart progress write writeend\'.split(\' \')\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t// on any filesys errors revert to saving with object URLs\n\t\t\t\tfs_error = function () {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(is_chrome_ios || (force && is_safari)) &&\n\t\t\t\t\t\tview.FileReader\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Safari doesn\'t allow downloading of blob urls\n\t\t\t\t\t\tvar reader = new FileReader();\n\t\t\t\t\t\treader.onloadend = function () {\n\t\t\t\t\t\t\tvar url = is_chrome_ios\n\t\t\t\t\t\t\t\t? reader.result\n\t\t\t\t\t\t\t\t: reader.result.replace(\n\t\t\t\t\t\t\t\t\t\t/^data:[^;]*;/,\n\t\t\t\t\t\t\t\t\t\t\'data:attachment/file;\'\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tvar popup = view.open(url, \'_blank\');\n\t\t\t\t\t\t\tif (!popup) view.location.href = url;\n\t\t\t\t\t\t\turl = undefined; // release reference before dispatching\n\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\tdispatch_all();\n\t\t\t\t\t\t};\n\t\t\t\t\t\treader.readAsDataURL(blob);\n\t\t\t\t\t\tfilesaver.readyState = filesaver.INIT;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// don\'t create more object URLs than needed\n\t\t\t\t\tif (!object_url) {\n\t\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\t}\n\t\t\t\t\tif (force) {\n\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar opened = view.open(object_url, \'_blank\');\n\t\t\t\t\t\tif (!opened) {\n\t\t\t\t\t\t\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\n\t\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t};\n\t\t\tfilesaver.readyState = filesaver.INIT;\n\n\t\t\tif (can_use_save_link) {\n\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tsave_link.href = object_url;\n\t\t\t\t\tsave_link.download = name;\n\t\t\t\t\tclick(save_link);\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfs_error();\n\t\t},\n\t\tFS_proto = FileSaver.prototype,\n\t\tsaveAs = function (blob, name, no_auto_bom) {\n\t\t\treturn new FileSaver(\n\t\t\t\tblob,\n\t\t\t\tname || blob.name || \'download\',\n\t\t\t\tno_auto_bom\n\t\t\t);\n\t\t};\n\t// IE 10+ (native saveAs)\n\tif (typeof navigator !== \'undefined\' && navigator.msSaveOrOpenBlob) {\n\t\treturn function (blob, name, no_auto_bom) {\n\t\t\tname = name || blob.name || \'download\';\n\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\treturn navigator.msSaveOrOpenBlob(blob, name);\n\t\t};\n\t}\n\n\tFS_proto.abort = function () {};\n\tFS_proto.readyState = FS_proto.INIT = 0;\n\tFS_proto.WRITING = 1;\n\tFS_proto.DONE = 2;\n\n\tFS_proto.error =\n\t\tFS_proto.onwritestart =\n\t\tFS_proto.onprogress =\n\t\tFS_proto.onwrite =\n\t\tFS_proto.onabort =\n\t\tFS_proto.onerror =\n\t\tFS_proto.onwriteend =\n\t\t\tnull;\n\n\treturn saveAs;\n})(\n\t(typeof self !== \'undefined\' && self) ||\n\t\t(typeof window !== \'undefined\' && window) ||\n\t\tthis.content\n);\n\n// Expose file saver on the DataTables API. Can\'t attach to `DataTables.Buttons`\n// since this file can be loaded before Button\'s core!\nDataTable.fileSave = _saveAs;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Local (private) functions\n */\n\n/**\n * Get the sheet name for Excel exports.\n *\n * @param {object}\tconfig Button configuration\n */\nvar _sheetname = function (config) {\n\tvar sheetName = \'Sheet1\';\n\n\tif (config.sheetName) {\n\t\tsheetName = config.sheetName.replace(/[\\[\\]\\*\\/\\\\\\?\\:]/g, \'\');\n\t}\n\n\treturn sheetName;\n};\n\n/**\n * Get the newline character(s)\n *\n * @param {object}\tconfig Button configuration\n * @return {string}\t\t\t\tNewline character\n */\nvar _newLine = function (config) {\n\treturn config.newline\n\t\t? config.newline\n\t\t: navigator.userAgent.match(/Windows/)\n\t\t? \'\\r\\n\'\n\t\t: \'\\n\';\n};\n\n/**\n * Combine the data from the `buttons.exportData` method into a string that\n * will be used in the export file.\n *\n * @param\t{DataTable.Api} dt\t\t DataTables API instance\n * @param\t{object}\t\t\t\tconfig Button configuration\n * @return {object}\t\t\t\t\t\t\t The data to export\n */\nvar _exportData = function (dt, config) {\n\tvar newLine = _newLine(config);\n\tvar data = dt.buttons.exportData(config.exportOptions);\n\tvar boundary = config.fieldBoundary;\n\tvar separator = config.fieldSeparator;\n\tvar reBoundary = new RegExp(boundary, \'g\');\n\tvar escapeChar = config.escapeChar !== undefined ? config.escapeChar : \'\\\\\';\n\tvar join = function (a) {\n\t\tvar s = \'\';\n\n\t\t// If there is a field boundary, then we might need to escape it in\n\t\t// the source data\n\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\ts += separator;\n\t\t\t}\n\n\t\t\ts += boundary\n\t\t\t\t? boundary +\n\t\t\t\t(\'\' + a[i]).replace(reBoundary, escapeChar + boundary) +\n\t\t\t\tboundary\n\t\t\t\t: a[i];\n\t\t}\n\n\t\treturn s;\n\t};\n\n\tvar header = \'\';\n\tvar footer = \'\';\n\tvar body = [];\n\n\tif (config.header) {\n\t\theader =\n\t\t\tdata.headerStructure\n\t\t\t\t.map(function (row) {\n\t\t\t\t\treturn join(\n\t\t\t\t\t\trow.map(function (cell) {\n\t\t\t\t\t\t\treturn cell ? cell.title : \'\';\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.join(newLine) + newLine;\n\t}\n\n\tif (config.footer && data.footer) {\n\t\tfooter =\n\t\t\tdata.footerStructure\n\t\t\t\t.map(function (row) {\n\t\t\t\t\treturn join(\n\t\t\t\t\t\trow.map(function (cell) {\n\t\t\t\t\t\t\treturn cell ? cell.title : \'\';\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.join(newLine) + newLine;\n\t}\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tbody.push(join(data.body[i]));\n\t}\n\n\treturn {\n\t\tstr: header + body.join(newLine) + newLine + footer,\n\t\trows: body.length\n\t};\n};\n\n/**\n * Older versions of Safari (prior to tech preview 18) don\'t support the\n * download option required.\n *\n * @return {Boolean} `true` if old Safari\n */\nvar _isDuffSafari = function () {\n\tvar safari =\n\t\tnavigator.userAgent.indexOf(\'Safari\') !== -1 &&\n\t\tnavigator.userAgent.indexOf(\'Chrome\') === -1 &&\n\t\tnavigator.userAgent.indexOf(\'Opera\') === -1;\n\n\tif (!safari) {\n\t\treturn false;\n\t}\n\n\tvar version = navigator.userAgent.match(/AppleWebKit\\/(\\d+\\.\\d+)/);\n\tif (version && version.length > 1 && version[1] * 1 < 603.1) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Convert from numeric position to letter for column names in Excel\n * @param {int} n Column number\n * @return {string} Column letter(s) name\n */\nfunction createCellPos(n) {\n\tvar ordA = \'A\'.charCodeAt(0);\n\tvar ordZ = \'Z\'.charCodeAt(0);\n\tvar len = ordZ - ordA + 1;\n\tvar s = \'\';\n\n\twhile (n >= 0) {\n\t\ts = String.fromCharCode((n % len) + ordA) + s;\n\t\tn = Math.floor(n / len) - 1;\n\t}\n\n\treturn s;\n}\n\ntry {\n\tvar _serialiser = new XMLSerializer();\n\tvar _ieExcel;\n} catch (t) {\n\t// noop\n}\n\n/**\n * Recursively add XML files from an object\'s structure to a ZIP file. This\n * allows the XSLX file to be easily defined with an object\'s structure matching\n * the files structure.\n *\n * @param {JSZip} zip ZIP package\n * @param {object} obj Object to add (recursive)\n */\nfunction _addToZip(zip, obj) {\n\tif (_ieExcel === undefined) {\n\t\t// Detect if we are dealing with IE\'s _awful_ serialiser by seeing if it\n\t\t// drop attributes\n\t\t_ieExcel =\n\t\t\t_serialiser\n\t\t\t\t.serializeToString(\n\t\t\t\t\tnew window.DOMParser().parseFromString(\n\t\t\t\t\t\texcelStrings[\'xl/worksheets/sheet1.xml\'],\n\t\t\t\t\t\t\'text/xml\'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.indexOf(\'xmlns:r\') === -1;\n\t}\n\n\t$.each(obj, function (name, val) {\n\t\tif ($.isPlainObject(val)) {\n\t\t\tvar newDir = zip.folder(name);\n\t\t\t_addToZip(newDir, val);\n\t\t}\n\t\telse {\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE\'s XML serialiser will drop some name space attributes from\n\t\t\t\t// from the root node, so we need to save them. Do this by\n\t\t\t\t// replacing the namespace nodes with a regular attribute that\n\t\t\t\t// we convert back when serialised. Edge does not have this\n\t\t\t\t// issue\n\t\t\t\tvar worksheet = val.childNodes[0];\n\t\t\t\tvar i, ien;\n\t\t\t\tvar attrs = [];\n\n\t\t\t\tfor (i = worksheet.attributes.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar attrName = worksheet.attributes[i].nodeName;\n\t\t\t\t\tvar attrValue = worksheet.attributes[i].nodeValue;\n\n\t\t\t\t\tif (attrName.indexOf(\':\') !== -1) {\n\t\t\t\t\t\tattrs.push({ name: attrName, value: attrValue });\n\n\t\t\t\t\t\tworksheet.removeAttribute(attrName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0, ien = attrs.length; i < ien; i++) {\n\t\t\t\t\tvar attr = val.createAttribute(\n\t\t\t\t\t\tattrs[i].name.replace(\':\', \'_dt_b_namespace_token_\')\n\t\t\t\t\t);\n\t\t\t\t\tattr.value = attrs[i].value;\n\t\t\t\t\tworksheet.setAttributeNode(attr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar str = _serialiser.serializeToString(val);\n\n\t\t\t// Fix IE\'s XML\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE doesn\'t include the XML declaration\n\t\t\t\tif (str.indexOf(\'\' +\n\t\t\t\t\t\tstr;\n\t\t\t\t}\n\n\t\t\t\t// Return namespace attributes to being as such\n\t\t\t\tstr = str.replace(/_dt_b_namespace_token_/g, \':\');\n\n\t\t\t\t// Remove testing name space that IE puts into the space preserve attr\n\t\t\t\tstr = str.replace(/xmlns:NS[\\d]+="" NS[\\d]+:/g, \'\');\n\t\t\t}\n\n\t\t\t// Safari, IE and Edge will put empty name space attributes onto\n\t\t\t// various elements making them useless. This strips them out\n\t\t\tstr = str.replace(/<([^<>]*?) xmlns=""([^<>]*?)>/g, \'<$1 $2>\');\n\n\t\t\tzip.file(name, str);\n\t\t}\n\t});\n}\n\n/**\n * Create an XML node and add any children, attributes, etc without needing to\n * be verbose in the DOM.\n *\n * @param {object} doc XML document\n * @param {string} nodeName Node name\n * @param {object} opts Options - can be `attr` (attributes), `children`\n * (child nodes) and `text` (text content)\n * @return {node} Created node\n */\nfunction _createNode(doc, nodeName, opts) {\n\tvar tempNode = doc.createElement(nodeName);\n\n\tif (opts) {\n\t\tif (opts.attr) {\n\t\t\t$(tempNode).attr(opts.attr);\n\t\t}\n\n\t\tif (opts.children) {\n\t\t\t$.each(opts.children, function (key, value) {\n\t\t\t\ttempNode.appendChild(value);\n\t\t\t});\n\t\t}\n\n\t\tif (opts.text !== null && opts.text !== undefined) {\n\t\t\ttempNode.appendChild(doc.createTextNode(opts.text));\n\t\t}\n\t}\n\n\treturn tempNode;\n}\n\n/**\n * Get the width for an Excel column based on the contents of that column\n * @param {object} data Data for export\n * @param {int} col Column index\n * @return {int} Column width\n */\nfunction _excelColWidth(data, col) {\n\tvar max = data.header[col].length;\n\tvar len, lineSplit, str;\n\n\tif (data.footer && data.footer[col] && data.footer[col].length > max) {\n\t\tmax = data.footer[col].length;\n\t}\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tvar point = data.body[i][col];\n\t\tstr = point !== null && point !== undefined ? point.toString() : \'\';\n\n\t\t// If there is a newline character, workout the width of the column\n\t\t// based on the longest line in the string\n\t\tif (str.indexOf(\'\\n\') !== -1) {\n\t\t\tlineSplit = str.split(\'\\n\');\n\t\t\tlineSplit.sort(function (a, b) {\n\t\t\t\treturn b.length - a.length;\n\t\t\t});\n\n\t\t\tlen = lineSplit[0].length;\n\t\t}\n\t\telse {\n\t\t\tlen = str.length;\n\t\t}\n\n\t\tif (len > max) {\n\t\t\tmax = len;\n\t\t}\n\n\t\t// Max width rather than having potentially massive column widths\n\t\tif (max > 40) {\n\t\t\treturn 54; // 40 * 1.35\n\t\t}\n\t}\n\n\tmax *= 1.35;\n\n\t// And a min width\n\treturn max > 6 ? max : 6;\n}\n\n// Excel - Pre-defined strings to build a basic XLSX file\nvar excelStrings = {\n\t\'_rels/.rels\':\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\',\n\n\t\'xl/_rels/workbook.xml.rels\':\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\',\n\n\t\'[Content_Types].xml\':\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\',\n\n\t\'xl/workbook.xml\':\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\',\n\n\t\'xl/worksheets/sheet1.xml\':\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\',\n\n\t\'xl/styles.xml\':\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' + // Excel appears to use this as a dotted background regardless of values but\n\t\t\'\' + // to be valid to the schema, use a patternFill\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\' +\n\t\t\'\'\n};\n// Note we could use 3 `for` loops for the styles, but when gzipped there is\n// virtually no difference in size, since the above can be easily compressed\n\n// Pattern matching for special number formats. Perhaps this should be exposed\n// via an API in future?\n// Ref: section 3.8.30 - built in formatters in open spreadsheet\n// https://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf\nvar _excelSpecials = [\n\t{\n\t\tmatch: /^\\-?\\d+\\.\\d%$/,\n\t\tstyle: 60,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent with d.p.\n\t{\n\t\tmatch: /^\\-?\\d+\\.?\\d*%$/,\n\t\tstyle: 56,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent\n\t{ match: /^\\-?\\$[\\d,]+.?\\d*$/, style: 57 }, // Dollars\n\t{ match: /^\\-?£[\\d,]+.?\\d*$/, style: 58 }, // Pounds\n\t{ match: /^\\-?€[\\d,]+.?\\d*$/, style: 59 }, // Euros\n\t{ match: /^\\-?\\d+$/, style: 65 }, // Numbers without thousand separators\n\t{ match: /^\\-?\\d+\\.\\d{2}$/, style: 66 }, // Numbers 2 d.p. without thousands separators\n\t{\n\t\tmatch: /^\\([\\d,]+\\)$/,\n\t\tstyle: 61,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, \'\');\n\t\t}\n\t}, // Negative numbers indicated by brackets\n\t{\n\t\tmatch: /^\\([\\d,]+\\.\\d{2}\\)$/,\n\t\tstyle: 62,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, \'\');\n\t\t}\n\t}, // Negative numbers indicated by brackets - 2d.p.\n\t{ match: /^\\-?[\\d,]+$/, style: 63 }, // Numbers with thousand separators\n\t{ match: /^\\-?[\\d,]+\\.\\d{2}$/, style: 64 },\n\t{\n\t\tmatch: /^(19\\d\\d|[2-9]\\d\\d\\d)\\-(0\\d|1[012])\\-[0123][\\d]$/,\n\t\tstyle: 67,\n\t\tfmt: function (d) {\n\t\t\treturn Math.round(25569 + Date.parse(d) / (86400 * 1000));\n\t\t}\n\t} //Date yyyy-mm-dd\n];\n\nvar _excelMergeCells = function (rels, row, column, rowspan, colspan) {\n\tvar mergeCells = $(\'mergeCells\', rels);\n\n\tmergeCells[0].appendChild(\n\t\t_createNode(rels, \'mergeCell\', {\n\t\t\tattr: {\n\t\t\t\tref:\n\t\t\t\t\tcreateCellPos(column) +\n\t\t\t\t\trow +\n\t\t\t\t\t\':\' +\n\t\t\t\t\tcreateCellPos(column + colspan - 1) +\n\t\t\t\t\t(row + rowspan - 1)\n\t\t\t}\n\t\t})\n\t);\n\n\tmergeCells.attr(\'count\', parseFloat(mergeCells.attr(\'count\')) + 1);\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Buttons\n */\n\n//\n// Copy to clipboard\n//\nDataTable.ext.buttons.copyHtml5 = {\n\tclassName: \'buttons-copy buttons-html5\',\n\n\ttext: function (dt) {\n\t\treturn dt.i18n(\'buttons.copy\', \'Copy\');\n\t},\n\n\taction: function (e, dt, button, config, cb) {\n\t\tvar exportData = _exportData(dt, config);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar newline = _newLine(config);\n\t\tvar output = exportData.str;\n\t\tvar hiddenDiv = $(\'
\').css({\n\t\t\theight: 1,\n\t\t\twidth: 1,\n\t\t\toverflow: \'hidden\',\n\t\t\tposition: \'fixed\',\n\t\t\ttop: 0,\n\t\t\tleft: 0\n\t\t});\n\n\t\tif (info.title) {\n\t\t\toutput = info.title + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageTop) {\n\t\t\toutput = info.messageTop + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\toutput = output + newline + newline + info.messageBottom;\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tvar textarea = $(\'