/* Compiled from: rsx/theme/components/datagrid/datagrid_abstract.jqhtml */ (function() { 'use strict'; const template_DataGrid_Abstract = { _jqhtml_version: '2.2.185', name: 'DataGrid_Abstract', tag: 'div', defaultAttributes: {"class": "card DataGrid"}, render: function render(data, args, content, jqhtml) { let _output = []; const _cid = this._cid; const that = this; _output.push(" "); _output.push({comp: ["Card_Header", {}, function(Card_Header) { let _output = []; _output.push(" "); (() => { const result = content('DG_Card_Header');; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" "); return [_output, this]; }.bind(this)]}); _output.push({tag: ["div", {"class": "card-body p-0"}, false]}); _output.push(" ");_output.push({tag: ["div", {"class": "table-responsive"}, false]}); _output.push(" ");_output.push({tag: ["table", {"class": "table table-hover mb-0"}, false]}); _output.push(" "); _output.push({comp: ["Redrawable", {"id": "datagrid_table_header" + ":" + this._cid, "data-id": "datagrid_table_header", "_tag": "thead"}, function(Redrawable) { let _output = []; _output.push(" "); (() => { const result = content('DG_Table_Header');; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" "); return [_output, this]; }.bind(this)]}); _output.push({comp: ["Redrawable", {"id": "datagrid_table_body" + ":" + this._cid, "data-id": "datagrid_table_body", "class": ((this.data.loading && this.data.rows.length === 0) ? 'is-loading' : (this.data.is_empty ? 'is-empty' : '')), "_tag": "tbody"}, function(Redrawable) { let _output = []; _output.push(" "); if (this.data.loading && this.data.rows.length === 0) { _output.push({tag: ["tr", {"class": "loading-row"}, false]}); _output.push(" "); _output.push({tag: ["td", {"colspan": "999", "class": "text-center py-5"}, false]}); _output.push(" "); _output.push({tag: ["div", {"class": "spinner-border text-primary mb-3", "role": "status"}, false]}); _output.push(" "); _output.push({tag: ["span", {"class": "visually-hidden"}, false]}); _output.push("Loading..."); _output.push(""); _output.push(" "); _output.push(""); _output.push({tag: ["p", {"class": "text-muted"}, false]}); _output.push("Loading..."); _output.push("

"); _output.push(" "); _output.push(""); _output.push(""); } else if (this.data.is_empty) { _output.push({tag: ["tr", {"class": "empty-row"}, false]}); _output.push(" "); _output.push({tag: ["td", {"colspan": "999", "class": "text-center py-5"}, false]}); _output.push(" "); _output.push({tag: ["i", {"class": "bi bi-inbox", "style": "font-size: 3rem; color: #6c757d;"}, false]}); _output.push(""); _output.push(" "); if (this.data.filter) { _output.push({tag: ["p", {"class": "text-muted mt-3"}, false]}); _output.push("No results found for \""); (() => { const result = this.data.filter ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("\""); _output.push("

"); _output.push(" "); _output.push({tag: ["button", {"id": "clear_filter_btn" + ":" + this._cid, "data-id": "clear_filter_btn", "class": "btn btn-sm btn-secondary mt-2"}, false]}); _output.push("Clear Filter"); _output.push(""); _output.push(" "); } else { _output.push({tag: ["p", {"class": "text-muted mt-3"}, false]}); _output.push("No results found"); _output.push("

"); _output.push(" "); } _output.push(""); _output.push(""); } else { for(let row of this.data.rows) { (() => { const result = content('row', row);; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" "); } } return [_output, this]; }.bind(this)]}); _output.push(""); _output.push(""); _output.push(""); _output.push({comp: ["Card_Footer", {}, function(Card_Footer) { let _output = []; _output.push(" "); _output.push({tag: ["div", {"class": "d-flex gap-2 align-items-center"}, false]}); _output.push(" "); _output.push({tag: ["div", {"class": "dropdown"}, false]}); _output.push(" "); _output.push({tag: ["button", {"class": "btn btn-secondary btn-sm dropdown-toggle", "type": "button", "data-bs-toggle": "dropdown"}, false]}); _output.push(" "); _output.push(" Actions "); _output.push(""); _output.push(" "); _output.push({tag: ["ul", {"class": "dropdown-menu"}, false]}); _output.push(" "); _output.push({tag: ["li", {}, false]}); _output.push({tag: ["a", {"class": "dropdown-item", "href": "#"}, false]}); _output.push("Export Selected"); _output.push(""); _output.push(""); _output.push(" "); _output.push({tag: ["li", {}, false]}); _output.push({tag: ["a", {"class": "dropdown-item", "href": "#"}, false]}); _output.push("Delete Selected"); _output.push(""); _output.push(""); _output.push(" "); _output.push({tag: ["li", {}, false]}); _output.push(" "); _output.push({tag: ["hr", {"class": "dropdown-divider"}, true]}); _output.push(" "); _output.push(""); _output.push({tag: ["li", {}, false]}); _output.push({tag: ["a", {"class": "dropdown-item", "href": "#"}, false]}); _output.push("Mark as Active"); _output.push(""); _output.push(""); _output.push(" "); _output.push(""); _output.push(""); _output.push({comp: ["Pagination_Info", {"id": "pagination_info" + ":" + this._cid, "data-id": "pagination_info"}, function(Pagination_Info) { const _output = []; _output.push(" "); if (this.data.total && this.data.page && this.data.per_page) { /* empty line */ const start = ((this.data.page - 1) * this.data.per_page) + 1; const end = Math.min(this.data.page * this.data.per_page, this.data.total); _output.push(" Showing "); (() => { const result = start ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" to "); (() => { const result = end ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" of "); (() => { const result = this.data.total ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" entries "); } _output.push(" "); return [_output, this]; }.bind(this)]}); _output.push(""); _output.push({comp: ["Pagination_Controls", {"id": "pagination_controls" + ":" + this._cid, "data-id": "pagination_controls"}, function(Pagination_Controls) { const _output = []; _output.push(" "); if (this.data.total_pages && this.data.total_pages > 1) { /* empty line */ const currentPage = this.data.page || 1; const totalPages = this.data.total_pages; const maxVisible = 7; // Maximum page numbers to show /* empty line */ // Calculate page range to display let startPage, endPage; /* empty line */ if (totalPages <= maxVisible) { // Show all pages if total is less than max startPage = 1; endPage = totalPages; } else { // Calculate range with current page near center const maxPagesBeforeCurrentPage = Math.floor(maxVisible / 2); const maxPagesAfterCurrentPage = Math.ceil(maxVisible / 2) - 1; /* empty line */ if (currentPage <= maxPagesBeforeCurrentPage) { // Near the start startPage = 1; endPage = maxVisible; } else if (currentPage + maxPagesAfterCurrentPage >= totalPages) { // Near the end startPage = totalPages - maxVisible + 1; endPage = totalPages; } else { // In the middle startPage = currentPage - maxPagesBeforeCurrentPage; endPage = currentPage + maxPagesAfterCurrentPage; } } /* empty line */ // Generate page numbers array const pages = []; for (let i = startPage; i <= endPage; i++) { pages.push(i); } /* empty line */ const showStartEllipsis = startPage > 1; const showEndEllipsis = endPage < totalPages; _output.push({tag: ["li", {"class": "page-item" + (currentPage === 1 ? 'disabled' : '')}, false]}); _output.push(" "); _output.push({tag: ["a", {"class": "page-link", "href": "#", "data-page": (currentPage - 1), "tabindex": (currentPage === 1 ? '-1' : '0')}, false]}); _output.push(" "); _output.push(" Previous "); _output.push(""); _output.push(" "); _output.push(""); if (showStartEllipsis) { _output.push({tag: ["li", {"class": "page-item"}, false]}); _output.push(" "); _output.push({tag: ["a", {"class": "page-link", "href": "#", "data-page": "1"}, false]}); _output.push("1"); _output.push(""); _output.push(" "); _output.push(""); _output.push({tag: ["li", {"class": "page-item disabled"}, false]}); _output.push(" "); _output.push({tag: ["span", {"class": "page-link"}, false]}); _output.push("..."); _output.push(""); _output.push(" "); _output.push(""); } for (let pageNum of pages) { console.log("Loop check", pageNum, currentPage); _output.push({tag: ["li", {"class": "page-item" + (pageNum === currentPage ? 'active' : '')}, false]}); _output.push(" "); _output.push({tag: ["a", {"class": "page-link", "href": "#", "data-page": (pageNum)}, false]}); _output.push(" "); (() => { const result = pageNum ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" "); _output.push(""); _output.push(""); } if (showEndEllipsis) { _output.push({tag: ["li", {"class": "page-item disabled"}, false]}); _output.push(" "); _output.push({tag: ["span", {"class": "page-link"}, false]}); _output.push("..."); _output.push(""); _output.push(" "); _output.push(""); _output.push({tag: ["li", {"class": "page-item"}, false]}); _output.push(" "); _output.push({tag: ["a", {"class": "page-link", "href": "#", "data-page": (totalPages)}, false]}); (() => { const result = totalPages ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(""); _output.push(" "); _output.push(""); } _output.push({tag: ["li", {"class": "page-item" + (currentPage === totalPages ? 'disabled' : '')}, false]}); _output.push(" "); _output.push({tag: ["a", {"class": "page-link", "href": "#", "data-page": (currentPage + 1)}, false]}); _output.push(" "); _output.push(" Next "); _output.push(""); _output.push(" "); _output.push(""); } return [_output, this]; }.bind(this)]}); return [_output, this]; }.bind(this)]}); return [_output, this]; }, dependencies: [] }; // Self-register with jqhtml runtime // Must use window.jqhtml since we're in bundle scope if (!window.jqhtml) { throw new Error('FATAL: window.jqhtml is not defined. The jqhtml runtime must be loaded before registering templates.'); } // Auto-register following standard jqhtml pattern window.jqhtml.register_template(template_DataGrid_Abstract); })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRhdGFncmlkX2Fic3RyYWN0LmpxaHRtbCJdLCJzb3VyY2VzQ29udGVudCI6WyI8IS0tXG5Db250YWN0c19EYXRhR3JpZFxuXG5DdXN0b20gZGF0YWdyaWQgZm9yIGNvbnRhY3RzIHdpdGggc3BlY2lhbGl6ZWQgcm93IHJlbmRlcmluZy5cbldyYXBzIGJhc2UgRGF0YUdyaWQgY29tcG9uZW50LlxuXG5BUkdVTUVOVFM6XG4gICAgJGFwaSAtIEFQSSBjb250cm9sbGVyIGNsYXNzXG4tLT5cbjxEZWZpbmU6RGF0YUdyaWRfQWJzdHJhY3QgY2xhc3M9XCJjYXJkIERhdGFHcmlkXCI+XG5cbiAgICA8Q2FyZF9IZWFkZXI+XG4gICAgICAgIDwlPSBjb250ZW50KCdER19DYXJkX0hlYWRlcicpOyAlPlxuICAgIDwvQ2FyZF9IZWFkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaG92ZXIgbWItMFwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZCAkcmVkcmF3YWJsZSAkaWQ9XCJkYXRhZ3JpZF90YWJsZV9oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPCU9IGNvbnRlbnQoJ0RHX1RhYmxlX0hlYWRlcicpOyAlPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5ICRyZWRyYXdhYmxlICRpZD1cImRhdGFncmlkX3RhYmxlX2JvZHlcIiBjbGFzcz1cIjwlPSAodGhpcy5kYXRhLmxvYWRpbmcgJiYgdGhpcy5kYXRhLnJvd3MubGVuZ3RoID09PSAwKSA/ICdpcy1sb2FkaW5nJyA6ICh0aGlzLmRhdGEuaXNfZW1wdHkgPyAnaXMtZW1wdHknIDogJycpICU+XCI+XG4gICAgICAgICAgICAgICAgICAgIDwlIGlmICh0aGlzLmRhdGEubG9hZGluZyAmJiB0aGlzLmRhdGEucm93cy5sZW5ndGggPT09IDApIHsgJT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImxvYWRpbmctcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI5OTlcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeSBtYi0zXCIgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5Mb2FkaW5nLi4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+TG9hZGluZy4uLjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPCUgfSBlbHNlIGlmICh0aGlzLmRhdGEuaXNfZW1wdHkpIHsgJT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImVtcHR5LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiOTk5XCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktaW5ib3hcIiBzdHlsZT1cImZvbnQtc2l6ZTogM3JlbTsgY29sb3I6ICM2Yzc1N2Q7XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JSBpZiAodGhpcy5kYXRhLmZpbHRlcikgeyAlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIG10LTNcIj5ObyByZXN1bHRzIGZvdW5kIGZvciBcIjwlPSB0aGlzLmRhdGEuZmlsdGVyICU+XCI8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICRpZD1cImNsZWFyX2ZpbHRlcl9idG5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBtdC0yXCI+Q2xlYXIgRmlsdGVyPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwlIH0gZWxzZSB7ICU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbXQtM1wiPk5vIHJlc3VsdHMgZm91bmQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwlIH0gJT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPCUgfSBlbHNlIHsgJT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwlIGZvcihsZXQgcm93IG9mIHRoaXMuZGF0YS5yb3dzKSB7ICU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCU9IGNvbnRlbnQoJ3JvdycsIHJvdyk7ICU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8JSB9ICU+XG4gICAgICAgICAgICAgICAgICAgIDwlIH0gJT5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Q2FyZF9Gb290ZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtIGRyb3Bkb3duLXRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPkV4cG9ydCBTZWxlY3RlZDwvYT48L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIj5EZWxldGUgU2VsZWN0ZWQ8L2E+PC9saT5cbiAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIj5NYXJrIGFzIEFjdGl2ZTwvYT48L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxQYWdpbmF0aW9uX0luZm8gJGlkPVwicGFnaW5hdGlvbl9pbmZvXCI+XG4gICAgICAgICAgICAgICAgPCUgaWYgKHRoaXMuZGF0YS50b3RhbCAmJiB0aGlzLmRhdGEucGFnZSAmJiB0aGlzLmRhdGEucGVyX3BhZ2UpIHsgJT5cbiAgICAgICAgICAgICAgICAgICAgPCVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKCh0aGlzLmRhdGEucGFnZSAtIDEpICogdGhpcy5kYXRhLnBlcl9wYWdlKSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih0aGlzLmRhdGEucGFnZSAqIHRoaXMuZGF0YS5wZXJfcGFnZSwgdGhpcy5kYXRhLnRvdGFsKTtcbiAgICAgICAgICAgICAgICAgICAgJT5cbiAgICAgICAgICAgICAgICAgICAgU2hvd2luZyA8JT0gc3RhcnQgJT4gdG8gPCU9IGVuZCAlPiBvZiA8JT0gdGhpcy5kYXRhLnRvdGFsICU+IGVudHJpZXNcbiAgICAgICAgICAgICAgICA8JSB9ICU+XG4gICAgICAgICAgICA8L1BhZ2luYXRpb25fSW5mbz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPFBhZ2luYXRpb25fQ29udHJvbHMgJGlkPVwicGFnaW5hdGlvbl9jb250cm9sc1wiPlxuICAgICAgICAgICAgPCUgaWYgKHRoaXMuZGF0YS50b3RhbF9wYWdlcyAmJiB0aGlzLmRhdGEudG90YWxfcGFnZXMgPiAxKSB7ICU+XG4gICAgICAgICAgICAgICAgPCVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmRhdGEucGFnZSB8fCAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5kYXRhLnRvdGFsX3BhZ2VzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhWaXNpYmxlID0gNzsgLy8gTWF4aW11bSBwYWdlIG51bWJlcnMgdG8gc2hvd1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlIHJhbmdlIHRvIGRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0UGFnZSwgZW5kUGFnZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodG90YWxQYWdlcyA8PSBtYXhWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG93IGFsbCBwYWdlcyBpZiB0b3RhbCBpcyBsZXNzIHRoYW4gbWF4XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBhZ2UgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcmFuZ2Ugd2l0aCBjdXJyZW50IHBhZ2UgbmVhciBjZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFBhZ2VzQmVmb3JlQ3VycmVudFBhZ2UgPSBNYXRoLmZsb29yKG1heFZpc2libGUgLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFBhZ2VzQWZ0ZXJDdXJyZW50UGFnZSA9IE1hdGguY2VpbChtYXhWaXNpYmxlIC8gMikgLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgPD0gbWF4UGFnZXNCZWZvcmVDdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lYXIgdGhlIHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQYWdlID0gbWF4VmlzaWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgKyBtYXhQYWdlc0FmdGVyQ3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lYXIgdGhlIGVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UGFnZSA9IHRvdGFsUGFnZXMgLSBtYXhWaXNpYmxlICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQYWdlID0gdG90YWxQYWdlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhlIG1pZGRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UGFnZSA9IGN1cnJlbnRQYWdlIC0gbWF4UGFnZXNCZWZvcmVDdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQYWdlID0gY3VycmVudFBhZ2UgKyBtYXhQYWdlc0FmdGVyQ3VycmVudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBwYWdlIG51bWJlcnMgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0UGFnZTsgaSA8PSBlbmRQYWdlOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG93U3RhcnRFbGxpcHNpcyA9IHN0YXJ0UGFnZSA+IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3dFbmRFbGxpcHNpcyA9IGVuZFBhZ2UgPCB0b3RhbFBhZ2VzO1xuICAgICAgICAgICAgICAgICU+XG5cbiAgICAgICAgICAgICAgICA8JS0tIFByZXZpb3VzIGJ1dHRvbiAtLSU+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIDwlPSBjdXJyZW50UGFnZSA9PT0gMSA/ICdkaXNhYmxlZCcgOiAnJyAlPlwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgZGF0YS1wYWdlPVwiPCU9IGN1cnJlbnRQYWdlIC0gMSAlPlwiIHRhYmluZGV4PVwiPCU9IGN1cnJlbnRQYWdlID09PSAxID8gJy0xJyA6ICcwJyAlPlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJldmlvdXNcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICA8JS0tIEZpcnN0IHBhZ2UgKyBlbGxpcHNpcyAtLSU+XG4gICAgICAgICAgICAgICAgPCUgaWYgKHNob3dTdGFydEVsbGlwc2lzKSB7ICU+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIGRhdGEtcGFnZT1cIjFcIj4xPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rXCI+Li4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwlIH0gJT5cblxuICAgICAgICAgICAgICAgIDwlLS0gUGFnZSBudW1iZXJzIC0tJT5cbiAgICAgICAgICAgICAgICA8JSBmb3IgKGxldCBwYWdlTnVtIG9mIHBhZ2VzKSB7ICU+XG4gICAgICAgICAgICAgICAgICAgIDwlIGNvbnNvbGUubG9nKFwiTG9vcCBjaGVja1wiLCBwYWdlTnVtLCBjdXJyZW50UGFnZSk7ICU+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSA8JT0gcGFnZU51bSA9PT0gY3VycmVudFBhZ2UgPyAnYWN0aXZlJyA6ICcnICU+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgZGF0YS1wYWdlPVwiPCU9IHBhZ2VOdW0gJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JT0gcGFnZU51bSAlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwlIH0gJT5cblxuICAgICAgICAgICAgICAgIDwlLS0gRWxsaXBzaXMgKyBsYXN0IHBhZ2UgLS0lPlxuICAgICAgICAgICAgICAgIDwlIGlmIChzaG93RW5kRWxsaXBzaXMpIHsgJT5cbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIGRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGlua1wiPi4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgZGF0YS1wYWdlPVwiPCU9IHRvdGFsUGFnZXMgJT5cIj48JT0gdG90YWxQYWdlcyAlPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8JSB9ICU+XG5cbiAgICAgICAgICAgICAgICA8JS0tIE5leHQgYnV0dG9uIC0tJT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gPCU9IGN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzID8gJ2Rpc2FibGVkJyA6ICcnICU+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiBkYXRhLXBhZ2U9XCI8JT0gY3VycmVudFBhZ2UgKyAxICU+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBOZXh0XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICA8L1BhZ2luYXRpb25fQ29udHJvbHM+XG4gICAgPC9DYXJkX0Zvb3Rlcj5cblxuPC9EZWZpbmU6RGF0YUdyaWRfQWJzdHJhY3Q+Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsIm5hbWVzIjpbXX0=