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&Qf35VfikFVVljI0IyQiwiIxYHITp4c7VWaWFGdhRkI0IiTis7W0ICZyBlIsIiNxUTN6ADI8EDMxMjMwIjI0ICdyNkIsIyc59yc5l6YzVWbuoCLwpmLzVXajNXZt9iKs2WauMXdpN6cl5mLqwSbvNmLzVXajNXZt9iKsAnau26YuMXdpN6cl5mLqwSbvNmL6VGZ9RXajVGchJ7ZuoCLuNmLt36YukHdpNWZwFmcn9iKs46bj9Se4l6YlBXYydmLqwicr9ybj9Se4l6YlBXYydmLqwCcq9ybj9Se4l6YlBXYydmLqIiOiMXbEJCLiMVVJN4UF5kI0ISYONkIsUWdyRnOiwmdFJCLiEDO7MTO9IjM8gTM4gDNzIiOiQWSisnOiQkIsISP3EkVxBVUHFDMplzLlVUdGd7cI9UeIt4SshESzV7NvY7ZxlDOuNTb5tzLr',
SJS_LICENSE_KEY:
'E518585142165236#B0wm4nx4QzdlTHRTSOFzcvVnaJdjSnNEeXdTMUtSUzk6bU94QuVXNwZVZjd4SzYjcadXRIVEMzEXTThkVyR7R85UayoHZZBTYQ5mZyh4Shd6VxFXazF4cBNGRG5WTvUGTsV4T6knQYRzKxxUdk9EarplU7d6VLF6KIR7bPJ5N6ZUMWZWaURGRKRDbLJDN5YjSN5mUoxmaxonSD56LEh7Y7RXenpmTvomevZlV9dkaysCO7hTRQFHcGRWQyc5LI9kQmB7QwR4Z7ZHOR3CSXp6SiFWYzFXeXZUSp94K8VDTkFjdwl4KptSYlRWcDxmNE5kS6kzdrkVcNJXROVGbLJkcTNGRzIER8tmd4YGNhh7dxAnMvIHRv46VtBXS4U5KvJ6dZJ6M5p4TxIjd9I5QSpXTTV6SDZXb7lzaL56ZiojITJCLikTQxUTQFV4NiojIIJCLyETO7UzM7kTO0IicfJye&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= */