This example compares performance of different date formatters
<!DOCTYPE html>
<html lang="en">
<head>
<base href="/dataviewsjs/demos/en/sample/Benchmarks/DateFormatting/purejs/" />
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="This example compares performance of different date formatters" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Date Formatting | 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="/dataviewsjs/demos/static/dataviews/gc.dataviews.core.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="/dataviewsjs/demos/node_modules/moment/moment.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/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="data.js" type="text/javascript"></script>
<script src="app.js" type="text/javascript"></script>
</body>
</html>
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 formatDates(formatter) {
data.slice(0, 10).forEach(function (date) {
dateFormats.forEach(function (format) {
formatter(format, date);
});
});
}
function formatSJS(format, date) {
var formatter = new GC.Spread.Formatter.GeneralFormatter(format);
return formatter.format(date);
}
function sjsCase() {
return {
name: 'SpreadJS',
homepage: 'https://developer.mescius.com/spreadjs',
fn: function fn() {
formatDates(formatSJS);
},
};
}
function dvjsCase() {
return {
name: 'DataViewsJS',
homepage: 'https://developer.mescius.com/dataviewsjs',
fn: function fn() {
formatDates(GC.DataViews.GeneralFormatter.formatDate);
},
};
}
function momentFormat(format, date) {
return moment(date).format(format);
}
function momentCase() {
return {
name: 'MomentJS',
homepage: 'https://momentjs.com/',
fn: function fn() {
formatDates(momentFormat);
},
};
}
$(function () {
window.ui.add(sjsCase());
window.ui.add(dvjsCase());
window.ui.add(momentCase());
});
function repeatOf(k) {
switch (k) {
case 'M':
case 'm':
case 'D':
case 'd':
return [1, 2, 3, 4];
case 'Q':
return [1];
case 'Y':
case 'y':
return [2, 4];
case 'F':
case 'f':
return [1, 2, 3];
default:
return [1, 2];
}
}
var combinations = function combinations(templates) {
return templates.reduce(function (acc, k) {
var repeat = repeatOf(k);
var combs = repeat.map(function (n) {
return _.repeat(k, n);
});
return _.isEmpty(acc)
? combs
: _.flatten(
acc.map(function (a) {
return combs.map(function (b) {
return ''.concat(a, '-').concat(b);
});
})
);
}, []);
};
var dateTemplates = combinations(['M', 'D', 'Y']).concat(combinations(['m', 'd', 'y']));
var timeTemplates = combinations(['H', 'm', 'S'])
.concat(combinations(['h', 'm', 's']))
.map(function (t) {
return t.replace(/-/g, ':');
});
var dateSeparators = ['/', '-', '.', ' '];
var dateFormats = _.flatten(
dateSeparators.map(function (s) {
return dateTemplates.map(function (f) {
return f.replace(/-/g, s);
});
})
);
dateFormats.forEach(function (f) {
timeTemplates.forEach(function (t) {
dateFormats.push(''.concat(f, ' ').concat(t));
dateFormats.push(''.concat(f, ', ').concat(t));
['t', 'tt'].forEach(function (p) {
dateFormats.push(''.concat(f, ' ').concat(t).concat(p));
dateFormats.push(''.concat(f, ', ').concat(t).concat(p));
});
});
});
var ISO_FORMAT = 'YYYY-MM-DDTHH:mm:ss.fffZ';
dateFormats.push(ISO_FORMAT); // week days
dateFormats.push('ddd');
dateFormats.push('dddd');
dateFormats.push('DDD');
dateFormats.push('DDDD');
dateFormats.push('ddd, mmm dd'); // additional testing formats
dateFormats.concat(['HH:mm:ss.S', 'HH:mm:ss.SS', 'HH:mm:ss.SSS']);
var generateData = function generateData(n) {
return _.range(0, n).map(function (t) {
return new Date(
Date.UTC(
_.random(2000, 2020),
_.random(0, 11),
_.random(1, 28),
_.random(0, 59),
_.random(0, 59),
_.random(0, 59)
)
);
});
};
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGVGb3JtYXR0aW5nL3B1cmVqcy9idWlsZC5qc29uIiwiRGF0ZUZvcm1hdHRpbmcvcHVyZWpzL2J1aWxkLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0VBU0UsU0FBQTtFQUNBLFVBQUE7RUFDQSxTQUFBO0FDQ0Y7O0FERUE7Ozs7Ozs7Ozs7RUFVRSxrQkFBQTtBQ0NGOztBREVBOzs7OztFQU9FLGtCQUFBO0FDQ0Y7O0FERUE7Ozs7RUFJRSx3QkFBQTtBQ0NGOztBREVBO0VBQ0UsZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtBQ0NGOztBREVBOztFQUVFLGNBQUE7RUFDQSxjQUFBO0FDQ0Y7O0FERUE7Ozs7RUFJRSxxQkFBQTtBQ0NGOztBREVBO0VBQ0UsNkJBQUE7RUFDQSxTQUFBO0VBQ0EsMEJBQUE7QUNDRjs7QURFQTs7RUFFRSxlQUFBO0FDQ0Y7O0FERUE7RUFDRSxlQUFBO0VBQ0EsOEJBQUE7RUFDQSxtQkFBQTtBQ0NGOztBREVBO0VBQ0UseUJBQUE7QUNDRjs7QURFQTs7Ozs7Ozs7Ozs7Ozs7O0VBZUUsbUJBQUE7RUFDQSx3REFBQTtFQUNBLFdBQUE7QUNDRjs7QURFQTs7RUFFRSxtQkFBQTtFQUNBLHdEQUFBO0VBQ0EsV0FBQTtBQ0NGOztBREVBOztFQUVFLGlCQUFBO0FDQ0Y7O0FERUE7O0VBRUUsMEJBQUE7RUFDQSxlQUFBO0FDQ0Y7O0FERUE7O0VBRUUscUJBQUE7RUFDQSx5QkFBQTtBQ0NGOztBREVBO0VBQ0UsbUJBQUE7RUFDQSxZQUFBO0FDQ0Y7O0FERUE7RUFDRSxrQkFBQTtFQUNBLGVBQUE7QUNDRjs7QURFQTs7RUFFRSxjQUFBO0VBQ0EsZ0JBQUE7QUNDRjs7QURFQTs7O0VBR0Usb0JBQUE7QUNDRjs7QURFQTtFQUNFLG1CQUFBO0FDQ0Y7O0FERUE7O0VBRUUsZ0JBQUE7QUNDRjs7QURFQTs7O0VBR0UsZ0JBQUE7QUNDRjs7QURFQSwyQ0FBQTtBQUNBO0VBQ0UsZ0JBQUE7QUNDRjs7QURFQTtFQUNFLHlCQUFBO0VBQ0EsaUJBQUE7QUNDRjs7QURFQTs7RUFFRSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxXQUFBO0VBQ0Esc0JBQUE7RUFDQSxtQkFBQTtFQUNBLHdEQUFBO0FDQ0Y7O0FERUE7RUFDRSxxQkFBQTtFQUNBLHFCQUFBO0VBQ0EsZUFBQTtFQUNBLFdBQUE7RUFDQSxzQkFBQTtFQUNBLG1CQUFBO0VBQ0Esd0RBQUE7QUNDRjs7QURFQTs7O0VBR0UsV0FBQTtBQ0NGOztBREVBO0VBQ0UsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsZUFBQTtBQ0NGO0FEQ0U7O0VBRUUsaUJBQUE7QUNDSjtBREVFO0VBQ0UscUJBQUE7RUFDQSxvQkFBQTtBQ0FKOztBRElBO0VBQ0UsYUFBQTtFQUNBLHNCQUFBO0VBQ0EsZ0JBQUE7QUNERjs7QURJQTtFQUNFLFNBQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTtBQ0RGOztBRElBO0VBQ0UsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsOEJBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7QUNERjs7QURJQTtFQUNFLFlBQUE7QUNERjs7QURJQTs7OztFQUlFLHFCQUFBO0FDREY7O0FESUE7RUFDRSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtBQ0RGOztBRElBO0VBQ0UsV0FBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGNBQUE7QUNERjs7QURJQTtFQUNFLFdBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTtBQ0RGOztBRElBOztFQUVFLGtCQUFBO0VBQ0EsWUFBQTtBQ0RGOztBRElBO0VBQ0UsY0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0FDREY7O0FESUE7RUFDRSxVQUFBO0VBQ0Esa0JBQUE7QUNERjs7QURJQTtFQUNFLGFBQUE7QUNERjs7QURJQTtFQUNFLGFBQUE7QUNERjs7QURJQTtFQUNFLGNBQUE7QUNERjs7QURJQTtFQUNFLGNBQUE7RUFDQSxhQUFBO0FDREY7O0FESUE7RUFDRSxnQkFBQTtFQUNBLFlB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LHFCQUFBO0VBQ0EscUJBQUE7QUNFRjs7QURDQTtFQUNFLGlCQUFBO0VBQ0Esa0JBQUE7QUNFRjs7QURDQTs7RUFFRSxlQUFBO0VBQ0EsZ0JBQUE7QUNFRjs7QURDQTtFQUNFLGlCQUFBO0VBQ0EsY0FBQTtBQ0VGOztBRENBOztFQUVFLGNBQUE7QUNFRjs7QURDQTs7O0VBR0Usa0JBQUE7RUFDQSxXQUFBO0FDRUY7O0FEQ0E7RUFDRSxjQUFBO0FDRUY7O0FEQ0E7RUFDRSxVQUFBO0FDRUY7O0FEQ0E7O0VBRUUsV0FBQTtBQ0VGOztBRENBO0VBQ0UsV0FBQTtBQ0VGOztBRENBO0VBQ0UsV0FBQTtBQ0VGOztBRENBO0VBQ0UsV0FBQTtBQ0VGOztBRENBO0VBQ0UsV0FBQTtBQ0VGOztBRENBO0VBQ0UsV0FBQTtBQ0VGOztBRENBO0VBQ0UsV0FBQTtBQ0VGOztBRENBO0VBQ0UsV0FBQTtBQ0VGOztBRENBO0VBQ0UsWUFBQTtFQUNBLFlBQUE7RUFDQSxjQUFBO0FDRUY7O0FEQ0E7RUFDRSxjQUFBO0FDRUY7O0FEQ0EsYUFBQTtBQUNBO0VBQ0U7O0lBRUUsWUFBQTtFQ0VGO0FBQ0Y7QURDQSxhQUFBO0FBQ0E7RUFDRTtJQUNFLFNBQUE7SUFDQSxTQUFBO0VDQ0Y7O0VERUE7O0lBRUUsV0FBQTtJQUdBLHNCQUFBO0VDQ0Y7QUFDRjtBREVBLFlBQUE7QUFDQTtFQUNFOztJQUVFLFlBQUE7RUNBRjtBQUNGO0FER0EsWUFBQTtBQUNBO0VBQ0U7O0lBRUUsWUFBQTtFQ0RGO0FBQ0Y7QURJQSxZQUFBO0FBQ0E7RUFDRTs7SUFFRSxZQUFBO0VDRkY7QUFDRiIsImZpbGUiOiJEYXRlRm9ybWF0dGluZy9wdXJlanMvc3R5bGVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImh0bWwsXG5ib2R5LFxuaDEsXG5oMixcbmgzLFxuZmllbGRzZXQsXG4jZmFxLFxuI2ZhcSBkdCxcbiNmYXEgZGQge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxudGFibGUsXG5wLFxudWwsXG5oMSxcbmgyLFxuaDMsXG4jZXJyb3ItaW5mbyxcbmZvcm0gZGl2LFxuI2ZhcSxcbi5icy1ydCB7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbn1cblxuYnV0dG9uLFxuaW5wdXQsXG50ZXh0YXJlYSxcbmEsXG4uYnMtcnQge1xuICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuaHRtbCxcbmlucHV0LFxudGV4dGFyZWEsXG5idXR0b24ge1xuICBmb250OiAxZW0vMS41IHNhbnMtc2VyaWY7XG59XG5cbmJvZHkge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBwYWRkaW5nOiAwIDIuNWVtO1xuICBtYXJnaW46IDAgYXV0bztcbiAgbWluLWhlaWdodDogMTAwJTtcbn1cblxuYSxcbi5idG4tbGluayB7XG4gIGNvbG9yOiAjMzU3YWIwO1xuICBwYWRkaW5nOiAwLjJlbTtcbn1cblxuYTpob3ZlcixcbmE6Zm9jdXMsXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5idG4tbGluayB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmJsb2NrcXVvdGUge1xuICBtYXJnaW46IDAgMCAxZW07XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2I0YjRiNDtcbiAgcGFkZGluZy1sZWZ0OiAwLjVlbTtcbn1cblxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xufVxuXG50aGVhZCB0aCxcbmJ1dHRvbjpob3ZlcixcbmJ1dHRvbjpmb2N1cyxcbi5zdWJtaXQ6aG92ZXIsXG4uc3VibWl0OmZvY3VzLFxuYTpob3ZlcixcbmE6Zm9jdXMsXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMsXG4jY29tbWVudHMgLm1ldGEgYTpob3ZlcixcbiNjb21tZW50cyAubWV0YSBhOmZvY3VzLFxubGkuY3VycmVudCBhOmhvdmVyLFxubGkuY3VycmVudCBhOmZvY3VzLFxuZm9ybSBoMyxcbiNjb21tZW50cyAub3duZXIgLm1ldGEge1xuICBiYWNrZ3JvdW5kOiAjMWE2YWI5O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjNmNhNWRkLCAjMWE2YWI5KTtcbiAgY29sb3I6ICNmZmY7XG59XG5cbmNhcHRpb24sXG4jY29tbWVudHMgLm1ldGEge1xuICBiYWNrZ3JvdW5kOiAjYmNiY2JjO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZDBkMGQwLCAjYTdhN2E3KTtcbiAgY29sb3I6ICM1NTU7XG59XG5cbnRoZWFkIHRoLFxuY2FwdGlvbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uanMgdGJvZHkgdGg6aG92ZXIsXG4uanMgdGJvZHkgdGg6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG50Ym9keSB0aCxcbnRkIHtcbiAgYm9yZGVyOiBzb2xpZCAjYjRiNGI0O1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDFweCAwO1xufVxuXG50Ym9keSB0aCB7XG4gIGJhY2tncm91bmQ6ICNkZGU0ZWE7XG4gIHdpZHRoOiAxNTBweDtcbn1cblxudGQucmVzdWx0cyB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXJpZ2h0OiAwO1xufVxuXG4ucmVzdWx0cyBzcGFuLFxuc21hbGwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAwLjhlbTtcbn1cblxudGQsXG50aCxcbmNhcHRpb24ge1xuICBwYWRkaW5nOiAwLjJlbSAwLjVlbTtcbn1cblxudGQuZmFzdGVzdCB7XG4gIGJhY2tncm91bmQ6ICM5Y2VlODI7XG59XG5cbnRyOmxhc3QtY2hpbGQgdGQsXG50cjpsYXN0LWNoaWxkIHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxudGQuc2xvd2VzdCxcbnRkLmVycm9yLFxuLmludmFsaWQge1xuICBiYWNrZ3JvdW5kOiBwaW5rO1xufVxuXG4vKiBuZWVkcyBpdHMgb3duIHJ1bGUgYmVjYXVzZSBvZiBidWdneSBJRSAqL1xuOmZvY3VzOmludmFsaWQge1xuICBiYWNrZ3JvdW5kOiBwaW5rO1xufVxuXG50ZC5lcnJvciB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG5idXR0b24sXG4uc3VibWl0IHtcbiAgcGFkZGluZzogMC4zNWVtIDAuNWVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjMDAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICBiYWNrZ3JvdW5kOiAjZGFkYWRhO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZWJlYmViLCAjYjhiOGI4KTtcbn1cblxuLmxvZ2luIHtcbiAgcGFkZGluZzogMC4zNWVtIDAuNWVtO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICMwMDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gIGJhY2tncm91bmQ6ICNkYWRhZGE7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNlYmViZWIsICNiOGI4YjgpO1xufVxuXG5hOmhvdmVyIHNwYW4sXG5hOmZvY3VzIHNwYW4sXG4jY29tbWVudHMgLm93bmVyIC5tZXRhIGEge1xuICBjb2xvcjogI2ZmZjtcbn1cblxuI29wdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgbGFiZWwsXG4gIHNlbGVjdCB7XG4gICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIH1cblxuICAub3B0aW9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIH1cbn1cblxuI3Rlc3QtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWF4LXdpZHRoOiA4MDBweDtcbn1cblxuI3Rlc3QtdGFibGUge1xuICBmbGV4OiAxIDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAuNWVtIDA7XG59XG5cbiNjb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZmxleDogMSAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuXG4uYnV0dG9ucyB7XG4gIGZsb2F0OiByaWdodDtcbn1cblxuYnV0dG9uOmhvdmVyLFxuYnV0dG9uOmZvY3VzLFxuLnN1Ym1pdDpob3Zlcixcbi5zdWJtaXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMzNTdhYjA7XG59XG5cbiNhZGQtYnV0dG9ucyBidXR0b24ge1xuICBwYWRkaW5nOiAwLjE1ZW0gMC40ZW07XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbmZvcm0gbGFiZWwge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDE0ZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBwYWRkaW5nOiAwLjRlbTtcbn1cblxubGFiZWwuaW5saW5lIHtcbiAgZmxvYXQ6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxubGFiZWxbZm9yPSd2aXNpYmxlJ10sXG5sYWJlbFtmb3IkPSddW2RlZmVyXSddIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0wLjM3ZW07XG59XG5cbmxhYmVsIHNwYW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAjYjRiNGI0O1xufVxuXG5sYWJlbCBlbSB7XG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuLmpzICNhZHZhbmNlZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNzaG93LWFkdmFuY2VkIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmpzICNzaG93LWFkdmFuY2VkIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbnNlY3Rpb24ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAyZW0gMDtcbn1cblxudGV4dGFyZWEge1xuICByZXNpemU6IHZlcnRpY2FsO1xuICBoZWlnaHQ6IDE1ZW07XG4gIHdpZHRoOiA0Mi42ZW07XG4gICp3aWR0aDogNDIuNGVtOyAvKiBJRSA8IDggKi9cbn1cblxuaW5wdXQsXG50ZXh0YXJlYSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNiNGI0YjQ7XG4gIHBhZGRpbmc6IDAuNGVtO1xufVxuXG5pbnB1dFt0eXBlPSdzZWFyY2gnXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuI3Zpc2libGUsXG4jY2FsaWJyYXRlIHtcbiAgLyogY2hlY2tib3hlcywgZm9yIElFICovXG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuZm9ybSBoMixcbmZvcm0gaDMsXG5mb3JtIGg0LFxucC5lcnJvcixcbi5wcmV2aWV3LFxuI2FkZC1saWJyYXJpZXMsXG4jYWRkLWJ1dHRvbnMge1xuICBwYWRkaW5nLWxlZnQ6IDI1MHB4O1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuaGdyb3VwIGgyLFxuI2ZpcmVidWcsXG4jamF2YSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbnByZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbnRhYmxlICNyZXN1bHRzLTEge1xuICB3aWR0aDogMTAwcHg7XG59XG5cbnRhYmxlIHByZSB7XG4gICpwYWRkaW5nOiAxLjVlbSAwOyAvKiBJRSA8IDggKi9cbiAgKm92ZXJmbG93LXk6IGhpZGRlbjsgLyogSUUgPCA4ICovXG59XG5cbnRhYmxlIHByZSxcbnRhYmxlIHRkLmNvZGUge1xuICB3aWR0aDogNjAwcHg7XG59XG5cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmY5O1xuICBwYWRkaW5nOiAwLjJlbSAwLjFlbTtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbmgxIHtcbiAgcGFkZGluZy10b3A6IDFlbTtcbiAgZm9udC1zaXplOiAxLjRlbTtcbn1cblxuZm9ybSBoMyB7XG4gIHBhZGRpbmctdG9wOiAwLjJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMmVtO1xufVxuXG5oMSBlbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuaDEgc3Ryb25nIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LWZhbWlseTogTW9uYWNvLCAnTHVjaWRhIENvbnNvbGUnLCBtb25vc3BhY2U7XG59XG5cbmxpLmN1cnJlbnQgYSB7XG4gIGJhY2tncm91bmQ6ICM5MGVlODU7XG59XG5cbmZvb3RlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAyZW07XG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjYzRjNGM0O1xuICBmb250LXNpemU6IDAuOWVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG5mb290ZXIgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG59XG5cbmZvb3RlciA+IHVsID4gbGkge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDE1JTtcbn1cblxuZm9vdGVyID4gdWwgPiBsaTpmaXJzdC1jaGlsZCB7XG4gIHdpZHRoOiA1NSU7XG59XG5cbmZvb3RlciB1bCB1bCBsaSB7XG4gIG1hcmdpbi1ib3R0b206IDAuMWVtO1xufVxuXG5mb290ZXIgaDQge1xuICBtYXJnaW4tYm90dG9tOiAwLjJlbTtcbn1cblxuI2FkZC10ZXN0IHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjNlbTtcbn1cblxuI2JzLWNoYXJ0IHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbiNicy1jaGFydC1mcmFtZSB7XG4gIGhlaWdodDogMjQwcHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4jYnMtbG9nbyB7XG4gIG1hcmdpbjogMDtcbn1cblxuI2JzLWxvZ28gc3BhbixcbmFwcGxldCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTk5OTllbTtcbn1cblxuI2JzLWxvZ28gYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMjMycHg7XG4gIGhlaWdodDogMzlweDtcbiAgZmlsdGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiB1cmwoLy93d3cuYnJvd3NlcnNjb3BlLm9yZy9zdGF0aWMvaW1nL2xvZ28ucG5nKSAwIDAgbm8tcmVwZWF0O1xufVxuXG4jYnMtdWEge1xuICBwYWRkaW5nOiAwLjVlbSAwLjVlbSAwO1xuICBjb2xvcjogIzU1NTtcbn1cblxuI2JzLXJlc3VsdHMgLmJzLXJ0IHtcbiAgZm9udC1zaXplOiAxMHB0O1xuICBwYWRkaW5nOiAwLjVlbTtcbiAgYmFja2dyb3VuZDogI2RkZDtcbn1cblxuI2JzLXJlc3VsdHMgdGQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBwYWRkaW5nOiAwLjRlbTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuI2JzLXJlc3VsdHMgLnJ0LXVhLWN1ciB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbiNicy1yZXN1bHRzIC5icy1ydC1tZXNzYWdlIHtcbiAgcGFkZGluZzogM2VtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzU1NTtcbn1cblxuI2JzLXJlc3VsdHMgLmdvb2dsZS12aXN1YWxpemF0aW9uLXRhYmxlLXRyLWhlYWQgdGQge1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG4jY29tbWVudHMgaDEge1xuICBwYWRkaW5nOiAwO1xufVxuXG4jY29tbWVudHMgLm1ldGEgaW1nIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxuI2NvbW1lbnRzIC5tZXRhIGltZyB7XG4gIHRvcDogMnB4O1xuICBsZWZ0OiAycHg7XG59XG5cbiNjb21tZW50cyAubWV0YSB7XG4gIHBhZGRpbmctbGVmdDogMzVweDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgd2lkdGg6IDkyM3B4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbn1cblxuI2NvbW1lbnRzIC5tZXRhIGEge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICM1NTU7XG59XG5cbiNjb21tZW50cyBhcnRpY2xlIGRpdiB7XG4gIHBhZGRpbmc6IDAgMWVtIDA7XG59XG5cbiNjb21tZW50cyBhcnRpY2xlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNiNGI0YjQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG4vKiBuZWVkcyBpdHMgb3duIHJ1bGUgKGNhbm5vdCBiZSBncm91cGVkIHdpdGggYHRib2R5IHRoYCkgYmVjYXVzZSBvZiBidWdneSBJRSAqL1xuI2NvbW1lbnRzIGFydGljbGU6dGFyZ2V0IHtcbiAgYmFja2dyb3VuZDogI2RkZTRlYTtcbn1cblxuI2Vycm9yLWluZm8uc2hvdyxcbi5tZXRhIHN0cm9uZyxcbiNmaXJlYnVnIHN0cm9uZyxcbiNqYXZhIHN0cm9uZyxcbiNzdGF0dXMgc3Ryb25nIHtcbiAgYmFja2dyb3VuZDogcGluaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2IwMGIwMDtcbiAgcGFkZGluZzogMC40ZW07XG59XG5cbiNlcnJvci1pbmZvLnNob3cge1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG59XG5cbiNlcnJvci1pbmZvLFxuY29kZSxcbnNhbXAsXG52YXIsXG50ZXh0YXJlYSxcbiNzbHVnIHtcbiAgZm9udC1mYW1pbHk6IE1vbmFjbywgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDAuOWVtO1xuICAtbW96LXRhYi1zaXplOiAyO1xuICAtby10YWItc2l6ZTogMjtcbiAgdGFiLXNpemU6IDI7XG59XG5cbiNqYXZhIHN0cm9uZyB7XG4gIGJhY2tncm91bmQ6ICNmZmZmZGM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmYWE3MDA7XG59XG5cbiNzbHVnIHtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbiNmYXEgZHQge1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4jZmFxIGR0IGEge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4jZmFxIGR0OmhvdmVyIGEge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbiNmYXEgZHQ6dGFyZ2V0LFxuI2ZhcSBkdDp0YXJnZXQgKyBkZCB7XG4gIGJhY2tncm91bmQ6ICM5MGVlODU7XG4gIG1hcmdpbjogMCAtMC44ZW07XG4gIHBhZGRpbmc6IDAgMC44ZW07XG59XG5cbiNmYXEgZHQ6dGFyZ2V0ICsgZGQge1xuICBwYWRkaW5nLWJvdHRvbTogMC41ZW07XG4gIG1hcmdpbi1ib3R0b206IC0wLjVlbTtcbn1cblxuI2ZhcSBkdDp0YXJnZXQge1xuICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgcGFkZGluZy10b3A6IDAuNWVtO1xufVxuXG4jZmlyZWJ1ZyxcbiNqYXZhIHtcbiAgbWFyZ2luOiAwIDAgMWVtO1xuICBwYWRkaW5nOiAwLjNlbSAwO1xufVxuXG4jcHJlcC1jb2RlIHByZSB7XG4gIG1heC1oZWlnaHQ6IDUwMHB4O1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuI2ZpcmVidWcuc2hvdyxcbiNqYXZhLnNob3cge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmNvMSxcbi5jbzIsXG4uY29NVUxUSSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgY29sb3I6ICMwNjA7XG59XG5cbi5lcnJvciB7XG4gIGNvbG9yOiAjYjAwYjAwO1xufVxuXG4uaW1wIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuLmt3MSxcbi5rdzMge1xuICBjb2xvcjogIzAwNjtcbn1cblxuLmt3MiB7XG4gIGNvbG9yOiAjMDM2O1xufVxuXG4uZXMwIHtcbiAgY29sb3I6ICMwMDk7XG59XG5cbi5icjAge1xuICBjb2xvcjogIzA5MDtcbn1cblxuLnN5MCB7XG4gIGNvbG9yOiAjMzkzO1xufVxuXG4uc3QwIHtcbiAgY29sb3I6ICMzNmM7XG59XG5cbi5udTAge1xuICBjb2xvcjogI2MwMDtcbn1cblxuLm1lMSB7XG4gIGNvbG9yOiAjNjA2O1xufVxuXG4jY2FyYm9uYWRzIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICB3aWR0aDogMTMwcHg7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG4jY2FyYm9uYWRzIGEge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyogPCAxMDUxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDUwcHgpIHtcbiAgdGFibGUgcHJlLFxuICB0YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogNTUwcHg7XG4gIH1cbn1cblxuLyogPCAxMDQxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDQwcHgpIHtcbiAgYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGJvcmRlcjogMDtcbiAgfVxuXG4gIGJvZHksXG4gICNjb21tZW50cyAubWV0YSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG59XG5cbi8qIDwgODAxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA4MDBweCkge1xuICB0YWJsZSBwcmUsXG4gIHRhYmxlIHRkLmNvZGUge1xuICAgIHdpZHRoOiA0NTBweDtcbiAgfVxufVxuXG4vKiA8IDY4MXB4ICovXG5AbWVkaWEgKG1heC13aWR0aDogNjgwcHgpIHtcbiAgdGFibGUgcHJlLFxuICB0YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogMzUwcHg7XG4gIH1cbn1cblxuLyogPCA2NTFweCAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDY1MHB4KSB7XG4gIHRhYmxlIHByZSxcbiAgdGFibGUgdGQuY29kZSB7XG4gICAgd2lkdGg6IDIwMHB4O1xuICB9XG59XG4iLCJodG1sLFxuYm9keSxcbmgxLFxuaDIsXG5oMyxcbmZpZWxkc2V0LFxuI2ZhcSxcbiNmYXEgZHQsXG4jZmFxIGRkIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG59XG5cbnRhYmxlLFxucCxcbnVsLFxuaDEsXG5oMixcbmgzLFxuI2Vycm9yLWluZm8sXG5mb3JtIGRpdixcbiNmYXEsXG4uYnMtcnQge1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cbmJ1dHRvbixcbmlucHV0LFxudGV4dGFyZWEsXG5hLFxuLmJzLXJ0IHtcbiAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbmh0bWwsXG5pbnB1dCxcbnRleHRhcmVhLFxuYnV0dG9uIHtcbiAgZm9udDogMWVtLzEuNSBzYW5zLXNlcmlmO1xufVxuXG5ib2R5IHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgcGFkZGluZzogMCAyLjVlbTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG59XG5cbmEsXG4uYnRuLWxpbmsge1xuICBjb2xvcjogIzM1N2FiMDtcbiAgcGFkZGluZzogMC4yZW07XG59XG5cbmE6aG92ZXIsXG5hOmZvY3VzLFxuLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uYnRuLWxpbmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rOmZvY3VzIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5ibG9ja3F1b3RlIHtcbiAgbWFyZ2luOiAwIDAgMWVtO1xuICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNiNGI0YjQ7XG4gIHBhZGRpbmctbGVmdDogMC41ZW07XG59XG5cbnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbn1cblxudGhlYWQgdGgsXG5idXR0b246aG92ZXIsXG5idXR0b246Zm9jdXMsXG4uc3VibWl0OmhvdmVyLFxuLnN1Ym1pdDpmb2N1cyxcbmE6aG92ZXIsXG5hOmZvY3VzLFxuLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rOmZvY3VzLFxuI2NvbW1lbnRzIC5tZXRhIGE6aG92ZXIsXG4jY29tbWVudHMgLm1ldGEgYTpmb2N1cyxcbmxpLmN1cnJlbnQgYTpob3ZlcixcbmxpLmN1cnJlbnQgYTpmb2N1cyxcbmZvcm0gaDMsXG4jY29tbWVudHMgLm93bmVyIC5tZXRhIHtcbiAgYmFja2dyb3VuZDogIzFhNmFiOTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgIzZjYTVkZCwgIzFhNmFiOSk7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG5jYXB0aW9uLFxuI2NvbW1lbnRzIC5tZXRhIHtcbiAgYmFja2dyb3VuZDogI2JjYmNiYztcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2QwZDBkMCwgI2E3YTdhNyk7XG4gIGNvbG9yOiAjNTU1O1xufVxuXG50aGVhZCB0aCxcbmNhcHRpb24ge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmpzIHRib2R5IHRoOmhvdmVyLFxuLmpzIHRib2R5IHRoOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxudGJvZHkgdGgsXG50ZCB7XG4gIGJvcmRlcjogc29saWQgI2I0YjRiNDtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAxcHggMDtcbn1cblxudGJvZHkgdGgge1xuICBiYWNrZ3JvdW5kOiAjZGRlNGVhO1xuICB3aWR0aDogMTUwcHg7XG59XG5cbnRkLnJlc3VsdHMge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci1yaWdodDogMDtcbn1cblxuLnJlc3VsdHMgc3BhbixcbnNtYWxsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbnRkLFxudGgsXG5jYXB0aW9uIHtcbiAgcGFkZGluZzogMC4yZW0gMC41ZW07XG59XG5cbnRkLmZhc3Rlc3Qge1xuICBiYWNrZ3JvdW5kOiAjOWNlZTgyO1xufVxuXG50cjpsYXN0LWNoaWxkIHRkLFxudHI6bGFzdC1jaGlsZCB0aCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG5cbnRkLnNsb3dlc3QsXG50ZC5lcnJvcixcbi5pbnZhbGlkIHtcbiAgYmFja2dyb3VuZDogcGluaztcbn1cblxuLyogbmVlZHMgaXRzIG93biBydWxlIGJlY2F1c2Ugb2YgYnVnZ3kgSUUgKi9cbjpmb2N1czppbnZhbGlkIHtcbiAgYmFja2dyb3VuZDogcGluaztcbn1cblxudGQuZXJyb3Ige1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuYnV0dG9uLFxuLnN1Ym1pdCB7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjVlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogIzAwMDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTtcbiAgYmFja2dyb3VuZDogI2RhZGFkYTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2ViZWJlYiwgI2I4YjhiOCk7XG59XG5cbi5sb2dpbiB7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjVlbTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjMDAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICBiYWNrZ3JvdW5kOiAjZGFkYWRhO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZWJlYmViLCAjYjhiOGI4KTtcbn1cblxuYTpob3ZlciBzcGFuLFxuYTpmb2N1cyBzcGFuLFxuI2NvbW1lbnRzIC5vd25lciAubWV0YSBhIHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbiNvcHRpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuI29wdGlvbnMgbGFiZWwsXG4jb3B0aW9ucyBzZWxlY3Qge1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbiNvcHRpb25zIC5vcHRpb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuXG4jdGVzdC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXgtd2lkdGg6IDgwMHB4O1xufVxuXG4jdGVzdC10YWJsZSB7XG4gIGZsZXg6IDEgMTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMC41ZW0gMDtcbn1cblxuI2NvbnRyb2xzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4OiAxIDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAuNWVtIDA7XG59XG5cbi5idXR0b25zIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG5idXR0b246aG92ZXIsXG5idXR0b246Zm9jdXMsXG4uc3VibWl0OmhvdmVyLFxuLnN1Ym1pdDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzM1N2FiMDtcbn1cblxuI2FkZC1idXR0b25zIGJ1dHRvbiB7XG4gIHBhZGRpbmc6IDAuMTVlbSAwLjRlbTtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuZm9ybSBsYWJlbCB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTRlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIHBhZGRpbmc6IDAuNGVtO1xufVxuXG5sYWJlbC5pbmxpbmUge1xuICBmbG9hdDogbm9uZTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG5sYWJlbFtmb3I9dmlzaWJsZV0sXG5sYWJlbFtmb3IkPVwiXVtkZWZlcl1cIl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTAuMzdlbTtcbn1cblxubGFiZWwgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICNiNGI0YjQ7XG59XG5cbmxhYmVsIGVtIHtcbiAgY29sb3I6IHJlZDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4uanMgI2FkdmFuY2VkIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuI3Nob3ctYWR2YW5jZWQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uanMgI3Nob3ctYWR2YW5jZWQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDJlbSAwO1xufVxuXG50ZXh0YXJlYSB7XG4gIHJlc2l6ZTogdmVydGljYWw7XG4gIGhlaWdodDogMTVlbTtcbiAgd2lkdGg6IDQyLjZlbTtcbiAgKndpZHRoOiA0Mi40ZW07XG4gIC8qIElFIDwgOCAqL1xufVxuXG5pbnB1dCxcbnRleHRhcmVhIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2I0YjRiNDtcbiAgcGFkZGluZzogMC40ZW07XG59XG5cbmlucHV0W3R5cGU9c2VhcmNoXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuI3Zpc2libGUsXG4jY2FsaWJyYXRlIHtcbiAgLyogY2hlY2tib3hlcywgZm9yIElFICovXG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuZm9ybSBoMixcbmZvcm0gaDMsXG5mb3JtIGg0LFxucC5lcnJvcixcbi5wcmV2aWV3LFxuI2FkZC1saWJyYXJpZXMsXG4jYWRkLWJ1dHRvbnMge1xuICBwYWRkaW5nLWxlZnQ6IDI1MHB4O1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuaGdyb3VwIGgyLFxuI2ZpcmVidWcsXG4jamF2YSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbnByZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbnRhYmxlICNyZXN1bHRzLTEge1xuICB3aWR0aDogMTAwcHg7XG59XG5cbnRhYmxlIHByZSB7XG4gICpwYWRkaW5nOiAxLjVlbSAwO1xuICAvKiBJRSA8IDggKi9cbiAgKm92ZXJmbG93LXk6IGhpZGRlbjtcbiAgLyogSUUgPCA4ICovXG59XG5cbnRhYmxlIHByZSxcbnRhYmxlIHRkLmNvZGUge1xuICB3aWR0aDogNjAwcHg7XG59XG5cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmY5O1xuICBwYWRkaW5nOiAwLjJlbSAwLjFlbTtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbmgxIHtcbiAgcGFkZGluZy10b3A6IDFlbTtcbiAgZm9udC1zaXplOiAxLjRlbTtcbn1cblxuZm9ybSBoMyB7XG4gIHBhZGRpbmctdG9wOiAwLjJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMmVtO1xufVxuXG5oMSBlbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuaDEgc3Ryb25nIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LWZhbWlseTogTW9uYWNvLCBcIkx1Y2lkYSBDb25zb2xlXCIsIG1vbm9zcGFjZTtcbn1cblxubGkuY3VycmVudCBhIHtcbiAgYmFja2dyb3VuZDogIzkwZWU4NTtcbn1cblxuZm9vdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDJlbTtcbiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNjNGM0YzQ7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbmZvb3RlciB1bCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxuZm9vdGVyID4gdWwgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTUlO1xufVxuXG5mb290ZXIgPiB1bCA+IGxpOmZpcnN0LWNoaWxkIHtcbiAgd2lkdGg6IDU1JTtcbn1cblxuZm9vdGVyIHVsIHVsIGxpIHtcbiAgbWFyZ2luLWJvdHRvbTogMC4xZW07XG59XG5cbmZvb3RlciBoNCB7XG4gIG1hcmdpbi1ib3R0b206IDAuMmVtO1xufVxuXG4jYWRkLXRlc3Qge1xuICBtYXJnaW4tcmlnaHQ6IDAuM2VtO1xufVxuXG4jYnMtY2hhcnQge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuI2JzLWNoYXJ0LWZyYW1lIHtcbiAgaGVpZ2h0OiAyNDBweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbiNicy1sb2dvIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4jYnMtbG9nbyBzcGFuLFxuYXBwbGV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtOTk5OWVtO1xufVxuXG4jYnMtbG9nbyBhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAyMzJweDtcbiAgaGVpZ2h0OiAzOXB4O1xuICBmaWx0ZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHVybCgvL3d3dy5icm93c2Vyc2NvcGUub3JnL3N0YXRpYy9pbWcvbG9nby5wbmcpIDAgMCBuby1yZXBlYXQ7XG59XG5cbiNicy11YSB7XG4gIHBhZGRpbmc6IDAuNWVtIDAuNWVtIDA7XG4gIGNvbG9yOiAjNTU1O1xufVxuXG4jYnMtcmVzdWx0cyAuYnMtcnQge1xuICBmb250LXNpemU6IDEwcHQ7XG4gIHBhZGRpbmc6IDAuNWVtO1xuICBiYWNrZ3JvdW5kOiAjZGRkO1xufVxuXG4jYnMtcmVzdWx0cyB0ZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIHBhZGRpbmc6IDAuNGVtO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4jYnMtcmVzdWx0cyAucnQtdWEtY3VyIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuI2JzLXJlc3VsdHMgLmJzLXJ0LW1lc3NhZ2Uge1xuICBwYWRkaW5nOiAzZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjNTU1O1xufVxuXG4jYnMtcmVzdWx0cyAuZ29vZ2xlLXZpc3VhbGl6YXRpb24tdGFibGUtdHItaGVhZCB0ZCB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbiNjb21tZW50cyBoMSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbiNjb21tZW50cyAubWV0YSBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4jY29tbWVudHMgLm1ldGEgaW1nIHtcbiAgdG9wOiAycHg7XG4gIGxlZnQ6IDJweDtcbn1cblxuI2NvbW1lbnRzIC5tZXRhIHtcbiAgcGFkZGluZy1sZWZ0OiAzNXB4O1xuICBtYXJnaW4tdG9wOiAwO1xuICB3aWR0aDogOTIzcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuXG4jY29tbWVudHMgLm1ldGEgYSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzU1NTtcbn1cblxuI2NvbW1lbnRzIGFydGljbGUgZGl2IHtcbiAgcGFkZGluZzogMCAxZW0gMDtcbn1cblxuI2NvbW1lbnRzIGFydGljbGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2I0YjRiNDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cbi8qIG5lZWRzIGl0cyBvd24gcnVsZSAoY2Fubm90IGJlIGdyb3VwZWQgd2l0aCBgdGJvZHkgdGhgKSBiZWNhdXNlIG9mIGJ1Z2d5IElFICovXG4jY29tbWVudHMgYXJ0aWNsZTp0YXJnZXQge1xuICBiYWNrZ3JvdW5kOiAjZGRlNGVhO1xufVxuXG4jZXJyb3ItaW5mby5zaG93LFxuLm1ldGEgc3Ryb25nLFxuI2ZpcmVidWcgc3Ryb25nLFxuI2phdmEgc3Ryb25nLFxuI3N0YXR1cyBzdHJvbmcge1xuICBiYWNrZ3JvdW5kOiBwaW5rO1xuICBib3JkZXI6IDFweCBzb2xpZCAjYjAwYjAwO1xuICBwYWRkaW5nOiAwLjRlbTtcbn1cblxuI2Vycm9yLWluZm8uc2hvdyB7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbn1cblxuI2Vycm9yLWluZm8sXG5jb2RlLFxuc2FtcCxcbnZhcixcbnRleHRhcmVhLFxuI3NsdWcge1xuICBmb250LWZhbWlseTogTW9uYWNvLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG4gIC1tb3otdGFiLXNpemU6IDI7XG4gIC1vLXRhYi1zaXplOiAyO1xuICB0YWItc2l6ZTogMjtcbn1cblxuI2phdmEgc3Ryb25nIHtcbiAgYmFja2dyb3VuZDogI2ZmZmZkYztcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZhYTcwMDtcbn1cblxuI3NsdWcge1xuICBmb250LXNpemU6IDFlbTtcbn1cblxuI2ZhcSBkdCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbiNmYXEgZHQgYSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNmYXEgZHQ6aG92ZXIgYSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cblxuI2ZhcSBkdDp0YXJnZXQsXG4jZmFxIGR0OnRhcmdldCArIGRkIHtcbiAgYmFja2dyb3VuZDogIzkwZWU4NTtcbiAgbWFyZ2luOiAwIC0wLjhlbTtcbiAgcGFkZGluZzogMCAwLjhlbTtcbn1cblxuI2ZhcSBkdDp0YXJnZXQgKyBkZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVlbTtcbiAgbWFyZ2luLWJvdHRvbTogLTAuNWVtO1xufVxuXG4jZmFxIGR0OnRhcmdldCB7XG4gIG1hcmdpbi10b3A6IDAuNWVtO1xuICBwYWRkaW5nLXRvcDogMC41ZW07XG59XG5cbiNmaXJlYnVnLFxuI2phdmEge1xuICBtYXJnaW46IDAgMCAxZW07XG4gIHBhZGRpbmc6IDAuM2VtIDA7XG59XG5cbiNwcmVwLWNvZGUgcHJlIHtcbiAgbWF4LWhlaWdodDogNTAwcHg7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4jZmlyZWJ1Zy5zaG93LFxuI2phdmEuc2hvdyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uY28xLFxuLmNvMixcbi5jb01VTFRJIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBjb2xvcjogIzA2MDtcbn1cblxuLmVycm9yIHtcbiAgY29sb3I6ICNiMDBiMDA7XG59XG5cbi5pbXAge1xuICBjb2xvcjogcmVkO1xufVxuXG4ua3cxLFxuLmt3MyB7XG4gIGNvbG9yOiAjMDA2O1xufVxuXG4ua3cyIHtcbiAgY29sb3I6ICMwMzY7XG59XG5cbi5lczAge1xuICBjb2xvcjogIzAwOTtcbn1cblxuLmJyMCB7XG4gIGNvbG9yOiAjMDkwO1xufVxuXG4uc3kwIHtcbiAgY29sb3I6ICMzOTM7XG59XG5cbi5zdDAge1xuICBjb2xvcjogIzM2Yztcbn1cblxuLm51MCB7XG4gIGNvbG9yOiAjYzAwO1xufVxuXG4ubWUxIHtcbiAgY29sb3I6ICM2MDY7XG59XG5cbiNjYXJib25hZHMge1xuICBmbG9hdDogcmlnaHQ7XG4gIHdpZHRoOiAxMzBweDtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbiNjYXJib25hZHMgYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiA8IDEwNTFweCAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDEwNTBweCkge1xuICB0YWJsZSBwcmUsXG50YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogNTUwcHg7XG4gIH1cbn1cbi8qIDwgMTA0MXB4ICovXG5AbWVkaWEgKG1heC13aWR0aDogMTA0MHB4KSB7XG4gIGJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICBib2R5LFxuI2NvbW1lbnRzIC5tZXRhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cbn1cbi8qIDwgODAxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA4MDBweCkge1xuICB0YWJsZSBwcmUsXG50YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogNDUwcHg7XG4gIH1cbn1cbi8qIDwgNjgxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2ODBweCkge1xuICB0YWJsZSBwcmUsXG50YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogMzUwcHg7XG4gIH1cbn1cbi8qIDwgNjUxcHggKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2NTBweCkge1xuICB0YWJsZSBwcmUsXG50YWJsZSB0ZC5jb2RlIHtcbiAgICB3aWR0aDogMjAwcHg7XG4gIH1cbn0iXX0= */