Benchmark

This example compares performance of different grids

This example compares performance of different grids
<!DOCTYPE html> <html lang="en"> <head> <base href="/dataviewsjs/demos/en/sample/Benchmarks/Grid/purejs/" /> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="description" content="This example compares performance of different grids" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Grid | Benchmarks | MESCIUS DataViewsJS JavaScript Demos</title> <link href="/dataviewsjs/demos/node_modules/normalize.css/normalize.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/css/base.css" rel="stylesheet" type="text/css" /> <link href="https://cdn.jsdelivr.net/npm/ag-grid@18.1.2/dist/styles/ag-grid.css" rel="stylesheet" type="text/css" /> <link href="https://cdn.jsdelivr.net/npm/ag-grid@18.1.2/dist/styles/theme-fresh.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/node_modules/devextreme/dist/css/dx.common.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/node_modules/devextreme/dist/css/dx.light.css" rel="stylesheet" type="text/css" /> <link href="//cdn-na.infragistics.com/igniteui/latest/css/themes/infragistics/infragistics.theme.css" rel="stylesheet" type="text/css" /> <link href="//cdn-na.infragistics.com/igniteui/latest/css/structure/infragistics.css" rel="stylesheet" type="text/css" /> <link href="//cdn.syncfusion.com/15.4.0.17/js/web/flat-azure/ej.web.all.min.css" rel="stylesheet" type="text/css" /> <link href="https://cdn.mescius.com/wijmo/5.20191.615/styles/wijmo.min.css" rel="stylesheet" type="text/css" /> <link href="https://cdn.jsdelivr.net/npm/slickgrid@2.4.10/slick.grid.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/dataviews/gc.dataviews.core.min.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/dataviews/gc.dataviews.grid.min.css" rel="stylesheet" type="text/css" /> <link href="styles.css" rel="stylesheet" type="text/css" /> <script src="/dataviewsjs/demos/static/js/app-polyfills.min.js" type="text/javascript"></script> <script type="text/javascript"> window.process = { env: { NODE_ENV: 'production', USE_NPM: false, USE_CDN: false, SITE_ROOT: '/dataviewsjs/demos', FRAMEWORK: 'purejs', DVJS_LICENSE_KEY: 'E348418822993781#B0EWvwY4dNNVQqJHUDpFROVWe5ZWNYFlVQFmRsJWRht4Z6lDO4Vla7YUaXhEWxd7Z5YXMuRnY7tWTQRHSlVnaYlXNhlEOpdkZ0FHWYJ5QKd6VXN5aR3ieGhUav9kZTBXWahkYBhEVutmZ72CbjdlZvV5TVdGdiplQsZXe95kUmNmZVF5cJ3mcypWNyx4UydESE3UblxGZyE7KQ94R4BjbUxUewsiaoREMxRDNllWREV6Voh4Q4dDZPRjWrIzUJl4TERXcQZWMHp4Sp9WaMZzN5o6StJmVDJXcwIVVmR6UMVGOlxUW8RmTxZDZTJWVN5GZqJHZuVDMkVGSW3WdxNzKCdDdSB7TzY7cqlnMU5GVyNzNP9WMyhDRvEEOFdkQORDM4dFVlFFWqFWSyMjNQJiOiMlIsISQyIkQ9YjQxIiOigkIsUTM7YjNxYTM0IicfJye&amp;Qf35VfikFVVljI0IyQiwiIxYHITp4c7VWaWFGdhRkI0IiTis7W0ICZyBlIsIiNxUTN6ADI8EDMxMjMwIjI0ICdyNkIsIyc59yc5l6YzVWbuoCLwpmLzVXajNXZt9iKs2WauMXdpN6cl5mLqwSbvNmLzVXajNXZt9iKsAnau26YuMXdpN6cl5mLqwSbvNmL6VGZ9RXajVGchJ7ZuoCLuNmLt36YukHdpNWZwFmcn9iKs46bj9Se4l6YlBXYydmLqwicr9ybj9Se4l6YlBXYydmLqwCcq9ybj9Se4l6YlBXYydmLqIiOiMXbEJCLiMVVJN4UF5kI0ISYONkIsUWdyRnOiwmdFJCLiEDO7MTO9IjM8gTM4gDNzIiOiQWSisnOiQkIsISP3EkVxBVUHFDMplzLlVUdGd7cI9UeIt4SshESzV7NvY7ZxlDOuNTb5tzLr', SJS_LICENSE_KEY: 'E518585142165236#B0wm4nx4QzdlTHRTSOFzcvVnaJdjSnNEeXdTMUtSUzk6bU94QuVXNwZVZjd4SzYjcadXRIVEMzEXTThkVyR7R85UayoHZZBTYQ5mZyh4Shd6VxFXazF4cBNGRG5WTvUGTsV4T6knQYRzKxxUdk9EarplU7d6VLF6KIR7bPJ5N6ZUMWZWaURGRKRDbLJDN5YjSN5mUoxmaxonSD56LEh7Y7RXenpmTvomevZlV9dkaysCO7hTRQFHcGRWQyc5LI9kQmB7QwR4Z7ZHOR3CSXp6SiFWYzFXeXZUSp94K8VDTkFjdwl4KptSYlRWcDxmNE5kS6kzdrkVcNJXROVGbLJkcTNGRzIER8tmd4YGNhh7dxAnMvIHRv46VtBXS4U5KvJ6dZJ6M5p4TxIjd9I5QSpXTTV6SDZXb7lzaL56ZiojITJCLikTQxUTQFV4NiojIIJCLyETO7UzM7kTO0IicfJye&amp;Qf35VfikkR9IkI0IyQiwiIyEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsISNwkTN6ADI8EDMxMjMwIjI0ICdyNkIsIyc59yc5l6YzVWbuoCLwpmLzVXajNXZt9iKs2WauMXdpN6cl5mLqwSbvNmLzVXajNXZt9iKsAnau26YuMXdpN6cl5mLqwSbvNmL6VGZ9RXajVGchJ7ZuoCLuNmLt36YukHdpNWZwFmcn9iKs46bj9Se4l6YlBXYydmLqwicr9ybj9Se4l6YlBXYydmLqwCcq9ybj9Se4l6YlBXYydmLqIiOiMXbEJCLiMVVJN4UF5kI0ISYONkIsUWdyRnOiwmdFJCLiYzMyUjNxIDNxUDO5gTM5IiOiQWSiwSfdtlOicGbmJCLlNHbhZmOiI7ckJye0ICbuFkI1pjIEJCLi4TPRtGOhtWWEFWd4IDOLRVRvx4SyMGcDhTW6n4ep', }, }; </script> <script src="/dataviewsjs/demos/node_modules/jquery/dist/jquery.min.js" type="text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/ag-grid-enterprise@21.0.1/dist/ag-grid-enterprise.js" type="text/javascript" ></script> <script src="/dataviewsjs/demos/node_modules/devextreme/dist/js/dx.all.debug.js" type="text/javascript"></script> <script src="//www.igniteui.com/js/modernizr.min.js" type="text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/jqueryui@1.11.1/jquery-ui.min.js" type="text/javascript"></script> <script src="//cdn-na.infragistics.com/igniteui/latest/js/infragistics.core.js" type="text/javascript"></script> <script src="//cdn-na.infragistics.com/igniteui/latest/js/infragistics.lob.js" type="text/javascript"></script> <script src="https://ajax.aspnetcdn.com/ajax/globalize/0.1.1/globalize.min.js" type="text/javascript"></script> <script src="//cdn.syncfusion.com/js/assets/external/jsrender.min.js" type="text/javascript"></script> <script src="//cdn.syncfusion.com/15.4.0.17/js/web/ej.web.all.min.js" type="text/javascript"></script> <script src="https://cdn.mescius.com/wijmo/5.20191.615/controls/wijmo.min.js" type="text/javascript"></script> <script src="https://cdn.mescius.com/wijmo/5.20191.615/controls/wijmo.input.min.js" type="text/javascript"></script> <script src="https://cdn.mescius.com/wijmo/5.20191.615/controls/wijmo.grid.min.js" type="text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/slickgrid@2.4.10/lib/jquery.event.drag-2.3.0.js" type="text/javascript" ></script> <script src="https://cdn.jsdelivr.net/npm/slickgrid@2.4.10/slick.core.min.js" type="text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/slickgrid@2.4.10/slick.grid.min.js" type="text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/slickgrid@2.4.10/slick.dataview.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/node_modules/lodash/lodash.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/node_modules/platform/platform.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/node_modules/benchmark/benchmark.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/node_modules/bowser/es5.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/js/jsperf.ui.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/dataviews/gc.dataviews.common.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/dataviews/gc.dataviews.core.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/dataviews/gc.dataviews.grid.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/js/license.js" type="text/javascript"></script> </head> <body class="theme-default"> <noscript>You need to enable JavaScript to run this app.</noscript> <section id="runner"> <h2>Test runner</h2> <div id="options"> <div class="option"> <label>Category</label> <select id="test-category" value="render"> <option value="render">Rendering</option> <option value="sort">Sorting + Rendering</option> <option value="filter">Filtering + Rendering</option> <option value="group">Grouping + Rendering</option> </select> </div> <div class="option"> <label>Data size</label> <select id="data-size" value="1000"> <option value="1000">1000</option> <option value="10000">10000</option> <option value="100000">100000</option> </select> </div> </div> <p id="firebug"> <strong>Warning! For accurate results, please disable Firebug before running the tests.</strong> </p> <p id="java"><strong>Java applet disabled.</strong></p> <div id="test-container"> <div id="controls"> <div id="status"></div> <button id="run" type="button">Run again</button> </div> <table id="test-table"> <caption></caption> <thead> <tr> <th>Test</th> <th title="Operations per second (higher is better)">Ops/sec</th> </tr> </thead> <tbody></tbody> </table> <div id="error-info"></div> </div> </section> <script src="app.js" type="text/javascript"></script> </body> </html>
var countries = ['US', 'Germany', 'UK', 'Japan', 'Italy']; var products = ['Widget', 'Gadget', 'Doohickey']; var colors = ['Black', 'White', 'Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Brown']; function generateData(size) { var data = []; var year = new Date().getFullYear(); for (var i = 0; i < size; i++) { data.push({ id: i, date: new Date(year, i % 12, 1), country: countries[Math.floor(Math.random() * countries.length)], product: products[Math.floor(Math.random() * products.length)], color: colors[Math.floor(Math.random() * colors.length)], amount: 1000 + Math.random() * 10000, big: Math.random() > 0.5, }); } return data; } var dataSize = parseInt($('#data-size').val(), 10); var data = generateData(dataSize); $('#data-size').change(function () { var dataSize = parseInt($('#data-size').val(), 10); data = generateData(dataSize); }); function destroyGrid() { var container = document.getElementById('grid'); if (!container) { return; } var grid = container.grid; if (grid && grid.destroy) { grid.destroy(); } if (grid && grid.dispose) { grid.dispose(); } container.parentNode.removeChild(container); } window.onunload = destroyGrid; function currentCategory() { return $('#test-category').val(); } var gridWidth = 600; var gridHeight = 380; function createContainer(className) { var container = document.createElement('div'); container.id = 'grid'; container.className = 'grid ' + (className || ''); container.style.width = gridWidth; container.style.height = gridHeight; document.body.appendChild(container); return container; } function dataViewCase() { var cols = [ { id: 'id', caption: 'ID', dataField: 'id', width: 80, }, { id: 'date', caption: 'Date', dataField: 'date', width: 120, }, { id: 'country', caption: 'Country', dataField: 'country', width: 80, }, { id: 'product', caption: 'Product', dataField: 'product', width: 80, }, { id: 'color', caption: 'Color', dataField: 'color', width: 80, }, { id: 'amount', caption: 'Amount', dataField: 'amount', width: 80, }, { id: 'big', caption: 'Big', dataField: 'big', width: 80, }, ]; var fn = function fn() { destroyGrid(); var category = currentCategory(); var container = createContainer(); var layout = new GC.DataViews.GridLayout({ allowSorting: true, sorting: category === 'sort' ? [ { field: 'country', ascending: true, }, ] : undefined, filtering: category === 'filter' ? "[country] = 'US' && [product] = 'Widget' && [amount] > 5000" : undefined, grouping: category === 'group' ? [ { field: 'country', collapsed: true, }, { field: 'product', collapsed: true, }, ] : undefined, }); var grid = new GC.DataViews.DataView(container, data, cols, layout); container.grid = grid; return grid; }; return { name: 'DataViewsJS', homepage: 'http://developer.mescius.com/dataviewsjs', fn: fn, onComplete: destroyGrid, }; } function agGridCase() { var fn = function fn() { destroyGrid(); var category = currentCategory(); var container = createContainer('ag-theme-fresh'); var cols = [ { colId: 'id', headerName: 'ID', field: 'id', width: 80, }, { colId: 'date', headerName: 'Date', field: 'date', width: 120, }, { colId: 'country', headerName: 'Country', field: 'country', width: 80, filter: 'agTextColumnFilter', }, { colId: 'product', headerName: 'Product', field: 'product', width: 80, filter: 'agTextColumnFilter', }, { colId: 'color', headerName: 'Color', field: 'color', width: 80, }, { colId: 'amount', headerName: 'Amount', field: 'amount', width: 80, filter: 'agNumberColumnFilter', }, { colId: 'big', headerName: 'Big', field: 'big', width: 80, }, ]; var gridOptions = { columnDefs: cols, rowData: data, defaultColDef: { sortable: true, filter: true, }, groupUseEntireRow: true, groupDefaultExpanded: 0, }; var grid = new agGrid.Grid(container, gridOptions); container.grid = grid; if (category === 'sort') { var sort = [ { colId: 'country', sort: 'asc', }, ]; gridOptions.api.setSortModel(sort); } else if (category === 'filter') { var countryFilter = gridOptions.api.getFilterInstance('country'); countryFilter.setModel({ type: 'equals', filter: 'US', }); var productFilter = gridOptions.api.getFilterInstance('product'); productFilter.setModel({ type: 'equals', filter: 'Widget', }); var amountFilter = gridOptions.api.getFilterInstance('amount'); amountFilter.setModel({ type: 'greaterThan', filter: 5000, }); gridOptions.api.onFilterChanged(); } else if (category === 'group') { gridOptions.columnApi.addRowGroupColumn(gridOptions.columnApi.getColumn('country')); gridOptions.columnApi.addRowGroupColumn(gridOptions.columnApi.getColumn('product')); } return grid; }; return { name: 'ag-Grid', homepage: 'http://www.ag-grid.com/', fn: fn, onComplete: destroyGrid, }; } function devExtremeCase() { var cols = [ { name: 'id', caption: 'ID', dataField: 'id', width: 80, }, { name: 'date', caption: 'Date', dataField: 'date', width: 120, }, { name: 'country', caption: 'Country', dataField: 'country', width: 80, allowSorting: true, }, { name: 'product', caption: 'Product', dataField: 'product', width: 80, }, { name: 'color', caption: 'Color', dataField: 'color', width: 80, }, { name: 'amount', caption: 'Amount', dataField: 'amount', width: 80, }, { name: 'big', caption: 'Big', dataField: 'big', width: 80, }, ]; var fn = function fn(done) { destroyGrid(); var category = currentCategory(); var container = createContainer(); var renderedRows = 0; var options = { columns: cols, dataSource: data, loadPanel: { enabled: false, }, scrolling: { mode: 'virtual', }, paging: { enabled: false, }, width: gridWidth, height: gridHeight, onRowPrepared: function onRowPrepared() { renderedRows++; done.resolve(); }, }; $(container).dxDataGrid(options); var grid = $(container).dxDataGrid('instance'); if (category === 'sort') { grid.beginUpdate(); grid.columnOption('country', 'sortIndex', 0); grid.columnOption('country', 'sortOrder', 'asc'); grid.endUpdate(); } else if (category === 'filter') { grid.filter([['country', '=', 'US'], 'and', ['product', '=', 'Widget'], 'and', ['amount', '>', '5000']]); } else if (category === 'group') { grid.beginUpdate(); grid.columnOption('country', 'groupIndex', 0); grid.columnOption('product', 'groupIndex', 1); grid.endUpdate(); } }; return { name: 'DevExpress Grid', homepage: 'http://js.devexpress.com/WebDevelopment/DataGrid/', defer: true, fn: fn, onComplete: destroyGrid, }; } function infragisticsCase() { var columnsDefs = [ { headerText: 'ID', key: 'id', width: 80, }, { headerText: 'Date', key: 'date', width: 120, }, { headerText: 'Country', key: 'country', dataType: 'string', width: 80, }, { headerText: 'Product', key: 'product', width: 80, }, { headerText: 'Color', key: 'color', width: 80, }, { headerText: 'Amount', key: 'amount', dataType: 'number', width: 80, }, { headerText: 'Big', key: 'big', width: 80, }, ]; var option = { autoGenerateColumns: false, width: gridWidth, //allowFiltering: true, columns: columnsDefs, dataSource: data, features: [ { name: 'Sorting', type: 'local', columnSettings: [], }, { name: 'Filtering', type: 'local', mode: 'advanced', columnSettings: [], }, { name: 'GroupBy', columnSettings: [], }, ], }; var fn = function fn() { destroyGrid(); var category = currentCategory(); var container = createContainer(); $(container).igGrid(option); var grid = $(container).data('igGrid'); container.grid = grid; $('.ui-iggrid-groupbyarea').hide(); if (category === 'sort') { $(container).igGridSorting('sortColumn', 'country', 'asc'); } else if (category === 'filter') { $(container).igGridFiltering('filter', [ { fieldName: 'country', expr: 'US', cond: 'equals', logic: 'AND', }, { fieldName: 'product', expr: 'Widget', cond: 'equals', logic: 'AND', }, { fieldName: 'amount', expr: 5000, cond: 'greaterThan', logic: 'AND', }, ]); } else if (category === 'group') { $(container).igGridGroupBy('groupByColumn', 'country'); $(container).igGridGroupBy('groupByColumn', 'product'); } return grid; }; return { name: 'IgniteUI Grid', homepage: 'http://www.igniteui.com/grid/overview', fn: fn, onComplete: destroyGrid, }; } function syncfusionCase() { var cols = [ { field: 'id', headerText: 'ID', isPrimaryKey: true, width: 80, }, { field: 'date', binding: 'Date', width: 120, }, { field: 'country', headerText: 'Country', width: 80, allowSorting: true, }, { field: 'product', headerText: 'Product', width: 80, }, { field: 'color', headerText: 'Color', width: 80, }, { field: 'amount', headerText: 'Amount', width: 80, }, { field: 'big', headerText: 'Big', width: 80, }, ]; var options = { dataSource: data, allowPaging: false, allowSorting: true, allowFiltering: true, allowGrouping: true, columns: cols, }; var fn = function fn() { destroyGrid(); var category = currentCategory(); var container = createContainer(); $(container).ejGrid(options); var grid = $(container).data('ejGrid'); container.grid = grid; if (category === 'sort') { grid.sortColumn('country', 'ascending'); } else if (category === 'filter') { grid.filterColumn([ { field: 'country', operator: 'equal', value: 'US', predicate: 'and', matchcase: true, }, { field: 'product', operator: 'equal', value: 'Widget', predicate: 'and', matchcase: true, }, { field: 'amount', operator: 'greaterthan', value: '5000', predicate: 'and', matchcase: true, }, ]); } else if (category === 'group') { grid.groupColumn('country'); grid.groupColumn('product'); } }; return { name: 'syncfusion', homepage: 'http://www.syncfusion.com/products/javascript/ejgrid', fn: fn, onComplete: destroyGrid, }; } function wijmoCase() { var cols = [ { header: 'ID', binding: 'id', width: 80, }, { header: 'Date', binding: 'date', width: 120, }, { header: 'Country', binding: 'country', width: 80, }, { header: 'Product', binding: 'product', width: 80, }, { header: 'Color', binding: 'color', width: 80, }, { header: 'Amount', binding: 'amount', width: 80, }, { header: 'Big', binding: 'big', width: 80, }, ]; var fn = function fn() { destroyGrid(); var category = currentCategory(); var container = createContainer(); var grid = new wijmo.grid.FlexGrid(container); var cv = new wijmo.collections.CollectionView(data); grid.initialize({ autoGenerateColumns: false, columns: cols, itemsSource: cv, }); if (category === 'sort') { cv.sortDescriptions.splice(0, 1, new wijmo.collections.SortDescription('country', true)); } else if (category === 'filter') { cv.filter = function (item) { return item.country === 'US' && item.product === 'Widget' && item.amount > 5000; }; } else if (category === 'group') { cv.groupDescriptions.push(new wijmo.collections.PropertyGroupDescription('country')); cv.groupDescriptions.push(new wijmo.collections.PropertyGroupDescription('product')); // grid.collapseGroupsToLevel(0); } }; return { name: 'Wijmo FlexGrid', homepage: 'http://wijmo.com/products/wijmo-5/', fn: fn, onComplete: destroyGrid, }; } function slickGridCase() { var cols = [ { id: 'id', name: 'ID', field: 'id', width: 80, }, { id: 'date', name: 'Date', field: 'date', width: 120, }, { id: 'country', name: 'Country', field: 'country', sortable: true, width: 80, }, { id: 'product', name: 'Product', field: 'product', width: 80, }, { id: 'color', name: 'Color', field: 'color', width: 80, }, { id: 'amount', name: 'Amount', field: 'amount', width: 80, }, { id: 'big', name: 'Big', field: 'big', width: 80, }, ]; var options = { editable: true, enableCellNavigation: true, asyncEditorLoading: false, enableColumnReorder: false, autoEdit: true, }; var fn = function fn() { destroyGrid(); var category = currentCategory(); var container = createContainer(); var dataView = new Slick.Data.DataView(); dataView.setItems(data); var grid = new Slick.Grid(container, dataView, cols, options); if (category === 'sort') { var comparer = function comparer(a, b) { var v1 = a.country; var v2 = b.country; return v1 > v2 ? -1 : v1 < v2 ? +1 : 0; }; grid.getData().sort(comparer, false); grid.invalidateAllRows(); grid.render(); } else if (category === 'filter') { var myFilter = function myFilter(item) { return item.country === 'US' && item.product === 'Widget' && item.amount > 5000; }; grid.getData().setFilter(myFilter); grid.invalidateAllRows(); grid.render(); } }; return { name: 'slickGrid', homepage: 'http://slickgrid.net/', fn: fn, onComplete: destroyGrid, }; } $(function () { window.ui.add(dataViewCase()); window.ui.add(agGridCase()); window.ui.add(infragisticsCase()); window.ui.add(syncfusionCase()); window.ui.add(wijmoCase()); window.ui.add(slickGridCase()); });
html, body, h1, h2, h3, fieldset, #faq, #faq dt, #faq dd { margin: 0; padding: 0; border: 0; } table, p, ul, h1, h2, h3, #error-info, form div, #faq, .bs-rt { margin-bottom: 1em; } button, input, textarea, a, .bs-rt { border-radius: 4px; } html, input, textarea, button { font: 1em/1.5 sans-serif; } body { background: #fff; padding: 0 2.5em; margin: 0 auto; min-height: 100%; } a, .btn-link { color: #357ab0; padding: 0.2em; } a:hover, a:focus, .btn-link:hover, .btn-link:focus { text-decoration: none; } .btn-link { background-color: transparent; border: 0; text-decoration: underline; } .btn-link:hover, .btn-link:focus { cursor: pointer; } blockquote { margin: 0 0 1em; border-left: 5px solid #b4b4b4; padding-left: 0.5em; } table { border-collapse: collapse; } thead th, button:hover, button:focus, .submit:hover, .submit:focus, a:hover, a:focus, .btn-link:hover, .btn-link:focus, #comments .meta a:hover, #comments .meta a:focus, li.current a:hover, li.current a:focus, form h3, #comments .owner .meta { background: #1a6ab9; background-image: linear-gradient(top, #6ca5dd, #1a6ab9); color: #fff; } caption, #comments .meta { background: #bcbcbc; background-image: linear-gradient(top, #d0d0d0, #a7a7a7); color: #555; } thead th, caption { font-weight: bold; } .js tbody th:hover, .js tbody th:focus { text-decoration: underline; cursor: pointer; } tbody th, td { border: solid #b4b4b4; border-width: 0 1px 1px 0; } tbody th { background: #dde4ea; width: 150px; } td.results { text-align: center; border-right: 0; } .results span, small { display: block; font-size: 0.8em; } td, th, caption { padding: 0.2em 0.5em; } td.fastest { background: #9cee82; } tr:last-child td, tr:last-child th { border-bottom: 0; } td.slowest, td.error, .invalid { background: pink; } /* needs its own rule because of buggy IE */ :focus:invalid { background: pink; } td.error { text-transform: uppercase; font-weight: bold; } button, .submit { padding: 0.35em 0.5em; cursor: pointer; color: #000; border: 1px solid #999; background: #dadada; background-image: linear-gradient(top, #ebebeb, #b8b8b8); } .login { padding: 0.35em 0.5em; text-decoration: none; cursor: pointer; color: #000; border: 1px solid #999; background: #dadada; background-image: linear-gradient(top, #ebebeb, #b8b8b8); } a:hover span, a:focus span, #comments .owner .meta a { color: #fff; } #options { display: flex; align-items: center; flex-wrap: wrap; } #options label, #options select { margin-right: 5px; } #options .option { display: inline-block; margin-bottom: 0.5em; } #test-container { display: flex; flex-direction: column; max-width: 800px; } #test-table { flex: 1 1; width: 100%; margin: 0.5em 0; } #controls { display: flex; align-items: center; justify-content: space-between; flex: 1 1; width: 100%; margin: 0.5em 0; } .buttons { float: right; } button:hover, button:focus, .submit:hover, .submit:focus { border-color: #357ab0; } #add-buttons button { padding: 0.15em 0.4em; font-size: 11px; font-weight: bold; } form label { float: left; width: 14em; cursor: pointer; text-align: right; margin-right: 1em; padding: 0.4em; } label.inline { float: none; padding: 0; margin: 0; } label[for=visible], label[for$="][defer]"] { position: relative; top: -0.37em; } label span { display: block; font-size: 90%; color: #b4b4b4; } label em { color: red; font-style: normal; } .js #advanced { display: none; } #show-advanced { display: none; } .js #show-advanced { display: block; } section { display: block; margin: 2em 0; } textarea { resize: vertical; height: 15em; width: 42.6em; *width: 42.4em; /* IE < 8 */ } input, textarea { border: 1px solid #b4b4b4; padding: 0.4em; } input[type=search] { -webkit-appearance: none; } #visible, #calibrate { /* checkboxes, for IE */ border: 0; padding: 0; } form h2, form h3, form h4, p.error, .preview, #add-libraries, #add-buttons { padding-left: 250px; display: block; } hgroup h2, #firebug, #java { display: none; } pre { width: 100%; overflow: auto; white-space: pre; white-space: pre-wrap; word-wrap: break-word; } table #results-1 { width: 100px; } table pre { *padding: 1.5em 0; /* IE < 8 */ *overflow-y: hidden; /* IE < 8 */ } table pre, table td.code { width: 600px; } mark { background: #ff9; padding: 0.2em 0.1em; } h1, h2, h3, h4 { font-weight: bold; font-size: 1em; } h1 { padding-top: 1em; font-size: 1.4em; } form h3 { padding-top: 0.2em; padding-bottom: 0.2em; } h1 em { font-style: normal; } h1 strong { font-style: italic; font-family: Monaco, "Lucida Console", monospace; } li.current a { background: #90ee85; } footer { display: block; margin-top: 2em; border-top: 2px solid #c4c4c4; font-size: 0.9em; overflow: hidden; } footer ul { list-style: none; padding: 0; margin: 0; } footer > ul > li { float: left; width: 15%; } footer > ul > li:first-child { width: 55%; } footer ul ul li { margin-bottom: 0.1em; } footer h4 { margin-bottom: 0.2em; } #add-test { margin-right: 0.3em; } #bs-chart { overflow: auto; } #bs-chart-frame { height: 240px; width: 100%; } #bs-logo { margin: 0; } #bs-logo span, applet { position: absolute; left: -9999em; } #bs-logo a { display: block; width: 232px; height: 39px; filter: none; background: url(//www.browserscope.org/static/img/logo.png) 0 0 no-repeat; } #bs-ua { padding: 0.5em 0.5em 0; color: #555; } #bs-results .bs-rt { font-size: 10pt; padding: 0.5em; background: #ddd; } #bs-results td { border: 1px solid #ddd; padding: 0.4em; white-space: nowrap; } #bs-results .rt-ua-cur { font-style: italic; font-weight: bold; } #bs-results .bs-rt-message { padding: 3em; text-align: center; font-weight: bold; color: #555; } #bs-results .google-visualization-table-tr-head td { white-space: normal; } #comments h1 { padding: 0; } #comments .meta img { position: absolute; left: 0; top: 0; margin: 0; } #comments .meta img { top: 2px; left: 2px; } #comments .meta { padding-left: 35px; margin-top: 0; width: 923px; line-height: 30px; } #comments .meta a { font-weight: bold; color: #555; } #comments article div { padding: 0 1em 0; } #comments article { display: block; border: 1px solid #b4b4b4; position: relative; margin-bottom: 1em; } /* needs its own rule (cannot be grouped with `tbody th`) because of buggy IE */ #comments article:target { background: #dde4ea; } #error-info.show, .meta strong, #firebug strong, #java strong, #status strong { background: pink; border: 1px solid #b00b00; padding: 0.4em; } #error-info.show { padding: 0.5em 1em; } #error-info, code, samp, var, textarea, #slug { font-family: Monaco, monospace; font-size: 0.9em; -moz-tab-size: 2; tab-size: 2; } #java strong { background: #ffffdc; border: 1px solid #faa700; } #slug { font-size: 1em; } #faq dt { margin-top: 1em; font-weight: bold; } #faq dt a { display: none; } #faq dt:hover a { display: inline; } #faq dt:target, #faq dt:target + dd { background: #90ee85; margin: 0 -0.8em; padding: 0 0.8em; } #faq dt:target + dd { padding-bottom: 0.5em; margin-bottom: -0.5em; } #faq dt:target { margin-top: 0.5em; padding-top: 0.5em; } #firebug, #java { margin: 0 0 1em; padding: 0.3em 0; } #prep-code pre { max-height: 500px; overflow: auto; } #firebug.show, #java.show { display: block; } .co1, .co2, .coMULTI { font-style: italic; color: #060; } .error { color: #b00b00; } .imp { color: red; } .kw1, .kw3 { color: #006; } .kw2 { color: #036; } .es0 { color: #009; } .br0 { color: #090; } .sy0 { color: #393; } .st0 { color: #36c; } .nu0 { color: #c00; } .me1 { color: #606; } #carbonads { float: right; width: 130px; font-size: 80%; } #carbonads a { display: block; } /* < 1051px */ @media (max-width: 1050px) { table pre, table td.code { width: 550px; } } /* < 1041px */ @media (max-width: 1040px) { body { margin: 0; border: 0; } body, #comments .meta { width: 100%; box-sizing: border-box; } } /* < 801px */ @media (max-width: 800px) { table pre, table td.code { width: 450px; } } /* < 681px */ @media (max-width: 680px) { table pre, table td.code { width: 350px; } } /* < 651px */ @media (max-width: 650px) { table pre, table td.code { width: 200px; } } /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkdyaWQvcHVyZWpzL2J1aWxkLmpzb24iLCJHcmlkL3B1cmVqcy9idWlsZC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztFQVNFLFNBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTtBQ0NGOztBREVBOzs7Ozs7Ozs7O0VBVUUsa0JBQUE7QUNDRjs7QURFQTs7Ozs7RUFPRSxrQkFBQTtBQ0NGOztBREVBOzs7O0VBSUUsd0JBQUE7QUNDRjs7QURFQTtFQUNFLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7QUNDRjs7QURFQTs7RUFFRSxjQUFBO0VBQ0EsY0FBQTtBQ0NGOztBREVBOzs7O0VBSUUscUJBQUE7QUNDRjs7QURFQTtFQUNFLDZCQUFBO0VBQ0EsU0FBQTtFQUNBLDBCQUFBO0FDQ0Y7O0FERUE7O0VBRUUsZUFBQTtBQ0NGOztBREVBO0VBQ0UsZUFBQTtFQUNBLDhCQUFBO0VBQ0EsbUJBQUE7QUNDRjs7QURFQTtFQUNFLHlCQUFBO0FDQ0Y7O0FERUE7Ozs7Ozs7Ozs7Ozs7OztFQWVFLG1CQUFBO0VBQ0Esd0RBQUE7RUFDQSxXQUFBO0FDQ0Y7O0FERUE7O0VBRUUsbUJBQUE7RUFDQSx3REFBQTtFQUNBLFdBQUE7QUNDRjs7QURFQTs7RUFFRSxpQkFBQTtBQ0NGOztBREVBOztFQUVFLDBCQUFBO0VBQ0EsZUFBQTtBQ0NGOztBREVBOztFQUVFLHFCQUFBO0VBQ0EseUJBQUE7QUNDRjs7QURFQTtFQUNFLG1CQUFBO0VBQ0EsWUFBQTtBQ0NGOztBREVBO0VBQ0Usa0JBQUE7RUFDQSxlQUFBO0FDQ0Y7O0FERUE7O0VBRUUsY0FBQTtFQUNBLGdCQUFBO0FDQ0Y7O0FERUE7OztFQUdFLG9CQUFBO0FDQ0Y7O0FERUE7RUFDRSxtQkFBQTtBQ0NGOztBREVBOztFQUVFLGdCQUFBO0FDQ0Y7O0FERUE7OztFQUdFLGdCQUFBO0FDQ0Y7O0FERUEsMkNBQUE7QUFDQTtFQUNFLGdCQUFBO0FDQ0Y7O0FERUE7RUFDRSx5QkFBQTtFQUNBLGlCQUFBO0FDQ0Y7O0FERUE7O0VBRUUscUJBQUE7RUFDQSxlQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0EsbUJBQUE7RUFDQSx3REFBQTtBQ0NGOztBREVBO0VBQ0UscUJBQUE7RUFDQSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxXQUFBO0VBQ0Esc0JBQUE7RUFDQSxtQkFBQTtFQUNBLHdEQUFBO0FDQ0Y7O0FERUE7OztFQUdFLFdBQUE7QUNDRjs7QURFQTtFQUNFLGFBQUE7RUFDQSxtQkFBQTtFQUNBLGVBQUE7QUNDRjtBRENFOztFQUVFLGlCQUFBO0FDQ0o7QURFRTtFQUNFLHFCQUFBO0VBQ0Esb0JBQUE7QUNBSjs7QURJQTtFQUNFLGFBQUE7RUFDQSxzQkFBQTtFQUNBLGdCQUFBO0FDREY7O0FESUE7RUFDRSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7QUNERjs7QURJQTtFQUNFLGFBQUE7RUFDQSxtQkFBQTtFQUNBLDhCQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FDREY7O0FESUE7RUFDRSxZQUFBO0FDREY7O0FESUE7Ozs7RUFJRSxxQkFBQTtBQ0RGOztBRElBO0VBQ0UscUJBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7QUNERjs7QURJQTtFQUNFLFdBQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0EsaUJBQUE7RUFDQSxjQUFBO0FDREY7O0FESUE7RUFDRSxXQUFBO0VBQ0EsVUFBQTtFQUNBLFNBQUE7QUNERjs7QURJQTs7RUFFRSxrQkFBQTtFQUNBLFlBQUE7QUNERjs7QURJQTtFQUNFLGNBQUE7RUFDQSxjQUFBO0VBQ0EsY0FBQTtBQ0RGOztBRElBO0VBQ0UsVUFBQTtFQUNBLGtCQUFBO0FDREY7O0FESUE7RUFDRSxhQUFBO0FDREY7O0FESUE7RUFDRSxhQUFBO0FDREY7O0FESUE7RUFDRSxjQUFBO0FDREY7O0FESUE7RUFDRSxjQUFBO0VBQ0EsYUFBQTtBQ0RGOztBRElBO0VBQ0UsZ0JBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtHQUNBLGFB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RUY7O0FEQ0E7RUFDRSxpQkFBQTtFQUNBLGtCQUFBO0FDRUY7O0FEQ0E7O0VBRUUsZUFBQTtFQUNBLGdCQUFBO0FDRUY7O0FEQ0E7RUFDRSxpQkFBQTtFQUNBLGNBQUE7QUNFRjs7QURDQTs7RUFFRSxjQUFBO0FDRUY7O0FEQ0E7OztFQUdFLGtCQUFBO0VBQ0EsV0FBQTtBQ0VGOztBRENBO0VBQ0UsY0FBQTtBQ0VGOztBRENBO0VBQ0UsVUFBQTtBQ0VGOztBRENBOztFQUVFLFdBQUE7QUNFRjs7QURDQTtFQUNFLFdBQUE7QUNFRjs7QURDQTtFQUNFLFdBQUE7QUNFRjs7QURDQTtFQUNFLFdBQUE7QUNFRjs7QURDQTtFQUNFLFdBQUE7QUNFRjs7QURDQTtFQUNFLFdBQUE7QUNFRjs7QURDQTtFQUNFLFdBQUE7QUNFRjs7QURDQTtFQUNFLFdBQUE7QUNFRjs7QURDQTtFQUNFLFlBQUE7RUFDQSxZQUFBO0VBQ0EsY0FBQTtBQ0VGOztBRENBO0VBQ0UsY0FBQTtBQ0VGOztBRENBLGFBQUE7QUFDQTtFQUNFOztJQUVFLFlBQUE7RUNFRjtBQUNGO0FEQ0EsYUFBQTtBQUNBO0VBQ0U7SUFDRSxTQUFBO0lBQ0EsU0FBQTtFQ0NGOztFREVBOztJQUVFLFdBQUE7SUFHQSxzQkFBQTtFQ0NGO0FBQ0Y7QURFQSxZQUFBO0FBQ0E7RUFDRTs7SUFFRSxZQUFBO0VDQUY7QUFDRjtBREdBLFlBQUE7QUFDQTtFQUNFOztJQUVFLFlBQUE7RUNERjtBQUNGO0FESUEsWUFBQTtBQUNBO0VBQ0U7O0lBRUUsWUFBQTtFQ0ZGO0FBQ0YiLCJmaWxlIjoiR3JpZC9wdXJlanMvc3R5bGVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImh0bWwsXG5ib2R5LFxuaDEsXG5oMixcbmgzLFxuZmllbGRzZXQsXG4jZmFxLFxuI2ZhcSBkdCxcbiNmYXEgZGQge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxudGFibGUsXG5wLFxudWwsXG5oMSxcbmgyLFxuaDMsXG4jZXJyb3ItaW5mbyxcbmZvcm0gZGl2LFxuI2ZhcSxcbi5icy1ydCB7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbn1cblxuYnV0dG9uLFxuaW5wdXQsXG50ZXh0YXJlYSxcbmEsXG4uYnMtcnQge1xuICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuaHRtbCxcbmlucHV0LFxudGV4dGFyZWEsXG5idXR0b24ge1xuICBmb250OiAxZW0vMS41IHNhbnMtc2VyaWY7XG59XG5cbmJvZHkge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBwYWRkaW5nOiAwIDIuNWVtO1xuICBtYXJnaW46IDAgYXV0bztcbiAgbWluLWhlaWdodDogMTAwJTtcbn1cblxuYSxcbi5idG4tbGluayB7XG4gIGNvbG9yOiAjMzU3YWIwO1xuICBwYWRkaW5nOiAwLjJlbTtcbn1cblxuYTpob3ZlcixcbmE6Zm9jdXMsXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5idG4tbGluayB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmJsb2NrcXVvdGUge1xuICBtYXJnaW46IDAgMCAxZW07XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2I0YjRiNDtcbiAgcGFkZGluZy1sZWZ0OiAwLjVlbTtcbn1cblxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xufVxuXG50aGVhZCB0aCxcbmJ1dHRvbjpob3ZlcixcbmJ1dHRvbjpmb2N1cyxcbi5zdWJtaXQ6aG92ZXIsXG4uc3VibWl0OmZvY3VzLFxuYTpob3ZlcixcbmE6Zm9jdXMsXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMsXG4jY29tbWVudHMgLm1ldGEgYTpob3ZlcixcbiNjb21tZW50cyAubWV0YSBhOmZvY3VzLFxubGkuY3VycmVudCBhOmhvdmVyLFxubGkuY3VycmVudCBhOmZvY3VzLFxuZm9ybSBoMyxcbiNjb21tZW50cyAub3duZXIgLm1ldGEge1xuICBiYWNrZ3JvdW5kOiAjMWE2YWI5O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjNmNhNWRkLCAjMWE2YWI5KTtcbiAgY29sb3I6ICNmZmY7XG59XG5cbmNhcHRpb24sXG4jY29tbWVudHMgLm1ldGEge1xuICBiYWNrZ3JvdW5kOiAjYmNiY2JjO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZDBkMGQwLCAjYTdhN2E3KTtcbiAgY29sb3I6ICM1NTU7XG59XG5cbnRoZWFkIHRoLFxuY2FwdGlvbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uanMgdGJvZHkgdGg6aG92ZXIsXG4uanMgdGJvZHkgdGg6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG50Ym9keSB0aCxcbnRkIHtcbiAgYm9yZGVyOiBzb2xpZCAjYjRiNGI0O1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDFweCAwO1xufVxuXG50Ym9keSB0aCB7XG4gIGJhY2tncm91bmQ6ICNkZGU0ZWE7XG4gIHdpZHRoOiAxNTBweDtcbn1cblxudGQucmVzdWx0cyB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXJpZ2h0OiAwO1xufVxuXG4ucmVzdWx0cyBzcGFuLFxuc21hbGwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAwLjhlbTtcbn1cblxudGQsXG50aCxcbmNhcHRpb24ge1xuICBwYWRkaW5nOiAwLjJlbSAwLjVlbTtcbn1cblxudGQuZmFzdGVzdCB7XG4gIGJhY2tncm91bmQ6ICM5Y2VlODI7XG59XG5cbnRyOmxhc3QtY2hpbGQgdGQsXG50cjpsYXN0LWNoaWxkIHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxudGQuc2xvd2VzdCxcbnRkLmVycm9yLFxuLmludmFsaWQge1xuICBiYWNrZ3JvdW5kOiBwaW5rO1xufVxuXG4vKiBuZWVkcyBpdHMgb3duIHJ1bGUgYmVjYXVzZSBvZiBidWdneSBJRSAqL1xuOmZvY3VzOmludmFsaWQge1xuICBiYWNrZ3JvdW5kOiBwaW5rO1xufVxuXG50ZC5lcnJvciB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG5idXR0b24sXG4uc3VibWl0IHtcbiAgcGFkZGluZzogMC4zNWVtIDAuNWVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjMDAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICBiYWNrZ3JvdW5kOiAjZGFkYWRhO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZWJlYmViLCAjYjhiOGI4KTtcbn1cblxuLmxvZ2luIHtcbiAgcGFkZGluZzogMC4zNWVtIDAuNWVtO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICMwMDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gIGJhY2tncm91bmQ6ICNkYWRhZGE7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNlYmViZWIsICNiOGI4YjgpO1xufVxuXG5hOmhvdmVyIHNwYW4sXG5hOmZvY3VzIHNwYW4sXG4jY29tbWVudHMgLm93bmVyIC5tZXRhIGEge1xuICBjb2xvcjogI2ZmZjtcbn1cblxuI29wdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgbGFiZWwsXG4gIHNlbGVjdCB7XG4gICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIH1cblxuICAub3B0aW9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIH1cbn1cblxuI3Rlc3QtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWF4LXdpZHRoOiA4MDBweDtcbn1cblxuI3Rlc3QtdGFibGUge1xuICBmbGV4OiAxIDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAuNWVtIDA7XG59XG5cbiNjb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZmxleDogMSAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuXG4uYnV0dG9ucyB7XG4gIGZsb2F0OiByaWdodDtcbn1cblxuYnV0dG9uOmhvdmVyLFxuYnV0dG9uOmZvY3VzLFxuLnN1Ym1pdDpob3Zlcixcbi5zdWJtaXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMzNTdhYjA7XG59XG5cbiNhZGQtYnV0dG9ucyBidXR0b24ge1xuICBwYWRkaW5nOiAwLjE1ZW0gMC40ZW07XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbmZvcm0gbGFiZWwge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDE0ZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBwYWRkaW5nOiAwLjRlbTtcbn1cblxubGFiZWwuaW5saW5lIHtcbiAgZmxvYXQ6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxubGFiZWxbZm9yPSd2aXNpYmxlJ10sXG5sYWJlbFtmb3IkPSddW2RlZmVyXSddIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0wLjM3ZW07XG59XG5cbmxhYmVsIHNwYW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAjYjRiNGI0O1xufVxuXG5sYWJlbCBlbSB7XG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuLmpzICNhZHZhbmNlZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNzaG93LWFkdmFuY2VkIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmpzICNzaG93LWFkdmFuY2VkIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbnNlY3Rpb24ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAyZW0gMDtcbn1cblxudGV4dGFyZWEge1xuICByZXNpemU6IHZlcnRpY2FsO1xuICBoZWlnaHQ6IDE1ZW07XG4gIHdpZHRoOiA0Mi42ZW07XG4gICp3aWR0aDogNDIuNGVtOyAvKiBJRSA8IDggKi9cbn1cblxuaW5wdXQsXG50ZXh0YXJlYSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNiNGI0YjQ7XG4gIHBhZGRpbmc6IDAuNGVtO1xufVxuXG5pbnB1dFt0eXBlPSdzZWFyY2gnXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuI3Zpc2libGUsXG4jY2FsaWJyYXRlIHtcbiAgLyogY2hlY2tib3hlcywgZm9yIElFICovXG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuZm9ybSBoMixcbmZvcm0gaDMsXG5mb3JtIGg0LFxucC5lcnJvcixcbi5wcmV2aWV3LFxuI2FkZC1saWJyYXJpZXMsXG4jYWRkLWJ1dHRvbnMge1xuICBwYWRkaW5nLWxlZnQ6IDI1MHB4O1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuaGdyb3VwIGgyLFxuI2ZpcmVidWcsXG4jamF2YSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbnByZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbnRhYmxlICNyZXN1bHRzLTEge1xuICB3aWR0aDogMTAwcHg7XG59XG5cbnRhYmxlIHByZSB7XG4gICpwYWRkaW5nOiAxLjVlbSAwOyAvKiBJRSA8IDggKi9cbiAgKm92ZXJmbG93LXk6IGhpZGRlbjsgLyogSUUgPCA4ICovXG59XG5cbnRhYmxlIHByZSxcbnRhYmxlIHRkLmNvZGUge1xuICB3aWR0aDogNjAwcHg7XG59XG5cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmY5O1xuICBwYWRkaW5nOiAwLjJlbSAwLjFlbTtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbmgxIHtcbiAgcGFkZGluZy10b3A6IDFlbTtcbiAgZm9udC1zaXplOiAxLjRlbTtcbn1cblxuZm9ybSBoMyB7XG4gIHBhZGRpbmctdG9wOiAwLjJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMmVtO1xufVxuXG5oMSBlbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuaDEgc3Ryb25nIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LWZhbWlseTogTW9uYWNvLCAnTHVjaWRhIENvbnNvbGUnLCBtb25vc3BhY2U7XG59XG5cbmxpLmN1cnJlbnQgYSB7XG4gIGJhY2tncm91bmQ6ICM5MGVlODU7XG59XG5cbmZvb3RlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAyZW07XG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjYzRjNGM0O1xuICBmb250LXNpemU6IDAuOWVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG5mb290ZXIgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG59XG5cbmZvb3RlciA+IHVsID4gbGkge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDE1JTtcbn1cblxuZm9vdGVyID4gdWwgPiBsaTpmaXJzdC1jaGlsZCB7XG4gIHdpZHRoOiA1NSU7XG59XG5cbmZvb3RlciB1bCB1bCBsaSB7XG4gIG1hcmdpbi1ib3R0b206IDAuMWVtO1xufVxuXG5mb290ZXIgaDQge1xuICBtYXJnaW4tYm90dG9tOiAwLjJlbTtcbn1cblxuI2FkZC10ZXN0IHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjNlbTtcbn1cblxuI2JzLWNoYXJ0IHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbiNicy1jaGFydC1mcmFtZSB7XG4gIGhlaWdodDogMjQwcHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4jYnMtbG9nbyB7XG4gIG1hcmdpbjogMDtcbn1cblxuI2JzLWxvZ28gc3BhbixcbmFwcGxldCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTk5OTllbTtcbn1cblxuI2JzLWxvZ28gYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMjMycHg7XG4gIGhlaWdodDogMzlweDtcbiAgZmlsdGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiB1cmwoLy93d3cuYnJvd3NlcnNjb3BlLm9yZy9zdGF0aWMvaW1nL2xvZ28ucG5nKSAwIDAgbm8tcmVwZWF0O1xufVxuXG4jYnMtdWEge1xuICBwYWRkaW5nOiAwLjVlbSAwLjVlbSAwO1xuICBjb2xvcjogIzU1NTtcbn1cblxuI2JzLXJlc3VsdHMgLmJzLXJ0IHtcbiAgZm9udC1zaXplOiAxMHB0O1xuICBwYWRkaW5nOiAwLjVlbTtcbiAgYmFja2dyb3VuZDogI2RkZDtcbn1cblxuI2JzLXJlc3VsdHMgdGQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBwYWRkaW5nOiAwLjRlbTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuI2JzLXJlc3VsdHMgLnJ0LXVhLWN1ciB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbiNicy1yZXN1bHRzIC5icy1ydC1tZXNzYWdlIHtcbiAgcGFkZGluZzogM2VtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzU1NTtcbn1cblxuI2JzLXJlc3VsdHMgLmdvb2dsZS12aXN1YWxpemF0aW9uLXRhYmxlLXRyLWhlYWQgdGQge1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG4jY29tbWVudHMgaDEge1xuICBwYWRkaW5nOiAwO1xufVxuXG4jY29tbWVudHMgLm1ldGEgaW1nIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxuI2NvbW1lbnRzIC5tZXRhIGltZyB7XG4gIHRvcDogMnB4O1xuICBsZWZ0OiAycHg7XG59XG5cbiNjb21tZW50cyAubWV0YSB7XG4gIHBhZGRpbmctbGVmdDogMzVweDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgd2lkdGg6IDkyM3B4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbn1cblxuI2NvbW1lbnRzIC5tZXRhIGEge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICM1NTU7XG59XG5cbiNjb21tZW50cyBhcnRpY2xlIGRpdiB7XG4gIHBhZGRpbmc6IDAgMWVtIDA7XG59XG5cbiNjb21tZW50cyBhcnRpY2xlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNiNGI0YjQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG4vKiBuZWVkcyBpdHMgb3duIHJ1bGUgKGNhbm5vdCBiZSBncm91cGVkIHdpdGggYHRib2R5IHRoYCkgYmVjYXVzZSBvZiBidWdneSBJRSAqL1xuI2NvbW1lbnRzIGFydGljbGU6dGFyZ2V0IHtcbiAgYmFja2dyb3VuZDogI2RkZTRlYTtcbn1cblxuI2Vycm9yLWluZm8uc2hvdyxcbi5tZXRhIHN0cm9uZyxcbiNmaXJlYnVnIHN0cm9uZyxcbiNqYXZhIHN0cm9uZyxcbiNzdGF0dXMgc3Ryb25nIHtcbiAgYmFja2dyb3VuZDogcGluaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2IwMGIwMDtcbiAgcGFkZGluZzogMC40ZW07XG59XG5cbiNlcnJvci1pbmZvLnNob3cge1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG59XG5cbiNlcnJvci1pbmZvLFxuY29kZSxcbnNhbXAsXG52YXIsXG50ZXh0YXJlYSxcbiNzbHVnIHtcbiAgZm9udC1mYW1pbHk6IE1vbmFjbywgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDAuOWVtO1xuICAtbW96LXRhYi1zaXplOiAyO1xuICAtby10YWItc2l6ZTogMjtcbiAgdGFiLXNpemU6IDI7XG59XG5cbiNqYXZhIHN0cm9uZyB7XG4gIGJhY2tncm91bmQ6ICNmZmZmZGM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmYWE3MDA7XG59XG5cbiNzbHVnIHtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbiNmYXEgZHQge1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4jZmFxIGR0IGEge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4jZmFxIGR0OmhvdmVyIGEge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbiNmYXEgZHQ6dGFyZ2V0LFxuI2ZhcSBkdDp0YXJnZXQgKyBkZCB7XG4gIGJhY2tncm91bmQ6ICM5MGVlODU7XG4gIG1hcmdpbjogMCAtMC44ZW07XG4gIHBhZGRpbmc6IDAgMC44ZW07XG59XG5cbiNmYXEgZHQ6dGFyZ2V0ICsgZGQge1xuICBwYWRkaW5nLWJvdHRvbTogMC41ZW07XG4gIG1hcmdpbi1ib3R0b206IC0wLjVlbTtcbn1cblxuI2ZhcSBkdDp0YXJnZXQge1xuICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgcGFkZGluZy10b3A6IDAuNWVtO1xufVxuXG4jZmlyZWJ1ZyxcbiNqYXZhIHtcbiAgbWFyZ2luOiAwIDAgMWVtO1xuICBwYWRkaW5nOiAwLjNlbSAwO1xufVxuXG4jcHJlcC1jb2RlIHByZSB7XG4gIG1heC1oZWlnaHQ6IDUwMHB4O1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuI2ZpcmVidWcuc2hvdyxcbiNqYXZhLnNob3cge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmNvMSxcbi5jbzIsXG4uY29NVUxUSSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgY29sb3I6ICMwNjA7XG59XG5cbi5lcnJvciB7XG4gIGNvbG9yOiAjYjAwYjAwO1xufVxuXG4uaW1wIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuLmt3MSxcbi5rdzMge1xuICBjb2xvcjogIzAwNjtcbn1cblxuLmt3MiB7XG4gIGNvbG9yOiAjMDM2O1xufVxuXG4uZXMwIHtcbiAgY29sb3I6ICMwMDk7XG59XG5cbi5icjAge1xuICBjb2xvcjogIzA5MDtcbn1cblxuLnN5MCB7XG4gIGNvbG9yOiAjMzkzO1xufVxuXG4uc3QwIHtcbiAgY29sb3I6ICMzNmM7XG59XG5cbi5udTAge1xuICBjb2xvcjogI2MwMDtcbn1cblxuLm1lMSB7XG4gIGNvbG9yOiAjNjA2O1xufVxuXG4jY2FyYm9uYWRzIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICB3aWR0aDogMTMwcHg7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG4jY2FyYm9uYWRzIGEge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyogPCAxMDUxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDUwcHgpIHtcbiAgdGFibGUgcHJlLFxuICB0YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogNTUwcHg7XG4gIH1cbn1cblxuLyogPCAxMDQxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDQwcHgpIHtcbiAgYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGJvcmRlcjogMDtcbiAgfVxuXG4gIGJvZHksXG4gICNjb21tZW50cyAubWV0YSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG59XG5cbi8qIDwgODAxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA4MDBweCkge1xuICB0YWJsZSBwcmUsXG4gIHRhYmxlIHRkLmNvZGUge1xuICAgIHdpZHRoOiA0NTBweDtcbiAgfVxufVxuXG4vKiA8IDY4MXB4ICovXG5AbWVkaWEgKG1heC13aWR0aDogNjgwcHgpIHtcbiAgdGFibGUgcHJlLFxuICB0YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogMzUwcHg7XG4gIH1cbn1cblxuLyogPCA2NTFweCAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDY1MHB4KSB7XG4gIHRhYmxlIHByZSxcbiAgdGFibGUgdGQuY29kZSB7XG4gICAgd2lkdGg6IDIwMHB4O1xuICB9XG59XG4iLCJodG1sLFxuYm9keSxcbmgxLFxuaDIsXG5oMyxcbmZpZWxkc2V0LFxuI2ZhcSxcbiNmYXEgZHQsXG4jZmFxIGRkIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG59XG5cbnRhYmxlLFxucCxcbnVsLFxuaDEsXG5oMixcbmgzLFxuI2Vycm9yLWluZm8sXG5mb3JtIGRpdixcbiNmYXEsXG4uYnMtcnQge1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cbmJ1dHRvbixcbmlucHV0LFxudGV4dGFyZWEsXG5hLFxuLmJzLXJ0IHtcbiAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbmh0bWwsXG5pbnB1dCxcbnRleHRhcmVhLFxuYnV0dG9uIHtcbiAgZm9udDogMWVtLzEuNSBzYW5zLXNlcmlmO1xufVxuXG5ib2R5IHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgcGFkZGluZzogMCAyLjVlbTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG59XG5cbmEsXG4uYnRuLWxpbmsge1xuICBjb2xvcjogIzM1N2FiMDtcbiAgcGFkZGluZzogMC4yZW07XG59XG5cbmE6aG92ZXIsXG5hOmZvY3VzLFxuLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uYnRuLWxpbmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rOmZvY3VzIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5ibG9ja3F1b3RlIHtcbiAgbWFyZ2luOiAwIDAgMWVtO1xuICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNiNGI0YjQ7XG4gIHBhZGRpbmctbGVmdDogMC41ZW07XG59XG5cbnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbn1cblxudGhlYWQgdGgsXG5idXR0b246aG92ZXIsXG5idXR0b246Zm9jdXMsXG4uc3VibWl0OmhvdmVyLFxuLnN1Ym1pdDpmb2N1cyxcbmE6aG92ZXIsXG5hOmZvY3VzLFxuLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rOmZvY3VzLFxuI2NvbW1lbnRzIC5tZXRhIGE6aG92ZXIsXG4jY29tbWVudHMgLm1ldGEgYTpmb2N1cyxcbmxpLmN1cnJlbnQgYTpob3ZlcixcbmxpLmN1cnJlbnQgYTpmb2N1cyxcbmZvcm0gaDMsXG4jY29tbWVudHMgLm93bmVyIC5tZXRhIHtcbiAgYmFja2dyb3VuZDogIzFhNmFiOTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgIzZjYTVkZCwgIzFhNmFiOSk7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG5jYXB0aW9uLFxuI2NvbW1lbnRzIC5tZXRhIHtcbiAgYmFja2dyb3VuZDogI2JjYmNiYztcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2QwZDBkMCwgI2E3YTdhNyk7XG4gIGNvbG9yOiAjNTU1O1xufVxuXG50aGVhZCB0aCxcbmNhcHRpb24ge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmpzIHRib2R5IHRoOmhvdmVyLFxuLmpzIHRib2R5IHRoOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxudGJvZHkgdGgsXG50ZCB7XG4gIGJvcmRlcjogc29saWQgI2I0YjRiNDtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAxcHggMDtcbn1cblxudGJvZHkgdGgge1xuICBiYWNrZ3JvdW5kOiAjZGRlNGVhO1xuICB3aWR0aDogMTUwcHg7XG59XG5cbnRkLnJlc3VsdHMge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci1yaWdodDogMDtcbn1cblxuLnJlc3VsdHMgc3BhbixcbnNtYWxsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbnRkLFxudGgsXG5jYXB0aW9uIHtcbiAgcGFkZGluZzogMC4yZW0gMC41ZW07XG59XG5cbnRkLmZhc3Rlc3Qge1xuICBiYWNrZ3JvdW5kOiAjOWNlZTgyO1xufVxuXG50cjpsYXN0LWNoaWxkIHRkLFxudHI6bGFzdC1jaGlsZCB0aCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG5cbnRkLnNsb3dlc3QsXG50ZC5lcnJvcixcbi5pbnZhbGlkIHtcbiAgYmFja2dyb3VuZDogcGluaztcbn1cblxuLyogbmVlZHMgaXRzIG93biBydWxlIGJlY2F1c2Ugb2YgYnVnZ3kgSUUgKi9cbjpmb2N1czppbnZhbGlkIHtcbiAgYmFja2dyb3VuZDogcGluaztcbn1cblxudGQuZXJyb3Ige1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuYnV0dG9uLFxuLnN1Ym1pdCB7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjVlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogIzAwMDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTtcbiAgYmFja2dyb3VuZDogI2RhZGFkYTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2ViZWJlYiwgI2I4YjhiOCk7XG59XG5cbi5sb2dpbiB7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjVlbTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjMDAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICBiYWNrZ3JvdW5kOiAjZGFkYWRhO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZWJlYmViLCAjYjhiOGI4KTtcbn1cblxuYTpob3ZlciBzcGFuLFxuYTpmb2N1cyBzcGFuLFxuI2NvbW1lbnRzIC5vd25lciAubWV0YSBhIHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbiNvcHRpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuI29wdGlvbnMgbGFiZWwsXG4jb3B0aW9ucyBzZWxlY3Qge1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbiNvcHRpb25zIC5vcHRpb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuXG4jdGVzdC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXgtd2lkdGg6IDgwMHB4O1xufVxuXG4jdGVzdC10YWJsZSB7XG4gIGZsZXg6IDEgMTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMC41ZW0gMDtcbn1cblxuI2NvbnRyb2xzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4OiAxIDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAuNWVtIDA7XG59XG5cbi5idXR0b25zIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG5idXR0b246aG92ZXIsXG5idXR0b246Zm9jdXMsXG4uc3VibWl0OmhvdmVyLFxuLnN1Ym1pdDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzM1N2FiMDtcbn1cblxuI2FkZC1idXR0b25zIGJ1dHRvbiB7XG4gIHBhZGRpbmc6IDAuMTVlbSAwLjRlbTtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuZm9ybSBsYWJlbCB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTRlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIHBhZGRpbmc6IDAuNGVtO1xufVxuXG5sYWJlbC5pbmxpbmUge1xuICBmbG9hdDogbm9uZTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG5sYWJlbFtmb3I9dmlzaWJsZV0sXG5sYWJlbFtmb3IkPVwiXVtkZWZlcl1cIl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTAuMzdlbTtcbn1cblxubGFiZWwgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICNiNGI0YjQ7XG59XG5cbmxhYmVsIGVtIHtcbiAgY29sb3I6IHJlZDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4uanMgI2FkdmFuY2VkIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuI3Nob3ctYWR2YW5jZWQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uanMgI3Nob3ctYWR2YW5jZWQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDJlbSAwO1xufVxuXG50ZXh0YXJlYSB7XG4gIHJlc2l6ZTogdmVydGljYWw7XG4gIGhlaWdodDogMTVlbTtcbiAgd2lkdGg6IDQyLjZlbTtcbiAgKndpZHRoOiA0Mi40ZW07XG4gIC8qIElFIDwgOCAqL1xufVxuXG5pbnB1dCxcbnRleHRhcmVhIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2I0YjRiNDtcbiAgcGFkZGluZzogMC40ZW07XG59XG5cbmlucHV0W3R5cGU9c2VhcmNoXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuI3Zpc2libGUsXG4jY2FsaWJyYXRlIHtcbiAgLyogY2hlY2tib3hlcywgZm9yIElFICovXG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuZm9ybSBoMixcbmZvcm0gaDMsXG5mb3JtIGg0LFxucC5lcnJvcixcbi5wcmV2aWV3LFxuI2FkZC1saWJyYXJpZXMsXG4jYWRkLWJ1dHRvbnMge1xuICBwYWRkaW5nLWxlZnQ6IDI1MHB4O1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuaGdyb3VwIGgyLFxuI2ZpcmVidWcsXG4jamF2YSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbnByZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbnRhYmxlICNyZXN1bHRzLTEge1xuICB3aWR0aDogMTAwcHg7XG59XG5cbnRhYmxlIHByZSB7XG4gICpwYWRkaW5nOiAxLjVlbSAwO1xuICAvKiBJRSA8IDggKi9cbiAgKm92ZXJmbG93LXk6IGhpZGRlbjtcbiAgLyogSUUgPCA4ICovXG59XG5cbnRhYmxlIHByZSxcbnRhYmxlIHRkLmNvZGUge1xuICB3aWR0aDogNjAwcHg7XG59XG5cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmY5O1xuICBwYWRkaW5nOiAwLjJlbSAwLjFlbTtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbmgxIHtcbiAgcGFkZGluZy10b3A6IDFlbTtcbiAgZm9udC1zaXplOiAxLjRlbTtcbn1cblxuZm9ybSBoMyB7XG4gIHBhZGRpbmctdG9wOiAwLjJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMmVtO1xufVxuXG5oMSBlbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuaDEgc3Ryb25nIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LWZhbWlseTogTW9uYWNvLCBcIkx1Y2lkYSBDb25zb2xlXCIsIG1vbm9zcGFjZTtcbn1cblxubGkuY3VycmVudCBhIHtcbiAgYmFja2dyb3VuZDogIzkwZWU4NTtcbn1cblxuZm9vdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDJlbTtcbiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNjNGM0YzQ7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbmZvb3RlciB1bCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxuZm9vdGVyID4gdWwgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTUlO1xufVxuXG5mb290ZXIgPiB1bCA+IGxpOmZpcnN0LWNoaWxkIHtcbiAgd2lkdGg6IDU1JTtcbn1cblxuZm9vdGVyIHVsIHVsIGxpIHtcbiAgbWFyZ2luLWJvdHRvbTogMC4xZW07XG59XG5cbmZvb3RlciBoNCB7XG4gIG1hcmdpbi1ib3R0b206IDAuMmVtO1xufVxuXG4jYWRkLXRlc3Qge1xuICBtYXJnaW4tcmlnaHQ6IDAuM2VtO1xufVxuXG4jYnMtY2hhcnQge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuI2JzLWNoYXJ0LWZyYW1lIHtcbiAgaGVpZ2h0OiAyNDBweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbiNicy1sb2dvIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4jYnMtbG9nbyBzcGFuLFxuYXBwbGV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtOTk5OWVtO1xufVxuXG4jYnMtbG9nbyBhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAyMzJweDtcbiAgaGVpZ2h0OiAzOXB4O1xuICBmaWx0ZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHVybCgvL3d3dy5icm93c2Vyc2NvcGUub3JnL3N0YXRpYy9pbWcvbG9nby5wbmcpIDAgMCBuby1yZXBlYXQ7XG59XG5cbiNicy11YSB7XG4gIHBhZGRpbmc6IDAuNWVtIDAuNWVtIDA7XG4gIGNvbG9yOiAjNTU1O1xufVxuXG4jYnMtcmVzdWx0cyAuYnMtcnQge1xuICBmb250LXNpemU6IDEwcHQ7XG4gIHBhZGRpbmc6IDAuNWVtO1xuICBiYWNrZ3JvdW5kOiAjZGRkO1xufVxuXG4jYnMtcmVzdWx0cyB0ZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIHBhZGRpbmc6IDAuNGVtO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4jYnMtcmVzdWx0cyAucnQtdWEtY3VyIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuI2JzLXJlc3VsdHMgLmJzLXJ0LW1lc3NhZ2Uge1xuICBwYWRkaW5nOiAzZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjNTU1O1xufVxuXG4jYnMtcmVzdWx0cyAuZ29vZ2xlLXZpc3VhbGl6YXRpb24tdGFibGUtdHItaGVhZCB0ZCB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbiNjb21tZW50cyBoMSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbiNjb21tZW50cyAubWV0YSBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4jY29tbWVudHMgLm1ldGEgaW1nIHtcbiAgdG9wOiAycHg7XG4gIGxlZnQ6IDJweDtcbn1cblxuI2NvbW1lbnRzIC5tZXRhIHtcbiAgcGFkZGluZy1sZWZ0OiAzNXB4O1xuICBtYXJnaW4tdG9wOiAwO1xuICB3aWR0aDogOTIzcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuXG4jY29tbWVudHMgLm1ldGEgYSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzU1NTtcbn1cblxuI2NvbW1lbnRzIGFydGljbGUgZGl2IHtcbiAgcGFkZGluZzogMCAxZW0gMDtcbn1cblxuI2NvbW1lbnRzIGFydGljbGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2I0YjRiNDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cbi8qIG5lZWRzIGl0cyBvd24gcnVsZSAoY2Fubm90IGJlIGdyb3VwZWQgd2l0aCBgdGJvZHkgdGhgKSBiZWNhdXNlIG9mIGJ1Z2d5IElFICovXG4jY29tbWVudHMgYXJ0aWNsZTp0YXJnZXQge1xuICBiYWNrZ3JvdW5kOiAjZGRlNGVhO1xufVxuXG4jZXJyb3ItaW5mby5zaG93LFxuLm1ldGEgc3Ryb25nLFxuI2ZpcmVidWcgc3Ryb25nLFxuI2phdmEgc3Ryb25nLFxuI3N0YXR1cyBzdHJvbmcge1xuICBiYWNrZ3JvdW5kOiBwaW5rO1xuICBib3JkZXI6IDFweCBzb2xpZCAjYjAwYjAwO1xuICBwYWRkaW5nOiAwLjRlbTtcbn1cblxuI2Vycm9yLWluZm8uc2hvdyB7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbn1cblxuI2Vycm9yLWluZm8sXG5jb2RlLFxuc2FtcCxcbnZhcixcbnRleHRhcmVhLFxuI3NsdWcge1xuICBmb250LWZhbWlseTogTW9uYWNvLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG4gIC1tb3otdGFiLXNpemU6IDI7XG4gIC1vLXRhYi1zaXplOiAyO1xuICB0YWItc2l6ZTogMjtcbn1cblxuI2phdmEgc3Ryb25nIHtcbiAgYmFja2dyb3VuZDogI2ZmZmZkYztcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZhYTcwMDtcbn1cblxuI3NsdWcge1xuICBmb250LXNpemU6IDFlbTtcbn1cblxuI2ZhcSBkdCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbiNmYXEgZHQgYSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNmYXEgZHQ6aG92ZXIgYSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cblxuI2ZhcSBkdDp0YXJnZXQsXG4jZmFxIGR0OnRhcmdldCArIGRkIHtcbiAgYmFja2dyb3VuZDogIzkwZWU4NTtcbiAgbWFyZ2luOiAwIC0wLjhlbTtcbiAgcGFkZGluZzogMCAwLjhlbTtcbn1cblxuI2ZhcSBkdDp0YXJnZXQgKyBkZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVlbTtcbiAgbWFyZ2luLWJvdHRvbTogLTAuNWVtO1xufVxuXG4jZmFxIGR0OnRhcmdldCB7XG4gIG1hcmdpbi10b3A6IDAuNWVtO1xuICBwYWRkaW5nLXRvcDogMC41ZW07XG59XG5cbiNmaXJlYnVnLFxuI2phdmEge1xuICBtYXJnaW46IDAgMCAxZW07XG4gIHBhZGRpbmc6IDAuM2VtIDA7XG59XG5cbiNwcmVwLWNvZGUgcHJlIHtcbiAgbWF4LWhlaWdodDogNTAwcHg7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4jZmlyZWJ1Zy5zaG93LFxuI2phdmEuc2hvdyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uY28xLFxuLmNvMixcbi5jb01VTFRJIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBjb2xvcjogIzA2MDtcbn1cblxuLmVycm9yIHtcbiAgY29sb3I6ICNiMDBiMDA7XG59XG5cbi5pbXAge1xuICBjb2xvcjogcmVkO1xufVxuXG4ua3cxLFxuLmt3MyB7XG4gIGNvbG9yOiAjMDA2O1xufVxuXG4ua3cyIHtcbiAgY29sb3I6ICMwMzY7XG59XG5cbi5lczAge1xuICBjb2xvcjogIzAwOTtcbn1cblxuLmJyMCB7XG4gIGNvbG9yOiAjMDkwO1xufVxuXG4uc3kwIHtcbiAgY29sb3I6ICMzOTM7XG59XG5cbi5zdDAge1xuICBjb2xvcjogIzM2Yztcbn1cblxuLm51MCB7XG4gIGNvbG9yOiAjYzAwO1xufVxuXG4ubWUxIHtcbiAgY29sb3I6ICM2MDY7XG59XG5cbiNjYXJib25hZHMge1xuICBmbG9hdDogcmlnaHQ7XG4gIHdpZHRoOiAxMzBweDtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbiNjYXJib25hZHMgYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiA8IDEwNTFweCAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDEwNTBweCkge1xuICB0YWJsZSBwcmUsXG50YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogNTUwcHg7XG4gIH1cbn1cbi8qIDwgMTA0MXB4ICovXG5AbWVkaWEgKG1heC13aWR0aDogMTA0MHB4KSB7XG4gIGJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICBib2R5LFxuI2NvbW1lbnRzIC5tZXRhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cbn1cbi8qIDwgODAxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA4MDBweCkge1xuICB0YWJsZSBwcmUsXG50YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogNDUwcHg7XG4gIH1cbn1cbi8qIDwgNjgxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2ODBweCkge1xuICB0YWJsZSBwcmUsXG50YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogMzUwcHg7XG4gIH1cbn1cbi8qIDwgNjUxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2NTBweCkge1xuICB0YWJsZSBwcmUsXG50YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogMjAwcHg7XG4gIH1cbn0iXX0= */