diff --git a/.gitignore b/.gitignore
index d67db0f..092d05c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
.pio
node_modules
.vscode
-.DS_Store
\ No newline at end of file
+.DS_Store
+.idea
\ No newline at end of file
diff --git a/data/index.js b/data/index.js
index ccdacd2..b1bdeb0 100644
--- a/data/index.js
+++ b/data/index.js
@@ -719,12 +719,13 @@ function varRemoveValuesForRow(variable, rowNr) {
//process json from server, json is assumed to be an object
function receiveData(json) {
- // console.log("receiveData", json);
if (isObject(json)) {
for (let key of Object.keys(json)) {
let value = json[key];
+ // console.log("receiveData", key + ": " + JSON.stringify(json[key]));
+
//tbd: for each node of a variable (rowNr)
//special commands
diff --git a/data/newui/index.htm b/data/newui/index.htm
index 9aaef9c..5b670ae 100644
--- a/data/newui/index.htm
+++ b/data/newui/index.htm
@@ -19,7 +19,7 @@
-
+
diff --git a/data/newui/index.js b/data/newui/index.js
index 63d25c7..a2c1387 100644
--- a/data/newui/index.js
+++ b/data/newui/index.js
@@ -26,9 +26,20 @@ class Controller {
this.modules = new Modules();
+ let body = gId("body");
+
+ body.innerHTML += `
StarLight 💫 `
+ // body.innerHTML += ""
+
this.theme = new Theme();
this.theme.createHTML();
this.theme.getTheme();
+
+ // body.innerHTML += "
"
+ if (window.location.href.includes("127.0.0.1")) {
+ //add checkbox
+ body.innerHTML += ` `
+ }
this.mainNav = new MainNav(this.modules.model);
this.mainNav.createHTML();
@@ -62,6 +73,7 @@ class Controller {
// every 1 second
window.setInterval(function() {
+ if (gId("Live.on").checked)
controller.modules.generateData() //generates data for each variabe in model
}, 1000);
@@ -208,6 +220,7 @@ const UINT16_MAX = 256*256-1;
function gId(c) {return document.getElementById(c);}
function cE(e) { return document.createElement(e); }
+function cCE(p, e) {let n = document.createElement(e); p.appendChild(n); return n; } //add node to parent
function isLowerCase(s) {
return s.toLowerCase() == s
diff --git a/data/newui/mainnav.js b/data/newui/mainnav.js
index ba902f4..4d5c0dd 100644
--- a/data/newui/mainnav.js
+++ b/data/newui/mainnav.js
@@ -22,7 +22,7 @@ class MainNav {
or shrink if there is nothing to show in the alerts area -->
@@ -105,14 +105,14 @@ class MainNav {
// Update the page content
if (this.#createHTMLFun) {
- gId('page').innerHTML =
+ gId('page').innerHTML =
`
${this.#activeModuleJson.id}
-
` + this.#createHTMLFun(this.#activeModuleJson) +
- `
+
`
+ this.#createHTMLFun(this.#activeModuleJson, gId("Module.main"))
}
//done after innerHTML as it needs to find the nodes. tbd: createHTMLFun adds to dom directly
if (this.#setDefaultValuesFun) {
diff --git a/data/newui/modules.css b/data/newui/modules.css
index 8c3d289..7172e7b 100644
--- a/data/newui/modules.css
+++ b/data/newui/modules.css
@@ -9,28 +9,175 @@
@license For non GPL-v3 usage, commercial licenses must be purchased. Contact moonmodules@icloud.com
*/
+body {
+ font-family: Arial, Helvetica, sans-serif;
+ background: black;
+ color: var(--text-color);
+ font-size: var(--font-size);
+}
+
+h1,h2 {
+ color: var(--h-color);
+ line-height: 5px;
+}
+
+div {
+ line-height: 2.0; /* 1.6 is recommended height */
+}
+
/* default nodes */
label {
- margin-right: 6px; /*space after*/
- color: var(--label-color);
+ margin-right: 6px; /*space after*/
+ color: var(--label-color);
+}
+
+comment {
+ /* font-size: 10px; */
+ font-style: italic;
+ margin-left: 6px; /*space before*/
+ color: var(--comment-color);
+}
+
+input {
+ background: grey;
+ color: var(--text-color);
+ font-size: 12px; /*var(--font-size-s) not working for some reason */
+}
+
+/* input[type="button"] {
+ padding: 7px;
+}
+*/
+
+ select {
+ background: transparent;
+ color: var(--text-color);
+ font-size: 12px; /*var(--font-size-s) not working for some reason */
+}
+
+option {
+ color: var(--text-color);
+ background: var(--bg-color);
+}
+
+a {
+ color: var(--h-color);
+ text-decoration: none;
+}
+
+/* text { /*currently only for buttonSaveNode and buttonCancelNode
+ font-size: 10px;
+} */
+
+/* For textarea variables */
+textarea {
+ width: 100%;
+ height: 100%;
+ border-radius: 12px;
+ background: transparent;
+ color: var(--text-color);
+}
+
+canvas {
+ width: 100%;
+ height: 100%;
+ border-radius: 12px;
+ border: 1px solid black;
+ background: transparent;
+ cursor: default;
+}
+
+.ndiv {
+ /* border: 2px solid black; */
+ margin-left: 20px;
+ /* border-radius: 12px; */
}
- comment {
- /* font-size: 10px; */
+ /*table layout */
+.table {
+ font-family: Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ width: 0;
+ border-radius: 10px; /*does not seem to work */
+ border-style: hidden; /* hide standard table (collapsed) border */
+ box-shadow: 0 0 0 1px #666; /* this draws the table border */
+}
+
+.table td, .table th {
+ border: 1px solid #000000;
+ padding: 6px;
+ vertical-align: top;
+}
+
+.table th {
+ /* padding-top: 12px;
+ padding-bottom: 12px; */
+ text-align: left;
+ background-color: var(--th-color);
+ color: var(--label-color);
+}
+
+.module, .appmod, .sysmod, .usermod {
+ border: 2px solid var(--border-color);
+ /* background-color: #ddd; */
+ /* background: linear-gradient(to bottom, #33ccff 0%, #ff99cc 100%); */
+ background: var(--bg-color); /* linear-gradient(to bottom, #ffbe33 0%, #b60f62 100%); */
+ border-radius: 10px; /* from .5em */
+ padding: 5px;
+ margin: 5px; /*space around modules */
+ cursor: move;
+}
+
+
+.tooltip {
+ position: relative;
+ display: inline-block;
+ border-bottom: 1px dotted black; /* If you want dots under the hoverable text */
+ }
+
+ /* Tooltip text */
+ .tooltip .tooltiptext {
+ visibility: hidden;
+ width: 120px;
+ background-color: var(--bg-color);
font-style: italic;
- margin-left: 6px; /*space before*/
color: var(--comment-color);
+ text-align: center;
+ padding: 5px 0;
+ border-radius: 6px;
+ /* font-size: 10px; SM */
+
+ /* Position the tooltip text */
+ position: absolute;
+ z-index: 1;
+ bottom: 125%;
+ left: 50%;
+ margin-left: -60px;
+
+ /* Fade in tooltip */
+ opacity: 0;
+ transition: opacity 0.3s;
}
- input {
- background: transparent;
- color: var(--text-color);
- font-size: 8px; /*var(--font-size-s) not working for some reason */
+ /* Tooltip arrow */
+ .tooltip .tooltiptext::after {
+ content: "";
+ position: absolute;
+ top: 100%;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px;
+ border-style: solid;
+ border-color: #555 transparent transparent transparent;
}
- .ndiv {
- /* border: 2px solid black; */
- margin-left: 20px;
- /* border-radius: 12px; */
+ /* Show the tooltip text when you mouse over the tooltip mdlContainer */
+ .tooltip:hover .tooltiptext {
+ visibility: visible;
+ opacity: 1;
}
-
\ No newline at end of file
+
+ /*used for view buttons*/
+ .selected {
+ background: var(--select-color);
+ }
\ No newline at end of file
diff --git a/data/newui/modules.js b/data/newui/modules.js
index f054f74..dc0e9e6 100644
--- a/data/newui/modules.js
+++ b/data/newui/modules.js
@@ -19,8 +19,8 @@ class Modules {
//generates html for a module
//for some strange reason, this method does not accept this.otherMethodInThisClass ???
- createHTML(moduleJson) {
- let code = ""
+ createHTML(moduleJson, parentNode) {
+ parentNode.innerHTML = `
`
controller.modules.test("test")
// this.test("ew") //this.otherMethodInThisClass: [Error] Unhandled Promise Rejection: TypeError: this.test is not a function. (In 'this.test("ew")', 'this.test' is undefined)
@@ -29,26 +29,28 @@ class Modules {
return Math.abs(a.o) - Math.abs(b.o); //o is order nr (ignore negatives for the time being)
});
+ //all variables of module
for (let variable of moduleJson.n) {
let variableClass = varJsonToClass(variable);
- code += variableClass.createHTML()
+ variableClass.createHTML(gId(`m.${moduleJson.id}`))
}
- code += '' + JSON.stringify(moduleJson, null, 2) + ' '
- return code
+
+ gId(`m.${moduleJson.id}`).innerHTML += '' + JSON.stringify(moduleJson, null, 2) + ' '
}
//done after innerHTML as it needs to find the nodes. tbd: createHTMLFun adds to dom directly
setDefaultValues(moduleJson) {
+ return;
// console.log("setDefaultValues", moduleJson)
- controller.modules.walkThroughModel(function(variable) { //this.walkThroughModel not working for some reason???
+ controller.modules.walkThroughModel(function(parent, variable) { //this.walkThroughModel not working for some reason???
- if (Array.isArray(variable.value)) variable.value = variable.value[0] //temp hack to deal with table values
+ // if (Array.isArray(variable.value)) variable.value = variable.value[0] //temp hack to deal with table values
if (variable.value != null) {
let variableClass = varJsonToClass(variable);
variableClass.receiveData({"value":variable.value}); //receiveData knows how the value should be assigned to the node
}
- }, moduleJson.n)
+ }, moduleJson)
}
//temporary to test issue above
@@ -58,7 +60,7 @@ class Modules {
//used by fetchModel and by makeWS
addModule(moduleJson) {
- moduleJson.type = moduleJson.type=="appmod"?appName():moduleJson.type=="usermod"?"User":"System";
+ moduleJson.type = moduleJson.type=="appmod"?appName():moduleJson.type=="usermod"?"User":"System"; //to display proper name
this.model.push(moduleJson);
//updateUI is made after all modules have been fetched, how to adapt to add one module?
@@ -67,15 +69,14 @@ class Modules {
}
//walkthrough, if a variable is returned by fun, it stops the walkthrough with this variable
- walkThroughModel(fun, parent = this.model) {
- for (let variable of parent) {
- let foundVar = null
- foundVar = fun(variable);
+ walkThroughModel(fun, parent = null) {
+ for (let variable of parent?parent.n:this.model) {
+ let foundVar = fun(parent, variable);
if (foundVar) return foundVar;
if (variable.n) {
- foundVar = this.walkThroughModel(fun, variable.n); //recursive
+ foundVar = this.walkThroughModel(fun, variable); //recursive
if (foundVar) return foundVar;
}
}
@@ -83,20 +84,30 @@ class Modules {
//loop through the model hierarchy and generateData data for each variable in the model
generateData() {
- this.walkThroughModel(function(variable) {
- let variableClass = varJsonToClass(variable);
- variableClass.generateData();
+ this.walkThroughModel(function(parent, variable) {
+ if (parent) { //no need to send modules
+ let variableClass = varJsonToClass(variable);
+ // console.log(variableClass.pidid())
+ variableClass.generateData();
+ }
})
}
//finds a var with id in the model, if found returns it
findVar(pid, id) {
// console.log("findVar", id, parent, model);
- return this.walkThroughModel(function(variable){
- if (variable.pid == pid, variable.id == id) //found variable
+ return this.walkThroughModel(function(parent, variable) {
+ if (variable.pid == pid && variable.id == id) //found variable
return variable; //this stops the walkThrough
})
}
+ findParentVar(pid, id) {
+ // console.log("findVar", id, parent, model);
+ return this.walkThroughModel(function(parent, variable) {
+ if (parent && parent.id == pid && variable.id == id) //found variable
+ return parent; //this stops the walkThrough
+ })
+ }
previewBoard(canvasNode, buffer) {
let boardColor;
@@ -206,6 +217,8 @@ function varJsonToClass(variable) {
switch (variable.type) {
case "text":
return new TextVariable(variable);
+ case "number":
+ return new NumberVariable(variable);
case "checkbox":
return new CheckboxVariable(variable);
case "range":
@@ -231,34 +244,116 @@ class Variable {
constructor(variable) {
this.variable = variable
- this.node = gId(this.variable.pid + "." + this.variable.id);
+ this.node = gId(this.pidid()); //for tables this is the header row
+ }
+
+ pidid(rowNr = UINT8_MAX) {
+ if (rowNr == UINT8_MAX)
+ return this.variable.pid + "." + this.variable.id
+ else
+ return this.variable.pid + "." + this.variable.id + "#" + rowNr
+ }
+
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ let node
+ if (this.variable.ro) {
+ node = `${this.variable.value} `
+ } else {
+ node = ` `
+ }
+ parentNode.innerHTML += node
}
- createHTML(node = ` `) {
- let code = `
- ${initCap(this.variable.id)}
- ${node}
-
`
+ createHTML(parentNode, rowNr = UINT8_MAX) {
- //ask server for onUI
- let command = {};
- command.onUI = [this.variable.pid + "." + this.variable.id];
- controller.requestJson(command); // this can be done here because of the async nature of requestJson, better is to do it after innerHTML+=...
+ // console.log("createHTML2", this.pidid(rowNr))
- if (this.variable.n) {
- code += `
`
+ parentNode.innerHTML += `
`
+
+ let divNode = gId(`${this.pidid(rowNr)}_d`)
+
+ if (parentNode.nodeName != "TD") //replace by parentVar...
+ divNode.innerHTML += `
${initCap(this.variable.id)} `
+
+ this.createNode(divNode, rowNr)
+
+ // if (!this.node) {
+ // this.node = gId(this.pidid(rowNr))
+ // console.log("new node", this.node, this.variable)
+ // }
+
+ //set the default value for this class
+ if (this.variable.value) {
+ console.log("init value", this.pidid(rowNr), this.variable.value)
+ if (rowNr == UINT8_MAX)
+ this.receiveValue(this.variable.value)
+ else
+ this.receiveValue(this.variable.value[rowNr], rowNr)
+ }
+
+ if (this.variable.n && this.variable.type != "table") { // a table will create it's own columns in createNode2
+
+ divNode.innerHTML += `
`
+
for (let childVar of this.variable.n) {
let childClass = varJsonToClass(childVar)
- code += childClass.createHTML();
+ childClass.createHTML(gId(this.pidid(rowNr) + "_n"), rowNr);
}
- code += `
`
}
- return code
-}
- //sets the value of the node to value of properties
+ //ask server for onUI, not if parent is table...
+ if (rowNr == UINT8_MAX) {
+ let command = {};
+ command.onUI = [this.pidid()];
+ controller.requestJson(command); // this can be done here because of the async nature of requestJson, better is to do it after innerHTML+=...
+ //this triggers receiveData for this class which processes onUI result (options, comment etc)
+ }
+
+
+ }
+
+ receiveValue(value, rowNr = UINT8_MAX) {
+ // console.log("Variable receiveValue", childVar, values)
+ // console.log(childVar.pidid())
+
+ let node = gId(this.pidid(rowNr))
+
+ if (node) {
+ if (node.nodeName == "SPAN") {
+ if (node.innerHTML != null)
+ node.innerHTML = value;
+ } else {
+ if (node.value != null)
+ node.value = value;
+ }
+ }
+ }
+
+ //add comment, if not exist, create comment
+ receiveComment(comment) {
+ // return;
+ if (comment) {
+ //if not tablecolumn
+ // let parentVar = controller.modules.findParentVar(this.variable.pid, this.variable.id);
+
+ // if (parentVar.type != "table") {
+ let commentNode = this.node.parentNode.querySelector("comment")
+ if (!commentNode) {
+ commentNode = cCE(this.node.parentNode, "comment") // disturbing canvas: this.node.parentNode.innerHTML += `${properties.comment} `
+ }
+ commentNode.innerText = comment
+ // }
+ // else
+ // to do add to th
+ }
+ }
+
receiveData(properties) {
+
if (this.node) {
+
+ let parentClass = varJsonToClass(controller.modules.findParentVar(this.variable.pid, this.variable.id))
+
if (properties.label) {
let labelNode = this.node.parentNode.querySelector("label")
if (labelNode)
@@ -267,194 +362,419 @@ class Variable {
this.node.parentNode.innerHTML = `${properties.label} ` + this.node.parentNode.innerHTML
}
- if (Array.isArray(properties.value)) properties.value = properties.value[0] //temp hack to deal with table values
+ if (properties.value != null) { //!= 0 to include 0
+
+ //parent is table (multirow)
+ if (Array.isArray(properties.value)) {
+ // console.log("receiveValue2 array", this.pidid(), properties.value)
+ // console.log("receiveData2", this.pidid(), properties.value)
- if (properties.value != null && this.node.value != null) {
- this.node.value = properties.value;
+ //make sure node exists ???
+ parentClass.receiveValue(properties.value) //table: create extra rows if needed
+
+ //receive value for each cell
+ for (let rowNr = 0; rowNr < properties.value.length; rowNr++) {
+ this.receiveValue(properties.value[rowNr], rowNr)
+ }
+ }
+ else {
+ // console.log("receive value for", this.pidid(), properties.value)
+ this.receiveValue(properties.value)
+ }
}
+
if (properties.comment) {
- let commentNode = this.node.parentNode.querySelector("comment")
- if (!commentNode) {
- commentNode = cE("comment")
- this.node.parentNode.appendChild(commentNode) // disturbing canvas: this.node.parentNode.innerHTML += `${properties.comment} `
- }
- commentNode.innerText = properties.comment
- }
- if (properties.file) {
- let url;
- if (window.location.href.includes("127.0.0.1"))
- url = "/misc/" //get the files from the misc folder in the repo
- else
- url = `http://${window.location.hostname}/file/`
-
- fetchAndExecute(url, properties.file, this.variable, function(variable, text) {
- variable.file = JSON.parse(text); //assuming it is json, should we call this file?
- variable.file.new = true;
- console.log("receiveData file fetched", variable.id, variable.file);
- });
+ console.log("receive comment for", this.pidid(), properties.comment)
+ if (parentClass.variable.type != "table")
+ this.receiveComment(properties.comment)
+ else {
+ //place comment under th columns ...
+ }
}
- }
- }
- //used by Live Server
- generateData(custom = `"value":${Math.random() * 256}`) {
- if (custom != "") custom += ", "
- controller.receiveData(JSON.parse(`{"${this.variable.pid + "." + this.variable.id}":{${custom}"comment":"${Math.random().toString(36).slice(2)}"}}`));
+ if (properties.file)
+ this.receiveFile(properties.file)
+ } //if node
+ }
+
+ generateValue() {
+ return `${Math.round(Math.random()*255)}`
+ }
+
+ //generateData: sends data to controller.receiveData which dispatches it to the right variable (used by Live Server)
+ //valueFun: function to generate data for one cell
+ //extra: e.g. in case of SelectVariable: the options of a drop down
+ //if table variable then an array of these values will be send (table column, receiveData will put them in cells)
+ generateData(extra = "") {
+ let value = ""
+ let sep = ""
+ if (this.generateValue()) {
+ let parentVar = controller.modules.findParentVar(this.variable.pid, this.variable.id);
+ if (parentVar.type != "table")
+ value = `${sep} "value":${this.generateValue()}`
+ else
+ value = `${sep} "value":[${this.generateValue()}, ${this.generateValue()}, ${this.generateValue()}]`
+ sep = `,`
+ }
+
+ if (extra) {
+ extra = `${sep}` + extra
+ sep = ","
+ }
+
+ let comment = `${sep} "comment": "${this.variable.id + " " + Math.random().toString(36).slice(2)}"`
+
+ // console.log(`{"${this.pidid()}":{${value} ${extra} ${comment}}}`)
+
+ //check if variable part of table
+ controller.receiveData(JSON.parse(`{"${this.pidid()}":{${value} ${extra} ${comment}}}`));
+
}
} //class Variable
class TextVariable extends Variable {
- generateData() {
- super.generateData(`"value":"${Math.random().toString(36).slice(2)}"`)
+ generateValue() {
+ return `"${Math.random().toString(36).slice(2)}"`
+ }
+
+} //class TextVariable
+
+class NumberVariable extends Variable {
+
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ let node
+ if (this.variable.ro) {
+ node = `${this.variable.value} `
+ } else {
+ node = ` `
+ }
+ // xNode.min = variable.min?variable.min:0; //if not specified then unsigned value (min=0)
+ // if (variable.max) xNode.max = variable.max;
+ parentNode.innerHTML += node
+ }
+
+ generateValue() {
+ return `${Math.round(Math.random()*255)}`
}
} //class TextVariable
class CheckboxVariable extends Variable {
- createHTML() {
- return super.createHTML(` `);
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ parentNode.innerHTML += ` `
+
}
- receiveData(properties) {
- super.receiveData(properties)
- if (this.node && properties.value != null) { //
- this.node.checked = properties.value
- this.node.indeterminate = (properties.value == -1); //tbd: gen -1
+ receiveValue(value, rowNr = UINT8_MAX) {
+ let node = gId(this.pidid(rowNr))
+
+ if (node && value != null) {
+ console.log("rv2", this.pidid(rowNr), value)
+ // console.log("CheckboxVariable receiveValue", this.pidid(rowNr), value)
+ node.checked = value
+ node.indeterminate = (value == -1); //tbd: gen -1
+ if (this.variable.ro)
+ node.disabled = true
}
}
- generateData() {
- super.generateData(`"value":${Math.random() <.33?-1:Math.random() <.66?0:1}`)
+ generateValue() {
+ return `${Math.random() <.33?-1:Math.random() <.66?0:1}` // -1, 0 and 1
}
} //class CheckboxVariable
-class RangeVariable extends Variable {
+class RangeVariable extends Variable { //slider
- createHTML() {
- return super.createHTML(`${this.variable.value} `)
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ parentNode.innerHTML += `${this.variable.value} `
}
- receiveData(properties) {
- super.receiveData(properties)
- let rvNode = gId(this.variable.pid + "." + this.variable.id + "_rv")
- if (rvNode && properties.value != null)
- rvNode.innerText = properties.value
+ receiveValue(value, rowNr = UINT8_MAX) {
+ super.receiveValue(value, rowNr)
+
+ let rvNode = gId(this.pidid(rowNr) + "_rv")
+ // console.log(rvNode, value)
+ if (rvNode && value != null)
+ rvNode.innerText = value
}
- generateData() {
- super.generateData(`"value":${Math.round(Math.random()*255)}`) //no value update
+ generateValue() {
+ return `${Math.round(Math.random()*255)}`
}
} //class RangeVariable
class ButtonVariable extends Variable {
- createHTML() {
- return super.createHTML(` `)
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ parentNode.innerHTML += ` `
}
- generateData() {
- super.generateData("") //no value update
+ generateValue() {
+ return null //no values
}
} //class ButtonVariable
class SelectVariable extends Variable {
- createHTML() {
- return super.createHTML(` `)
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ if (this.variable.ro)
+ parentNode.innerHTML += `${this.variable.value} `
+ else
+ parentNode.innerHTML += ` `
+ }
+
+ receiveValue(value, rowNr = UINT8_MAX) {
+ // console.log("selectVar receiveValue", this.node, value, rowNr)
+
+ let node = gId(this.pidid(rowNr))
+ if (node) {
+ let options = node.getAttribute("options")
+ if (options) {
+ options = options.split(",")
+ if (this.variable.ro) {
+ if (options) {
+ let optionCounter = 0;
+ for (let option of options) {
+ // console.log(option, properties.value)
+ if (optionCounter == value)
+ node.innerText = option
+ optionCounter++;
+ }
+ }
+ } else {
+ if (!node.innerHTML) {
+ node.innerHTML = ""
+ let optionCounter = 0;
+ for (let option of options)
+ node.innerHTML+=`${option} `
+ }
+ if (value)
+ node.value = value //select the right option
+ }
+ }
+ }
}
receiveData(properties) {
- super.receiveData(properties)
- // if (this.node && properties.value != null)
- // console.log("select.receiveData value", this.node, properties)
+ // if (this.variable.id == "effect")
+ // console.log(this.pidid(), properties)
+
if (this.node && properties.options != null) {
- this.node.innerHTML = ""
- let optionCounter = 0;
- for (let option of properties.options)
- this.node.innerHTML+=`${option} `
- this.node.value = this.variable.value //select the right option
+ if (Array.isArray(properties.value)) {
+ for (let rowNr = 0; rowNr < properties.value.length; rowNr++) {
+ let node = gId(this.pidid(rowNr))
+ // console.log(node, this.pidid(rowNr))
+ if (node) node.setAttribute("options", properties.options) //not always created yet. todo find out why
+ }
+ }
+ else {
+ this.node.setAttribute("options", properties.options)
+ // console.log(properties.options, this.node.getAttribute("options"));
+ }
}
+ super.receiveData(properties)
}
- generateData() {
- //add sample options if not yet existing
- if (this.node && this.node.childNodes.length == 0)
- super.generateData(`"options":["ein","zwei","drei"]`)
+ generateValue() {
+ return `${Math.random() <.33?0:Math.random() <.66?1:2}` //0, 1, or 2
+ }
- super.generateData(`"value":${Math.random() <.33?0:Math.random() <.66?1:2}`)
+ generateData() {
+ //add sample options
+ super.generateData(`"options":["eins","zwei","drei"]`)
}
} //class SelectVariable
class ProgressVariable extends Variable {
- createHTML() {
- return super.createHTML(` `)
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ parentNode.innerHTML += ` `
}
} //class ProgressVariable
class CanvasVariable extends Variable {
- createHTML() {
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ parentNode.innerHTML += ` `
+ }
+
+ createHTML(parentNode, rowNr = UINT8_MAX) {
// console.log(this.variable)
if (this.variable.file) {
this.variable.file.new = true;
// console.log("canvas createHTML", this.variable.file, this.variable.file.new);
}
- return super.createHTML(` `);
+ super.createHTML(parentNode, rowNr);
}
- receiveData(properties) {
- super.receiveData(properties)
+ generateValue() {
+ return null;//`"n/a"`
}
- generateData() {
- //LEDs specific
- if (this.node && this.variable.file == null)
- super.generateData(`"file":"F_panel2x2-16x16.json"`)
- //end LEDs specific
+} //class CanvasVariable
+
+class TableVariable extends Variable {
+
+ createNode(parentNode, rowNr = UINT8_MAX) {
+
+ let tableNode = cCE(parentNode, "table");
+ tableNode.id = this.pidid()
+ tableNode.className = this.variable.type
+ cCE(tableNode, "tbody")
+ // code += ``
+
+ if (this.variable.n) {
+ let trNode = cCE(cCE(tableNode, "thead"), "tr")
+
+ for (let childVar of this.variable.n) {
+
+ let thNode = cCE(trNode, "th")
+ thNode.id = childVar.pid + "." + childVar.id
+ thNode.className = childVar.type
+ thNode.innerHTML = initCap(childVar.id)
+ // code += `` // width="${childVar.max?childVar.max*3:100}"
+ // code += initCap(childVar.id)
+ // code += ` `
+
+ let childClass = varJsonToClass(childVar)
+ if (childVar.value) {
+ console.log("childclass init value", childClass.pidid(rowNr), childVar.value)
+ if (rowNr != UINT8_MAX)
+ this.receiveValue(this.variable.value[rowNr], rowNr)
+ else
+ childClass.receiveData({"value": childVar.value}) // will also create the table cells (which cause recursiveness...)
+ }
+
+ }
+ }
- super.generateData(`"value":"n/a"`) //no value needed for canvas, but only comment update ...
}
-} //class CanvasVariable
+ //receive value array so enough rows can be created before the real values come in
+ receiveValue(values, rowNr = UINT8_MAX) { //no rowNr used here
+ //create missing rows if there are
+ if (Array.isArray(values)) {
+ let tbodyNode = this.node.querySelector("tbody");
+ let trNodes = tbodyNode.querySelectorAll("tr");
+
+ for (let rowNr = trNodes.length; rowNr < values.length; rowNr++) {
+ // console.log("receiveValue2 table", this.pidid(), values, rowNr, values.length)
+ let trNode = cCE(tbodyNode, "tr")
+ for (let childVar of this.variable.n) {
+ let tdNode = cCE(trNode, "td")
+ let childVariable = varJsonToClass(childVar)
+ // console.log("create cell", childVariable.pidid(rowNr))
+ childVariable.createHTML(tdNode, rowNr, true) // this will call this method recursively... and also create missing rows
+ //create a cell and it's children, will again this function via table.rv2
+ //new cell will receive values
+ //also new setValue will be called
-class TableVariable extends Variable {
+ }
+ }
- createHTML() {
- return super.createHTML(``);
+ //todo: delete rows not needed
+
+ } //isArray
}
generateData() {
- super.generateData(`"value":"n/a"`) //no value needed for canvas...
+ //only table columns have data, so do nothing
}
} //class TableVariable
+ // {/*
+ //
Files
+ //
+ //
List of files
+ //
*/}
+
class Coord3DVariable extends Variable {
- createHTML() {
- return super.createHTML(` `);
+ createNode(parentNode, rowNr = UINT8_MAX) {
+ parentNode.innerHTML += ` `
}
- receiveData(properties) {
- super.receiveData(properties)
- if (this.node && properties.value != null) {
- this.node.childNodes[0].value = properties.value.x
- this.node.childNodes[1].value = properties.value.y
- this.node.childNodes[2].value = properties.value.z
+ receiveValue(value, rowNr = UINT8_MAX) {
+ // console.log(childVar.pidid())
+ let node = gId(this.pidid(rowNr))
+ // console.log("Variable receiveValue", this, node, value, rowNr)
+
+ if (node && value != null && node.childNodes) {
+ // console.log("Coord3D receiveData", properties, node.childNodes);
+ if (value.x && node.childNodes[0]) node.childNodes[0].value = value.x
+ if (value.y && node.childNodes[1]) node.childNodes[1].value = value.y
+ if (value.z && node.childNodes[2]) node.childNodes[2].value = value.z
}
}
-
- generateData() {
- super.generateData(`"value":{"x":${Math.random()*360}, "y":${Math.random()*360}, "z":${Math.random()*360}}`)
+
+ generateValue() {
+ return `{"x":${Math.round(Math.random()*360)}, "y":${Math.round(Math.random()*360)}, "z":${Math.round(Math.random()*360)}}`
}
} //class Coord3DVariable
diff --git a/data/newui/theme.css b/data/newui/theme.css
new file mode 100644
index 0000000..1d67b7e
--- /dev/null
+++ b/data/newui/theme.css
@@ -0,0 +1,98 @@
+/*
+ @title StarBase
+ @file theme.css
+ @date 20241105
+ @repo https://github.com/ewowi/StarBase, submit changes to this file as PRs to ewowi/StarBase
+ @Authors https://github.com/ewowi/StarBase/commits/main
+ @Copyright © 2024 Github StarBase Commit Authors
+ @license GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
+ @license For non GPL-v3 usage, commercial licenses must be purchased. Contact moonmodules@icloud.com
+*/
+
+:root,
+ :root.starbase {
+ --bg-color: #121212;
+ --text-color: #cfd096;
+ --th-color: #c27e66;
+ --h-color:#c27e66;
+ --border-color: #cdad6a;
+ --select-color: #1a8aff; /*used for view buttons*/
+ --label-color: #83c5eb;
+ --comment-color: #598a43;
+ --font-size: 14px;
+ }
+ :root.starlight {
+ --bg-color: linear-gradient(to bottom, #ffbe33 0%, #b60f62 100%);
+ --text-color: #030303;
+ --th-color: #b60f6281;
+ --h-color: #b60f62;
+ --border-color: #666;
+ --select-color: #FFFFFF; /*used for view buttons*/
+ --label-color: #86eb83;
+ --font-size: 10px;
+ }
+ :root.wled {
+ --bg-color: #121212;
+ --text-color: #fff;
+ --th-color: rgb(255, 160, 0);
+ --h-color: rgb(255, 160, 0);
+ --border-color: rgb(255, 160, 0);
+ --select-color: rgb(255, 160, 0);
+ --font-size: 10px;
+ }
+ :root.grayeen {
+ --bg-color: linear-gradient(to bottom, #979294 0%, #474542 100%);
+ --text-color: #fbf4f4;
+ --th-color: #21482b;
+ --h-color: #21482b;
+ --border-color: #21482b;
+ --select-color: #21482b; /*used for view buttons*/
+ --font-size: 10px;
+ --font-size-s: 8px; /*var(--font-size-s) not working for some reason */
+ }
+ :root.dev {
+ --bg-color: #121212;
+ --text-color: #cfd096;
+ --th-color: #c27e66;
+ --h-color:#c27e66;
+ --border-color: #cdad6a;
+ --select-color: #1a8aff; /*used for view buttons*/
+ --label-color: #83c5eb;
+ --comment-color: #598a43;
+ --font-size: 10px;
+ }
+ :root.light {
+ --bg-color: #fff;
+ --text-color: #123;
+ --h-color: #000000;
+ --th-color: #6d686a81;
+ --select-color: #6d686a81;
+ }
+ :root.dark {
+ --bg-color: #121212;
+ --text-color: #696d7d;
+ }
+ :root.blue {
+ --bg-color: #05396B;
+ --text-color: #E7F1FE;
+ --th-color: #b60f6281;
+ --h-color: #b60f62;
+ --select-color: #b60f6281;
+ }
+ :root.pink {
+ --bg-color: #ffcad4;
+ --text-color: #e75480;
+ --select-color: #e75480; /*used for view buttons*/
+ }
+ :root.space {
+ --bg-color: #000;
+ --text-color: #f2bd16;
+ --bg-url: url(//space);
+ --font-family: 'Press Start 2P', cursive;
+ }
+ :root.nyan {
+ --bg-color: #013367;
+ --text-color: #fff;
+ --bg-url: url(//nyan);
+ --font-family: 'Comic Neue', cursive;
+ }
diff --git a/misc/F_Panel2x2-16x16.json b/misc/F_Panel2x2-16x16.json
new file mode 100644
index 0000000..7db98a5
--- /dev/null
+++ b/misc/F_Panel2x2-16x16.json
@@ -0,0 +1,5151 @@
+{
+ "name": "F_Panel2x2-16x16",
+ "nrOfLeds": 1024,
+ "width": 32,
+ "height": 32,
+ "depth": 1,
+ "ledSize": 5,
+ "shape": 0,
+ "outputs": [
+ {
+ "pin": 2,
+ "leds": [
+ [
+ 0,
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 10,
+ 0
+ ],
+ [
+ 0,
+ 20,
+ 0
+ ],
+ [
+ 0,
+ 30,
+ 0
+ ],
+ [
+ 0,
+ 40,
+ 0
+ ],
+ [
+ 0,
+ 50,
+ 0
+ ],
+ [
+ 0,
+ 60,
+ 0
+ ],
+ [
+ 0,
+ 70,
+ 0
+ ],
+ [
+ 0,
+ 80,
+ 0
+ ],
+ [
+ 0,
+ 90,
+ 0
+ ],
+ [
+ 0,
+ 100,
+ 0
+ ],
+ [
+ 0,
+ 110,
+ 0
+ ],
+ [
+ 0,
+ 120,
+ 0
+ ],
+ [
+ 0,
+ 130,
+ 0
+ ],
+ [
+ 0,
+ 140,
+ 0
+ ],
+ [
+ 0,
+ 150,
+ 0
+ ],
+ [
+ 10,
+ 0,
+ 0
+ ],
+ [
+ 10,
+ 10,
+ 0
+ ],
+ [
+ 10,
+ 20,
+ 0
+ ],
+ [
+ 10,
+ 30,
+ 0
+ ],
+ [
+ 10,
+ 40,
+ 0
+ ],
+ [
+ 10,
+ 50,
+ 0
+ ],
+ [
+ 10,
+ 60,
+ 0
+ ],
+ [
+ 10,
+ 70,
+ 0
+ ],
+ [
+ 10,
+ 80,
+ 0
+ ],
+ [
+ 10,
+ 90,
+ 0
+ ],
+ [
+ 10,
+ 100,
+ 0
+ ],
+ [
+ 10,
+ 110,
+ 0
+ ],
+ [
+ 10,
+ 120,
+ 0
+ ],
+ [
+ 10,
+ 130,
+ 0
+ ],
+ [
+ 10,
+ 140,
+ 0
+ ],
+ [
+ 10,
+ 150,
+ 0
+ ],
+ [
+ 20,
+ 0,
+ 0
+ ],
+ [
+ 20,
+ 10,
+ 0
+ ],
+ [
+ 20,
+ 20,
+ 0
+ ],
+ [
+ 20,
+ 30,
+ 0
+ ],
+ [
+ 20,
+ 40,
+ 0
+ ],
+ [
+ 20,
+ 50,
+ 0
+ ],
+ [
+ 20,
+ 60,
+ 0
+ ],
+ [
+ 20,
+ 70,
+ 0
+ ],
+ [
+ 20,
+ 80,
+ 0
+ ],
+ [
+ 20,
+ 90,
+ 0
+ ],
+ [
+ 20,
+ 100,
+ 0
+ ],
+ [
+ 20,
+ 110,
+ 0
+ ],
+ [
+ 20,
+ 120,
+ 0
+ ],
+ [
+ 20,
+ 130,
+ 0
+ ],
+ [
+ 20,
+ 140,
+ 0
+ ],
+ [
+ 20,
+ 150,
+ 0
+ ],
+ [
+ 30,
+ 0,
+ 0
+ ],
+ [
+ 30,
+ 10,
+ 0
+ ],
+ [
+ 30,
+ 20,
+ 0
+ ],
+ [
+ 30,
+ 30,
+ 0
+ ],
+ [
+ 30,
+ 40,
+ 0
+ ],
+ [
+ 30,
+ 50,
+ 0
+ ],
+ [
+ 30,
+ 60,
+ 0
+ ],
+ [
+ 30,
+ 70,
+ 0
+ ],
+ [
+ 30,
+ 80,
+ 0
+ ],
+ [
+ 30,
+ 90,
+ 0
+ ],
+ [
+ 30,
+ 100,
+ 0
+ ],
+ [
+ 30,
+ 110,
+ 0
+ ],
+ [
+ 30,
+ 120,
+ 0
+ ],
+ [
+ 30,
+ 130,
+ 0
+ ],
+ [
+ 30,
+ 140,
+ 0
+ ],
+ [
+ 30,
+ 150,
+ 0
+ ],
+ [
+ 40,
+ 0,
+ 0
+ ],
+ [
+ 40,
+ 10,
+ 0
+ ],
+ [
+ 40,
+ 20,
+ 0
+ ],
+ [
+ 40,
+ 30,
+ 0
+ ],
+ [
+ 40,
+ 40,
+ 0
+ ],
+ [
+ 40,
+ 50,
+ 0
+ ],
+ [
+ 40,
+ 60,
+ 0
+ ],
+ [
+ 40,
+ 70,
+ 0
+ ],
+ [
+ 40,
+ 80,
+ 0
+ ],
+ [
+ 40,
+ 90,
+ 0
+ ],
+ [
+ 40,
+ 100,
+ 0
+ ],
+ [
+ 40,
+ 110,
+ 0
+ ],
+ [
+ 40,
+ 120,
+ 0
+ ],
+ [
+ 40,
+ 130,
+ 0
+ ],
+ [
+ 40,
+ 140,
+ 0
+ ],
+ [
+ 40,
+ 150,
+ 0
+ ],
+ [
+ 50,
+ 0,
+ 0
+ ],
+ [
+ 50,
+ 10,
+ 0
+ ],
+ [
+ 50,
+ 20,
+ 0
+ ],
+ [
+ 50,
+ 30,
+ 0
+ ],
+ [
+ 50,
+ 40,
+ 0
+ ],
+ [
+ 50,
+ 50,
+ 0
+ ],
+ [
+ 50,
+ 60,
+ 0
+ ],
+ [
+ 50,
+ 70,
+ 0
+ ],
+ [
+ 50,
+ 80,
+ 0
+ ],
+ [
+ 50,
+ 90,
+ 0
+ ],
+ [
+ 50,
+ 100,
+ 0
+ ],
+ [
+ 50,
+ 110,
+ 0
+ ],
+ [
+ 50,
+ 120,
+ 0
+ ],
+ [
+ 50,
+ 130,
+ 0
+ ],
+ [
+ 50,
+ 140,
+ 0
+ ],
+ [
+ 50,
+ 150,
+ 0
+ ],
+ [
+ 60,
+ 0,
+ 0
+ ],
+ [
+ 60,
+ 10,
+ 0
+ ],
+ [
+ 60,
+ 20,
+ 0
+ ],
+ [
+ 60,
+ 30,
+ 0
+ ],
+ [
+ 60,
+ 40,
+ 0
+ ],
+ [
+ 60,
+ 50,
+ 0
+ ],
+ [
+ 60,
+ 60,
+ 0
+ ],
+ [
+ 60,
+ 70,
+ 0
+ ],
+ [
+ 60,
+ 80,
+ 0
+ ],
+ [
+ 60,
+ 90,
+ 0
+ ],
+ [
+ 60,
+ 100,
+ 0
+ ],
+ [
+ 60,
+ 110,
+ 0
+ ],
+ [
+ 60,
+ 120,
+ 0
+ ],
+ [
+ 60,
+ 130,
+ 0
+ ],
+ [
+ 60,
+ 140,
+ 0
+ ],
+ [
+ 60,
+ 150,
+ 0
+ ],
+ [
+ 70,
+ 0,
+ 0
+ ],
+ [
+ 70,
+ 10,
+ 0
+ ],
+ [
+ 70,
+ 20,
+ 0
+ ],
+ [
+ 70,
+ 30,
+ 0
+ ],
+ [
+ 70,
+ 40,
+ 0
+ ],
+ [
+ 70,
+ 50,
+ 0
+ ],
+ [
+ 70,
+ 60,
+ 0
+ ],
+ [
+ 70,
+ 70,
+ 0
+ ],
+ [
+ 70,
+ 80,
+ 0
+ ],
+ [
+ 70,
+ 90,
+ 0
+ ],
+ [
+ 70,
+ 100,
+ 0
+ ],
+ [
+ 70,
+ 110,
+ 0
+ ],
+ [
+ 70,
+ 120,
+ 0
+ ],
+ [
+ 70,
+ 130,
+ 0
+ ],
+ [
+ 70,
+ 140,
+ 0
+ ],
+ [
+ 70,
+ 150,
+ 0
+ ],
+ [
+ 80,
+ 0,
+ 0
+ ],
+ [
+ 80,
+ 10,
+ 0
+ ],
+ [
+ 80,
+ 20,
+ 0
+ ],
+ [
+ 80,
+ 30,
+ 0
+ ],
+ [
+ 80,
+ 40,
+ 0
+ ],
+ [
+ 80,
+ 50,
+ 0
+ ],
+ [
+ 80,
+ 60,
+ 0
+ ],
+ [
+ 80,
+ 70,
+ 0
+ ],
+ [
+ 80,
+ 80,
+ 0
+ ],
+ [
+ 80,
+ 90,
+ 0
+ ],
+ [
+ 80,
+ 100,
+ 0
+ ],
+ [
+ 80,
+ 110,
+ 0
+ ],
+ [
+ 80,
+ 120,
+ 0
+ ],
+ [
+ 80,
+ 130,
+ 0
+ ],
+ [
+ 80,
+ 140,
+ 0
+ ],
+ [
+ 80,
+ 150,
+ 0
+ ],
+ [
+ 90,
+ 0,
+ 0
+ ],
+ [
+ 90,
+ 10,
+ 0
+ ],
+ [
+ 90,
+ 20,
+ 0
+ ],
+ [
+ 90,
+ 30,
+ 0
+ ],
+ [
+ 90,
+ 40,
+ 0
+ ],
+ [
+ 90,
+ 50,
+ 0
+ ],
+ [
+ 90,
+ 60,
+ 0
+ ],
+ [
+ 90,
+ 70,
+ 0
+ ],
+ [
+ 90,
+ 80,
+ 0
+ ],
+ [
+ 90,
+ 90,
+ 0
+ ],
+ [
+ 90,
+ 100,
+ 0
+ ],
+ [
+ 90,
+ 110,
+ 0
+ ],
+ [
+ 90,
+ 120,
+ 0
+ ],
+ [
+ 90,
+ 130,
+ 0
+ ],
+ [
+ 90,
+ 140,
+ 0
+ ],
+ [
+ 90,
+ 150,
+ 0
+ ],
+ [
+ 100,
+ 0,
+ 0
+ ],
+ [
+ 100,
+ 10,
+ 0
+ ],
+ [
+ 100,
+ 20,
+ 0
+ ],
+ [
+ 100,
+ 30,
+ 0
+ ],
+ [
+ 100,
+ 40,
+ 0
+ ],
+ [
+ 100,
+ 50,
+ 0
+ ],
+ [
+ 100,
+ 60,
+ 0
+ ],
+ [
+ 100,
+ 70,
+ 0
+ ],
+ [
+ 100,
+ 80,
+ 0
+ ],
+ [
+ 100,
+ 90,
+ 0
+ ],
+ [
+ 100,
+ 100,
+ 0
+ ],
+ [
+ 100,
+ 110,
+ 0
+ ],
+ [
+ 100,
+ 120,
+ 0
+ ],
+ [
+ 100,
+ 130,
+ 0
+ ],
+ [
+ 100,
+ 140,
+ 0
+ ],
+ [
+ 100,
+ 150,
+ 0
+ ],
+ [
+ 110,
+ 0,
+ 0
+ ],
+ [
+ 110,
+ 10,
+ 0
+ ],
+ [
+ 110,
+ 20,
+ 0
+ ],
+ [
+ 110,
+ 30,
+ 0
+ ],
+ [
+ 110,
+ 40,
+ 0
+ ],
+ [
+ 110,
+ 50,
+ 0
+ ],
+ [
+ 110,
+ 60,
+ 0
+ ],
+ [
+ 110,
+ 70,
+ 0
+ ],
+ [
+ 110,
+ 80,
+ 0
+ ],
+ [
+ 110,
+ 90,
+ 0
+ ],
+ [
+ 110,
+ 100,
+ 0
+ ],
+ [
+ 110,
+ 110,
+ 0
+ ],
+ [
+ 110,
+ 120,
+ 0
+ ],
+ [
+ 110,
+ 130,
+ 0
+ ],
+ [
+ 110,
+ 140,
+ 0
+ ],
+ [
+ 110,
+ 150,
+ 0
+ ],
+ [
+ 120,
+ 0,
+ 0
+ ],
+ [
+ 120,
+ 10,
+ 0
+ ],
+ [
+ 120,
+ 20,
+ 0
+ ],
+ [
+ 120,
+ 30,
+ 0
+ ],
+ [
+ 120,
+ 40,
+ 0
+ ],
+ [
+ 120,
+ 50,
+ 0
+ ],
+ [
+ 120,
+ 60,
+ 0
+ ],
+ [
+ 120,
+ 70,
+ 0
+ ],
+ [
+ 120,
+ 80,
+ 0
+ ],
+ [
+ 120,
+ 90,
+ 0
+ ],
+ [
+ 120,
+ 100,
+ 0
+ ],
+ [
+ 120,
+ 110,
+ 0
+ ],
+ [
+ 120,
+ 120,
+ 0
+ ],
+ [
+ 120,
+ 130,
+ 0
+ ],
+ [
+ 120,
+ 140,
+ 0
+ ],
+ [
+ 120,
+ 150,
+ 0
+ ],
+ [
+ 130,
+ 0,
+ 0
+ ],
+ [
+ 130,
+ 10,
+ 0
+ ],
+ [
+ 130,
+ 20,
+ 0
+ ],
+ [
+ 130,
+ 30,
+ 0
+ ],
+ [
+ 130,
+ 40,
+ 0
+ ],
+ [
+ 130,
+ 50,
+ 0
+ ],
+ [
+ 130,
+ 60,
+ 0
+ ],
+ [
+ 130,
+ 70,
+ 0
+ ],
+ [
+ 130,
+ 80,
+ 0
+ ],
+ [
+ 130,
+ 90,
+ 0
+ ],
+ [
+ 130,
+ 100,
+ 0
+ ],
+ [
+ 130,
+ 110,
+ 0
+ ],
+ [
+ 130,
+ 120,
+ 0
+ ],
+ [
+ 130,
+ 130,
+ 0
+ ],
+ [
+ 130,
+ 140,
+ 0
+ ],
+ [
+ 130,
+ 150,
+ 0
+ ],
+ [
+ 140,
+ 0,
+ 0
+ ],
+ [
+ 140,
+ 10,
+ 0
+ ],
+ [
+ 140,
+ 20,
+ 0
+ ],
+ [
+ 140,
+ 30,
+ 0
+ ],
+ [
+ 140,
+ 40,
+ 0
+ ],
+ [
+ 140,
+ 50,
+ 0
+ ],
+ [
+ 140,
+ 60,
+ 0
+ ],
+ [
+ 140,
+ 70,
+ 0
+ ],
+ [
+ 140,
+ 80,
+ 0
+ ],
+ [
+ 140,
+ 90,
+ 0
+ ],
+ [
+ 140,
+ 100,
+ 0
+ ],
+ [
+ 140,
+ 110,
+ 0
+ ],
+ [
+ 140,
+ 120,
+ 0
+ ],
+ [
+ 140,
+ 130,
+ 0
+ ],
+ [
+ 140,
+ 140,
+ 0
+ ],
+ [
+ 140,
+ 150,
+ 0
+ ],
+ [
+ 150,
+ 0,
+ 0
+ ],
+ [
+ 150,
+ 10,
+ 0
+ ],
+ [
+ 150,
+ 20,
+ 0
+ ],
+ [
+ 150,
+ 30,
+ 0
+ ],
+ [
+ 150,
+ 40,
+ 0
+ ],
+ [
+ 150,
+ 50,
+ 0
+ ],
+ [
+ 150,
+ 60,
+ 0
+ ],
+ [
+ 150,
+ 70,
+ 0
+ ],
+ [
+ 150,
+ 80,
+ 0
+ ],
+ [
+ 150,
+ 90,
+ 0
+ ],
+ [
+ 150,
+ 100,
+ 0
+ ],
+ [
+ 150,
+ 110,
+ 0
+ ],
+ [
+ 150,
+ 120,
+ 0
+ ],
+ [
+ 150,
+ 130,
+ 0
+ ],
+ [
+ 150,
+ 140,
+ 0
+ ],
+ [
+ 150,
+ 150,
+ 0
+ ]
+ ]
+ },
+ {
+ "pin": 2,
+ "leds": [
+ [
+ 160,
+ 0,
+ 0
+ ],
+ [
+ 160,
+ 10,
+ 0
+ ],
+ [
+ 160,
+ 20,
+ 0
+ ],
+ [
+ 160,
+ 30,
+ 0
+ ],
+ [
+ 160,
+ 40,
+ 0
+ ],
+ [
+ 160,
+ 50,
+ 0
+ ],
+ [
+ 160,
+ 60,
+ 0
+ ],
+ [
+ 160,
+ 70,
+ 0
+ ],
+ [
+ 160,
+ 80,
+ 0
+ ],
+ [
+ 160,
+ 90,
+ 0
+ ],
+ [
+ 160,
+ 100,
+ 0
+ ],
+ [
+ 160,
+ 110,
+ 0
+ ],
+ [
+ 160,
+ 120,
+ 0
+ ],
+ [
+ 160,
+ 130,
+ 0
+ ],
+ [
+ 160,
+ 140,
+ 0
+ ],
+ [
+ 160,
+ 150,
+ 0
+ ],
+ [
+ 170,
+ 0,
+ 0
+ ],
+ [
+ 170,
+ 10,
+ 0
+ ],
+ [
+ 170,
+ 20,
+ 0
+ ],
+ [
+ 170,
+ 30,
+ 0
+ ],
+ [
+ 170,
+ 40,
+ 0
+ ],
+ [
+ 170,
+ 50,
+ 0
+ ],
+ [
+ 170,
+ 60,
+ 0
+ ],
+ [
+ 170,
+ 70,
+ 0
+ ],
+ [
+ 170,
+ 80,
+ 0
+ ],
+ [
+ 170,
+ 90,
+ 0
+ ],
+ [
+ 170,
+ 100,
+ 0
+ ],
+ [
+ 170,
+ 110,
+ 0
+ ],
+ [
+ 170,
+ 120,
+ 0
+ ],
+ [
+ 170,
+ 130,
+ 0
+ ],
+ [
+ 170,
+ 140,
+ 0
+ ],
+ [
+ 170,
+ 150,
+ 0
+ ],
+ [
+ 180,
+ 0,
+ 0
+ ],
+ [
+ 180,
+ 10,
+ 0
+ ],
+ [
+ 180,
+ 20,
+ 0
+ ],
+ [
+ 180,
+ 30,
+ 0
+ ],
+ [
+ 180,
+ 40,
+ 0
+ ],
+ [
+ 180,
+ 50,
+ 0
+ ],
+ [
+ 180,
+ 60,
+ 0
+ ],
+ [
+ 180,
+ 70,
+ 0
+ ],
+ [
+ 180,
+ 80,
+ 0
+ ],
+ [
+ 180,
+ 90,
+ 0
+ ],
+ [
+ 180,
+ 100,
+ 0
+ ],
+ [
+ 180,
+ 110,
+ 0
+ ],
+ [
+ 180,
+ 120,
+ 0
+ ],
+ [
+ 180,
+ 130,
+ 0
+ ],
+ [
+ 180,
+ 140,
+ 0
+ ],
+ [
+ 180,
+ 150,
+ 0
+ ],
+ [
+ 190,
+ 0,
+ 0
+ ],
+ [
+ 190,
+ 10,
+ 0
+ ],
+ [
+ 190,
+ 20,
+ 0
+ ],
+ [
+ 190,
+ 30,
+ 0
+ ],
+ [
+ 190,
+ 40,
+ 0
+ ],
+ [
+ 190,
+ 50,
+ 0
+ ],
+ [
+ 190,
+ 60,
+ 0
+ ],
+ [
+ 190,
+ 70,
+ 0
+ ],
+ [
+ 190,
+ 80,
+ 0
+ ],
+ [
+ 190,
+ 90,
+ 0
+ ],
+ [
+ 190,
+ 100,
+ 0
+ ],
+ [
+ 190,
+ 110,
+ 0
+ ],
+ [
+ 190,
+ 120,
+ 0
+ ],
+ [
+ 190,
+ 130,
+ 0
+ ],
+ [
+ 190,
+ 140,
+ 0
+ ],
+ [
+ 190,
+ 150,
+ 0
+ ],
+ [
+ 200,
+ 0,
+ 0
+ ],
+ [
+ 200,
+ 10,
+ 0
+ ],
+ [
+ 200,
+ 20,
+ 0
+ ],
+ [
+ 200,
+ 30,
+ 0
+ ],
+ [
+ 200,
+ 40,
+ 0
+ ],
+ [
+ 200,
+ 50,
+ 0
+ ],
+ [
+ 200,
+ 60,
+ 0
+ ],
+ [
+ 200,
+ 70,
+ 0
+ ],
+ [
+ 200,
+ 80,
+ 0
+ ],
+ [
+ 200,
+ 90,
+ 0
+ ],
+ [
+ 200,
+ 100,
+ 0
+ ],
+ [
+ 200,
+ 110,
+ 0
+ ],
+ [
+ 200,
+ 120,
+ 0
+ ],
+ [
+ 200,
+ 130,
+ 0
+ ],
+ [
+ 200,
+ 140,
+ 0
+ ],
+ [
+ 200,
+ 150,
+ 0
+ ],
+ [
+ 210,
+ 0,
+ 0
+ ],
+ [
+ 210,
+ 10,
+ 0
+ ],
+ [
+ 210,
+ 20,
+ 0
+ ],
+ [
+ 210,
+ 30,
+ 0
+ ],
+ [
+ 210,
+ 40,
+ 0
+ ],
+ [
+ 210,
+ 50,
+ 0
+ ],
+ [
+ 210,
+ 60,
+ 0
+ ],
+ [
+ 210,
+ 70,
+ 0
+ ],
+ [
+ 210,
+ 80,
+ 0
+ ],
+ [
+ 210,
+ 90,
+ 0
+ ],
+ [
+ 210,
+ 100,
+ 0
+ ],
+ [
+ 210,
+ 110,
+ 0
+ ],
+ [
+ 210,
+ 120,
+ 0
+ ],
+ [
+ 210,
+ 130,
+ 0
+ ],
+ [
+ 210,
+ 140,
+ 0
+ ],
+ [
+ 210,
+ 150,
+ 0
+ ],
+ [
+ 220,
+ 0,
+ 0
+ ],
+ [
+ 220,
+ 10,
+ 0
+ ],
+ [
+ 220,
+ 20,
+ 0
+ ],
+ [
+ 220,
+ 30,
+ 0
+ ],
+ [
+ 220,
+ 40,
+ 0
+ ],
+ [
+ 220,
+ 50,
+ 0
+ ],
+ [
+ 220,
+ 60,
+ 0
+ ],
+ [
+ 220,
+ 70,
+ 0
+ ],
+ [
+ 220,
+ 80,
+ 0
+ ],
+ [
+ 220,
+ 90,
+ 0
+ ],
+ [
+ 220,
+ 100,
+ 0
+ ],
+ [
+ 220,
+ 110,
+ 0
+ ],
+ [
+ 220,
+ 120,
+ 0
+ ],
+ [
+ 220,
+ 130,
+ 0
+ ],
+ [
+ 220,
+ 140,
+ 0
+ ],
+ [
+ 220,
+ 150,
+ 0
+ ],
+ [
+ 230,
+ 0,
+ 0
+ ],
+ [
+ 230,
+ 10,
+ 0
+ ],
+ [
+ 230,
+ 20,
+ 0
+ ],
+ [
+ 230,
+ 30,
+ 0
+ ],
+ [
+ 230,
+ 40,
+ 0
+ ],
+ [
+ 230,
+ 50,
+ 0
+ ],
+ [
+ 230,
+ 60,
+ 0
+ ],
+ [
+ 230,
+ 70,
+ 0
+ ],
+ [
+ 230,
+ 80,
+ 0
+ ],
+ [
+ 230,
+ 90,
+ 0
+ ],
+ [
+ 230,
+ 100,
+ 0
+ ],
+ [
+ 230,
+ 110,
+ 0
+ ],
+ [
+ 230,
+ 120,
+ 0
+ ],
+ [
+ 230,
+ 130,
+ 0
+ ],
+ [
+ 230,
+ 140,
+ 0
+ ],
+ [
+ 230,
+ 150,
+ 0
+ ],
+ [
+ 240,
+ 0,
+ 0
+ ],
+ [
+ 240,
+ 10,
+ 0
+ ],
+ [
+ 240,
+ 20,
+ 0
+ ],
+ [
+ 240,
+ 30,
+ 0
+ ],
+ [
+ 240,
+ 40,
+ 0
+ ],
+ [
+ 240,
+ 50,
+ 0
+ ],
+ [
+ 240,
+ 60,
+ 0
+ ],
+ [
+ 240,
+ 70,
+ 0
+ ],
+ [
+ 240,
+ 80,
+ 0
+ ],
+ [
+ 240,
+ 90,
+ 0
+ ],
+ [
+ 240,
+ 100,
+ 0
+ ],
+ [
+ 240,
+ 110,
+ 0
+ ],
+ [
+ 240,
+ 120,
+ 0
+ ],
+ [
+ 240,
+ 130,
+ 0
+ ],
+ [
+ 240,
+ 140,
+ 0
+ ],
+ [
+ 240,
+ 150,
+ 0
+ ],
+ [
+ 250,
+ 0,
+ 0
+ ],
+ [
+ 250,
+ 10,
+ 0
+ ],
+ [
+ 250,
+ 20,
+ 0
+ ],
+ [
+ 250,
+ 30,
+ 0
+ ],
+ [
+ 250,
+ 40,
+ 0
+ ],
+ [
+ 250,
+ 50,
+ 0
+ ],
+ [
+ 250,
+ 60,
+ 0
+ ],
+ [
+ 250,
+ 70,
+ 0
+ ],
+ [
+ 250,
+ 80,
+ 0
+ ],
+ [
+ 250,
+ 90,
+ 0
+ ],
+ [
+ 250,
+ 100,
+ 0
+ ],
+ [
+ 250,
+ 110,
+ 0
+ ],
+ [
+ 250,
+ 120,
+ 0
+ ],
+ [
+ 250,
+ 130,
+ 0
+ ],
+ [
+ 250,
+ 140,
+ 0
+ ],
+ [
+ 250,
+ 150,
+ 0
+ ],
+ [
+ 260,
+ 0,
+ 0
+ ],
+ [
+ 260,
+ 10,
+ 0
+ ],
+ [
+ 260,
+ 20,
+ 0
+ ],
+ [
+ 260,
+ 30,
+ 0
+ ],
+ [
+ 260,
+ 40,
+ 0
+ ],
+ [
+ 260,
+ 50,
+ 0
+ ],
+ [
+ 260,
+ 60,
+ 0
+ ],
+ [
+ 260,
+ 70,
+ 0
+ ],
+ [
+ 260,
+ 80,
+ 0
+ ],
+ [
+ 260,
+ 90,
+ 0
+ ],
+ [
+ 260,
+ 100,
+ 0
+ ],
+ [
+ 260,
+ 110,
+ 0
+ ],
+ [
+ 260,
+ 120,
+ 0
+ ],
+ [
+ 260,
+ 130,
+ 0
+ ],
+ [
+ 260,
+ 140,
+ 0
+ ],
+ [
+ 260,
+ 150,
+ 0
+ ],
+ [
+ 270,
+ 0,
+ 0
+ ],
+ [
+ 270,
+ 10,
+ 0
+ ],
+ [
+ 270,
+ 20,
+ 0
+ ],
+ [
+ 270,
+ 30,
+ 0
+ ],
+ [
+ 270,
+ 40,
+ 0
+ ],
+ [
+ 270,
+ 50,
+ 0
+ ],
+ [
+ 270,
+ 60,
+ 0
+ ],
+ [
+ 270,
+ 70,
+ 0
+ ],
+ [
+ 270,
+ 80,
+ 0
+ ],
+ [
+ 270,
+ 90,
+ 0
+ ],
+ [
+ 270,
+ 100,
+ 0
+ ],
+ [
+ 270,
+ 110,
+ 0
+ ],
+ [
+ 270,
+ 120,
+ 0
+ ],
+ [
+ 270,
+ 130,
+ 0
+ ],
+ [
+ 270,
+ 140,
+ 0
+ ],
+ [
+ 270,
+ 150,
+ 0
+ ],
+ [
+ 280,
+ 0,
+ 0
+ ],
+ [
+ 280,
+ 10,
+ 0
+ ],
+ [
+ 280,
+ 20,
+ 0
+ ],
+ [
+ 280,
+ 30,
+ 0
+ ],
+ [
+ 280,
+ 40,
+ 0
+ ],
+ [
+ 280,
+ 50,
+ 0
+ ],
+ [
+ 280,
+ 60,
+ 0
+ ],
+ [
+ 280,
+ 70,
+ 0
+ ],
+ [
+ 280,
+ 80,
+ 0
+ ],
+ [
+ 280,
+ 90,
+ 0
+ ],
+ [
+ 280,
+ 100,
+ 0
+ ],
+ [
+ 280,
+ 110,
+ 0
+ ],
+ [
+ 280,
+ 120,
+ 0
+ ],
+ [
+ 280,
+ 130,
+ 0
+ ],
+ [
+ 280,
+ 140,
+ 0
+ ],
+ [
+ 280,
+ 150,
+ 0
+ ],
+ [
+ 290,
+ 0,
+ 0
+ ],
+ [
+ 290,
+ 10,
+ 0
+ ],
+ [
+ 290,
+ 20,
+ 0
+ ],
+ [
+ 290,
+ 30,
+ 0
+ ],
+ [
+ 290,
+ 40,
+ 0
+ ],
+ [
+ 290,
+ 50,
+ 0
+ ],
+ [
+ 290,
+ 60,
+ 0
+ ],
+ [
+ 290,
+ 70,
+ 0
+ ],
+ [
+ 290,
+ 80,
+ 0
+ ],
+ [
+ 290,
+ 90,
+ 0
+ ],
+ [
+ 290,
+ 100,
+ 0
+ ],
+ [
+ 290,
+ 110,
+ 0
+ ],
+ [
+ 290,
+ 120,
+ 0
+ ],
+ [
+ 290,
+ 130,
+ 0
+ ],
+ [
+ 290,
+ 140,
+ 0
+ ],
+ [
+ 290,
+ 150,
+ 0
+ ],
+ [
+ 300,
+ 0,
+ 0
+ ],
+ [
+ 300,
+ 10,
+ 0
+ ],
+ [
+ 300,
+ 20,
+ 0
+ ],
+ [
+ 300,
+ 30,
+ 0
+ ],
+ [
+ 300,
+ 40,
+ 0
+ ],
+ [
+ 300,
+ 50,
+ 0
+ ],
+ [
+ 300,
+ 60,
+ 0
+ ],
+ [
+ 300,
+ 70,
+ 0
+ ],
+ [
+ 300,
+ 80,
+ 0
+ ],
+ [
+ 300,
+ 90,
+ 0
+ ],
+ [
+ 300,
+ 100,
+ 0
+ ],
+ [
+ 300,
+ 110,
+ 0
+ ],
+ [
+ 300,
+ 120,
+ 0
+ ],
+ [
+ 300,
+ 130,
+ 0
+ ],
+ [
+ 300,
+ 140,
+ 0
+ ],
+ [
+ 300,
+ 150,
+ 0
+ ],
+ [
+ 310,
+ 0,
+ 0
+ ],
+ [
+ 310,
+ 10,
+ 0
+ ],
+ [
+ 310,
+ 20,
+ 0
+ ],
+ [
+ 310,
+ 30,
+ 0
+ ],
+ [
+ 310,
+ 40,
+ 0
+ ],
+ [
+ 310,
+ 50,
+ 0
+ ],
+ [
+ 310,
+ 60,
+ 0
+ ],
+ [
+ 310,
+ 70,
+ 0
+ ],
+ [
+ 310,
+ 80,
+ 0
+ ],
+ [
+ 310,
+ 90,
+ 0
+ ],
+ [
+ 310,
+ 100,
+ 0
+ ],
+ [
+ 310,
+ 110,
+ 0
+ ],
+ [
+ 310,
+ 120,
+ 0
+ ],
+ [
+ 310,
+ 130,
+ 0
+ ],
+ [
+ 310,
+ 140,
+ 0
+ ],
+ [
+ 310,
+ 150,
+ 0
+ ]
+ ]
+ },
+ {
+ "pin": 2,
+ "leds": [
+ [
+ 0,
+ 160,
+ 0
+ ],
+ [
+ 0,
+ 170,
+ 0
+ ],
+ [
+ 0,
+ 180,
+ 0
+ ],
+ [
+ 0,
+ 190,
+ 0
+ ],
+ [
+ 0,
+ 200,
+ 0
+ ],
+ [
+ 0,
+ 210,
+ 0
+ ],
+ [
+ 0,
+ 220,
+ 0
+ ],
+ [
+ 0,
+ 230,
+ 0
+ ],
+ [
+ 0,
+ 240,
+ 0
+ ],
+ [
+ 0,
+ 250,
+ 0
+ ],
+ [
+ 0,
+ 260,
+ 0
+ ],
+ [
+ 0,
+ 270,
+ 0
+ ],
+ [
+ 0,
+ 280,
+ 0
+ ],
+ [
+ 0,
+ 290,
+ 0
+ ],
+ [
+ 0,
+ 300,
+ 0
+ ],
+ [
+ 0,
+ 310,
+ 0
+ ],
+ [
+ 10,
+ 160,
+ 0
+ ],
+ [
+ 10,
+ 170,
+ 0
+ ],
+ [
+ 10,
+ 180,
+ 0
+ ],
+ [
+ 10,
+ 190,
+ 0
+ ],
+ [
+ 10,
+ 200,
+ 0
+ ],
+ [
+ 10,
+ 210,
+ 0
+ ],
+ [
+ 10,
+ 220,
+ 0
+ ],
+ [
+ 10,
+ 230,
+ 0
+ ],
+ [
+ 10,
+ 240,
+ 0
+ ],
+ [
+ 10,
+ 250,
+ 0
+ ],
+ [
+ 10,
+ 260,
+ 0
+ ],
+ [
+ 10,
+ 270,
+ 0
+ ],
+ [
+ 10,
+ 280,
+ 0
+ ],
+ [
+ 10,
+ 290,
+ 0
+ ],
+ [
+ 10,
+ 300,
+ 0
+ ],
+ [
+ 10,
+ 310,
+ 0
+ ],
+ [
+ 20,
+ 160,
+ 0
+ ],
+ [
+ 20,
+ 170,
+ 0
+ ],
+ [
+ 20,
+ 180,
+ 0
+ ],
+ [
+ 20,
+ 190,
+ 0
+ ],
+ [
+ 20,
+ 200,
+ 0
+ ],
+ [
+ 20,
+ 210,
+ 0
+ ],
+ [
+ 20,
+ 220,
+ 0
+ ],
+ [
+ 20,
+ 230,
+ 0
+ ],
+ [
+ 20,
+ 240,
+ 0
+ ],
+ [
+ 20,
+ 250,
+ 0
+ ],
+ [
+ 20,
+ 260,
+ 0
+ ],
+ [
+ 20,
+ 270,
+ 0
+ ],
+ [
+ 20,
+ 280,
+ 0
+ ],
+ [
+ 20,
+ 290,
+ 0
+ ],
+ [
+ 20,
+ 300,
+ 0
+ ],
+ [
+ 20,
+ 310,
+ 0
+ ],
+ [
+ 30,
+ 160,
+ 0
+ ],
+ [
+ 30,
+ 170,
+ 0
+ ],
+ [
+ 30,
+ 180,
+ 0
+ ],
+ [
+ 30,
+ 190,
+ 0
+ ],
+ [
+ 30,
+ 200,
+ 0
+ ],
+ [
+ 30,
+ 210,
+ 0
+ ],
+ [
+ 30,
+ 220,
+ 0
+ ],
+ [
+ 30,
+ 230,
+ 0
+ ],
+ [
+ 30,
+ 240,
+ 0
+ ],
+ [
+ 30,
+ 250,
+ 0
+ ],
+ [
+ 30,
+ 260,
+ 0
+ ],
+ [
+ 30,
+ 270,
+ 0
+ ],
+ [
+ 30,
+ 280,
+ 0
+ ],
+ [
+ 30,
+ 290,
+ 0
+ ],
+ [
+ 30,
+ 300,
+ 0
+ ],
+ [
+ 30,
+ 310,
+ 0
+ ],
+ [
+ 40,
+ 160,
+ 0
+ ],
+ [
+ 40,
+ 170,
+ 0
+ ],
+ [
+ 40,
+ 180,
+ 0
+ ],
+ [
+ 40,
+ 190,
+ 0
+ ],
+ [
+ 40,
+ 200,
+ 0
+ ],
+ [
+ 40,
+ 210,
+ 0
+ ],
+ [
+ 40,
+ 220,
+ 0
+ ],
+ [
+ 40,
+ 230,
+ 0
+ ],
+ [
+ 40,
+ 240,
+ 0
+ ],
+ [
+ 40,
+ 250,
+ 0
+ ],
+ [
+ 40,
+ 260,
+ 0
+ ],
+ [
+ 40,
+ 270,
+ 0
+ ],
+ [
+ 40,
+ 280,
+ 0
+ ],
+ [
+ 40,
+ 290,
+ 0
+ ],
+ [
+ 40,
+ 300,
+ 0
+ ],
+ [
+ 40,
+ 310,
+ 0
+ ],
+ [
+ 50,
+ 160,
+ 0
+ ],
+ [
+ 50,
+ 170,
+ 0
+ ],
+ [
+ 50,
+ 180,
+ 0
+ ],
+ [
+ 50,
+ 190,
+ 0
+ ],
+ [
+ 50,
+ 200,
+ 0
+ ],
+ [
+ 50,
+ 210,
+ 0
+ ],
+ [
+ 50,
+ 220,
+ 0
+ ],
+ [
+ 50,
+ 230,
+ 0
+ ],
+ [
+ 50,
+ 240,
+ 0
+ ],
+ [
+ 50,
+ 250,
+ 0
+ ],
+ [
+ 50,
+ 260,
+ 0
+ ],
+ [
+ 50,
+ 270,
+ 0
+ ],
+ [
+ 50,
+ 280,
+ 0
+ ],
+ [
+ 50,
+ 290,
+ 0
+ ],
+ [
+ 50,
+ 300,
+ 0
+ ],
+ [
+ 50,
+ 310,
+ 0
+ ],
+ [
+ 60,
+ 160,
+ 0
+ ],
+ [
+ 60,
+ 170,
+ 0
+ ],
+ [
+ 60,
+ 180,
+ 0
+ ],
+ [
+ 60,
+ 190,
+ 0
+ ],
+ [
+ 60,
+ 200,
+ 0
+ ],
+ [
+ 60,
+ 210,
+ 0
+ ],
+ [
+ 60,
+ 220,
+ 0
+ ],
+ [
+ 60,
+ 230,
+ 0
+ ],
+ [
+ 60,
+ 240,
+ 0
+ ],
+ [
+ 60,
+ 250,
+ 0
+ ],
+ [
+ 60,
+ 260,
+ 0
+ ],
+ [
+ 60,
+ 270,
+ 0
+ ],
+ [
+ 60,
+ 280,
+ 0
+ ],
+ [
+ 60,
+ 290,
+ 0
+ ],
+ [
+ 60,
+ 300,
+ 0
+ ],
+ [
+ 60,
+ 310,
+ 0
+ ],
+ [
+ 70,
+ 160,
+ 0
+ ],
+ [
+ 70,
+ 170,
+ 0
+ ],
+ [
+ 70,
+ 180,
+ 0
+ ],
+ [
+ 70,
+ 190,
+ 0
+ ],
+ [
+ 70,
+ 200,
+ 0
+ ],
+ [
+ 70,
+ 210,
+ 0
+ ],
+ [
+ 70,
+ 220,
+ 0
+ ],
+ [
+ 70,
+ 230,
+ 0
+ ],
+ [
+ 70,
+ 240,
+ 0
+ ],
+ [
+ 70,
+ 250,
+ 0
+ ],
+ [
+ 70,
+ 260,
+ 0
+ ],
+ [
+ 70,
+ 270,
+ 0
+ ],
+ [
+ 70,
+ 280,
+ 0
+ ],
+ [
+ 70,
+ 290,
+ 0
+ ],
+ [
+ 70,
+ 300,
+ 0
+ ],
+ [
+ 70,
+ 310,
+ 0
+ ],
+ [
+ 80,
+ 160,
+ 0
+ ],
+ [
+ 80,
+ 170,
+ 0
+ ],
+ [
+ 80,
+ 180,
+ 0
+ ],
+ [
+ 80,
+ 190,
+ 0
+ ],
+ [
+ 80,
+ 200,
+ 0
+ ],
+ [
+ 80,
+ 210,
+ 0
+ ],
+ [
+ 80,
+ 220,
+ 0
+ ],
+ [
+ 80,
+ 230,
+ 0
+ ],
+ [
+ 80,
+ 240,
+ 0
+ ],
+ [
+ 80,
+ 250,
+ 0
+ ],
+ [
+ 80,
+ 260,
+ 0
+ ],
+ [
+ 80,
+ 270,
+ 0
+ ],
+ [
+ 80,
+ 280,
+ 0
+ ],
+ [
+ 80,
+ 290,
+ 0
+ ],
+ [
+ 80,
+ 300,
+ 0
+ ],
+ [
+ 80,
+ 310,
+ 0
+ ],
+ [
+ 90,
+ 160,
+ 0
+ ],
+ [
+ 90,
+ 170,
+ 0
+ ],
+ [
+ 90,
+ 180,
+ 0
+ ],
+ [
+ 90,
+ 190,
+ 0
+ ],
+ [
+ 90,
+ 200,
+ 0
+ ],
+ [
+ 90,
+ 210,
+ 0
+ ],
+ [
+ 90,
+ 220,
+ 0
+ ],
+ [
+ 90,
+ 230,
+ 0
+ ],
+ [
+ 90,
+ 240,
+ 0
+ ],
+ [
+ 90,
+ 250,
+ 0
+ ],
+ [
+ 90,
+ 260,
+ 0
+ ],
+ [
+ 90,
+ 270,
+ 0
+ ],
+ [
+ 90,
+ 280,
+ 0
+ ],
+ [
+ 90,
+ 290,
+ 0
+ ],
+ [
+ 90,
+ 300,
+ 0
+ ],
+ [
+ 90,
+ 310,
+ 0
+ ],
+ [
+ 100,
+ 160,
+ 0
+ ],
+ [
+ 100,
+ 170,
+ 0
+ ],
+ [
+ 100,
+ 180,
+ 0
+ ],
+ [
+ 100,
+ 190,
+ 0
+ ],
+ [
+ 100,
+ 200,
+ 0
+ ],
+ [
+ 100,
+ 210,
+ 0
+ ],
+ [
+ 100,
+ 220,
+ 0
+ ],
+ [
+ 100,
+ 230,
+ 0
+ ],
+ [
+ 100,
+ 240,
+ 0
+ ],
+ [
+ 100,
+ 250,
+ 0
+ ],
+ [
+ 100,
+ 260,
+ 0
+ ],
+ [
+ 100,
+ 270,
+ 0
+ ],
+ [
+ 100,
+ 280,
+ 0
+ ],
+ [
+ 100,
+ 290,
+ 0
+ ],
+ [
+ 100,
+ 300,
+ 0
+ ],
+ [
+ 100,
+ 310,
+ 0
+ ],
+ [
+ 110,
+ 160,
+ 0
+ ],
+ [
+ 110,
+ 170,
+ 0
+ ],
+ [
+ 110,
+ 180,
+ 0
+ ],
+ [
+ 110,
+ 190,
+ 0
+ ],
+ [
+ 110,
+ 200,
+ 0
+ ],
+ [
+ 110,
+ 210,
+ 0
+ ],
+ [
+ 110,
+ 220,
+ 0
+ ],
+ [
+ 110,
+ 230,
+ 0
+ ],
+ [
+ 110,
+ 240,
+ 0
+ ],
+ [
+ 110,
+ 250,
+ 0
+ ],
+ [
+ 110,
+ 260,
+ 0
+ ],
+ [
+ 110,
+ 270,
+ 0
+ ],
+ [
+ 110,
+ 280,
+ 0
+ ],
+ [
+ 110,
+ 290,
+ 0
+ ],
+ [
+ 110,
+ 300,
+ 0
+ ],
+ [
+ 110,
+ 310,
+ 0
+ ],
+ [
+ 120,
+ 160,
+ 0
+ ],
+ [
+ 120,
+ 170,
+ 0
+ ],
+ [
+ 120,
+ 180,
+ 0
+ ],
+ [
+ 120,
+ 190,
+ 0
+ ],
+ [
+ 120,
+ 200,
+ 0
+ ],
+ [
+ 120,
+ 210,
+ 0
+ ],
+ [
+ 120,
+ 220,
+ 0
+ ],
+ [
+ 120,
+ 230,
+ 0
+ ],
+ [
+ 120,
+ 240,
+ 0
+ ],
+ [
+ 120,
+ 250,
+ 0
+ ],
+ [
+ 120,
+ 260,
+ 0
+ ],
+ [
+ 120,
+ 270,
+ 0
+ ],
+ [
+ 120,
+ 280,
+ 0
+ ],
+ [
+ 120,
+ 290,
+ 0
+ ],
+ [
+ 120,
+ 300,
+ 0
+ ],
+ [
+ 120,
+ 310,
+ 0
+ ],
+ [
+ 130,
+ 160,
+ 0
+ ],
+ [
+ 130,
+ 170,
+ 0
+ ],
+ [
+ 130,
+ 180,
+ 0
+ ],
+ [
+ 130,
+ 190,
+ 0
+ ],
+ [
+ 130,
+ 200,
+ 0
+ ],
+ [
+ 130,
+ 210,
+ 0
+ ],
+ [
+ 130,
+ 220,
+ 0
+ ],
+ [
+ 130,
+ 230,
+ 0
+ ],
+ [
+ 130,
+ 240,
+ 0
+ ],
+ [
+ 130,
+ 250,
+ 0
+ ],
+ [
+ 130,
+ 260,
+ 0
+ ],
+ [
+ 130,
+ 270,
+ 0
+ ],
+ [
+ 130,
+ 280,
+ 0
+ ],
+ [
+ 130,
+ 290,
+ 0
+ ],
+ [
+ 130,
+ 300,
+ 0
+ ],
+ [
+ 130,
+ 310,
+ 0
+ ],
+ [
+ 140,
+ 160,
+ 0
+ ],
+ [
+ 140,
+ 170,
+ 0
+ ],
+ [
+ 140,
+ 180,
+ 0
+ ],
+ [
+ 140,
+ 190,
+ 0
+ ],
+ [
+ 140,
+ 200,
+ 0
+ ],
+ [
+ 140,
+ 210,
+ 0
+ ],
+ [
+ 140,
+ 220,
+ 0
+ ],
+ [
+ 140,
+ 230,
+ 0
+ ],
+ [
+ 140,
+ 240,
+ 0
+ ],
+ [
+ 140,
+ 250,
+ 0
+ ],
+ [
+ 140,
+ 260,
+ 0
+ ],
+ [
+ 140,
+ 270,
+ 0
+ ],
+ [
+ 140,
+ 280,
+ 0
+ ],
+ [
+ 140,
+ 290,
+ 0
+ ],
+ [
+ 140,
+ 300,
+ 0
+ ],
+ [
+ 140,
+ 310,
+ 0
+ ],
+ [
+ 150,
+ 160,
+ 0
+ ],
+ [
+ 150,
+ 170,
+ 0
+ ],
+ [
+ 150,
+ 180,
+ 0
+ ],
+ [
+ 150,
+ 190,
+ 0
+ ],
+ [
+ 150,
+ 200,
+ 0
+ ],
+ [
+ 150,
+ 210,
+ 0
+ ],
+ [
+ 150,
+ 220,
+ 0
+ ],
+ [
+ 150,
+ 230,
+ 0
+ ],
+ [
+ 150,
+ 240,
+ 0
+ ],
+ [
+ 150,
+ 250,
+ 0
+ ],
+ [
+ 150,
+ 260,
+ 0
+ ],
+ [
+ 150,
+ 270,
+ 0
+ ],
+ [
+ 150,
+ 280,
+ 0
+ ],
+ [
+ 150,
+ 290,
+ 0
+ ],
+ [
+ 150,
+ 300,
+ 0
+ ],
+ [
+ 150,
+ 310,
+ 0
+ ]
+ ]
+ },
+ {
+ "pin": 2,
+ "leds": [
+ [
+ 160,
+ 160,
+ 0
+ ],
+ [
+ 160,
+ 170,
+ 0
+ ],
+ [
+ 160,
+ 180,
+ 0
+ ],
+ [
+ 160,
+ 190,
+ 0
+ ],
+ [
+ 160,
+ 200,
+ 0
+ ],
+ [
+ 160,
+ 210,
+ 0
+ ],
+ [
+ 160,
+ 220,
+ 0
+ ],
+ [
+ 160,
+ 230,
+ 0
+ ],
+ [
+ 160,
+ 240,
+ 0
+ ],
+ [
+ 160,
+ 250,
+ 0
+ ],
+ [
+ 160,
+ 260,
+ 0
+ ],
+ [
+ 160,
+ 270,
+ 0
+ ],
+ [
+ 160,
+ 280,
+ 0
+ ],
+ [
+ 160,
+ 290,
+ 0
+ ],
+ [
+ 160,
+ 300,
+ 0
+ ],
+ [
+ 160,
+ 310,
+ 0
+ ],
+ [
+ 170,
+ 160,
+ 0
+ ],
+ [
+ 170,
+ 170,
+ 0
+ ],
+ [
+ 170,
+ 180,
+ 0
+ ],
+ [
+ 170,
+ 190,
+ 0
+ ],
+ [
+ 170,
+ 200,
+ 0
+ ],
+ [
+ 170,
+ 210,
+ 0
+ ],
+ [
+ 170,
+ 220,
+ 0
+ ],
+ [
+ 170,
+ 230,
+ 0
+ ],
+ [
+ 170,
+ 240,
+ 0
+ ],
+ [
+ 170,
+ 250,
+ 0
+ ],
+ [
+ 170,
+ 260,
+ 0
+ ],
+ [
+ 170,
+ 270,
+ 0
+ ],
+ [
+ 170,
+ 280,
+ 0
+ ],
+ [
+ 170,
+ 290,
+ 0
+ ],
+ [
+ 170,
+ 300,
+ 0
+ ],
+ [
+ 170,
+ 310,
+ 0
+ ],
+ [
+ 180,
+ 160,
+ 0
+ ],
+ [
+ 180,
+ 170,
+ 0
+ ],
+ [
+ 180,
+ 180,
+ 0
+ ],
+ [
+ 180,
+ 190,
+ 0
+ ],
+ [
+ 180,
+ 200,
+ 0
+ ],
+ [
+ 180,
+ 210,
+ 0
+ ],
+ [
+ 180,
+ 220,
+ 0
+ ],
+ [
+ 180,
+ 230,
+ 0
+ ],
+ [
+ 180,
+ 240,
+ 0
+ ],
+ [
+ 180,
+ 250,
+ 0
+ ],
+ [
+ 180,
+ 260,
+ 0
+ ],
+ [
+ 180,
+ 270,
+ 0
+ ],
+ [
+ 180,
+ 280,
+ 0
+ ],
+ [
+ 180,
+ 290,
+ 0
+ ],
+ [
+ 180,
+ 300,
+ 0
+ ],
+ [
+ 180,
+ 310,
+ 0
+ ],
+ [
+ 190,
+ 160,
+ 0
+ ],
+ [
+ 190,
+ 170,
+ 0
+ ],
+ [
+ 190,
+ 180,
+ 0
+ ],
+ [
+ 190,
+ 190,
+ 0
+ ],
+ [
+ 190,
+ 200,
+ 0
+ ],
+ [
+ 190,
+ 210,
+ 0
+ ],
+ [
+ 190,
+ 220,
+ 0
+ ],
+ [
+ 190,
+ 230,
+ 0
+ ],
+ [
+ 190,
+ 240,
+ 0
+ ],
+ [
+ 190,
+ 250,
+ 0
+ ],
+ [
+ 190,
+ 260,
+ 0
+ ],
+ [
+ 190,
+ 270,
+ 0
+ ],
+ [
+ 190,
+ 280,
+ 0
+ ],
+ [
+ 190,
+ 290,
+ 0
+ ],
+ [
+ 190,
+ 300,
+ 0
+ ],
+ [
+ 190,
+ 310,
+ 0
+ ],
+ [
+ 200,
+ 160,
+ 0
+ ],
+ [
+ 200,
+ 170,
+ 0
+ ],
+ [
+ 200,
+ 180,
+ 0
+ ],
+ [
+ 200,
+ 190,
+ 0
+ ],
+ [
+ 200,
+ 200,
+ 0
+ ],
+ [
+ 200,
+ 210,
+ 0
+ ],
+ [
+ 200,
+ 220,
+ 0
+ ],
+ [
+ 200,
+ 230,
+ 0
+ ],
+ [
+ 200,
+ 240,
+ 0
+ ],
+ [
+ 200,
+ 250,
+ 0
+ ],
+ [
+ 200,
+ 260,
+ 0
+ ],
+ [
+ 200,
+ 270,
+ 0
+ ],
+ [
+ 200,
+ 280,
+ 0
+ ],
+ [
+ 200,
+ 290,
+ 0
+ ],
+ [
+ 200,
+ 300,
+ 0
+ ],
+ [
+ 200,
+ 310,
+ 0
+ ],
+ [
+ 210,
+ 160,
+ 0
+ ],
+ [
+ 210,
+ 170,
+ 0
+ ],
+ [
+ 210,
+ 180,
+ 0
+ ],
+ [
+ 210,
+ 190,
+ 0
+ ],
+ [
+ 210,
+ 200,
+ 0
+ ],
+ [
+ 210,
+ 210,
+ 0
+ ],
+ [
+ 210,
+ 220,
+ 0
+ ],
+ [
+ 210,
+ 230,
+ 0
+ ],
+ [
+ 210,
+ 240,
+ 0
+ ],
+ [
+ 210,
+ 250,
+ 0
+ ],
+ [
+ 210,
+ 260,
+ 0
+ ],
+ [
+ 210,
+ 270,
+ 0
+ ],
+ [
+ 210,
+ 280,
+ 0
+ ],
+ [
+ 210,
+ 290,
+ 0
+ ],
+ [
+ 210,
+ 300,
+ 0
+ ],
+ [
+ 210,
+ 310,
+ 0
+ ],
+ [
+ 220,
+ 160,
+ 0
+ ],
+ [
+ 220,
+ 170,
+ 0
+ ],
+ [
+ 220,
+ 180,
+ 0
+ ],
+ [
+ 220,
+ 190,
+ 0
+ ],
+ [
+ 220,
+ 200,
+ 0
+ ],
+ [
+ 220,
+ 210,
+ 0
+ ],
+ [
+ 220,
+ 220,
+ 0
+ ],
+ [
+ 220,
+ 230,
+ 0
+ ],
+ [
+ 220,
+ 240,
+ 0
+ ],
+ [
+ 220,
+ 250,
+ 0
+ ],
+ [
+ 220,
+ 260,
+ 0
+ ],
+ [
+ 220,
+ 270,
+ 0
+ ],
+ [
+ 220,
+ 280,
+ 0
+ ],
+ [
+ 220,
+ 290,
+ 0
+ ],
+ [
+ 220,
+ 300,
+ 0
+ ],
+ [
+ 220,
+ 310,
+ 0
+ ],
+ [
+ 230,
+ 160,
+ 0
+ ],
+ [
+ 230,
+ 170,
+ 0
+ ],
+ [
+ 230,
+ 180,
+ 0
+ ],
+ [
+ 230,
+ 190,
+ 0
+ ],
+ [
+ 230,
+ 200,
+ 0
+ ],
+ [
+ 230,
+ 210,
+ 0
+ ],
+ [
+ 230,
+ 220,
+ 0
+ ],
+ [
+ 230,
+ 230,
+ 0
+ ],
+ [
+ 230,
+ 240,
+ 0
+ ],
+ [
+ 230,
+ 250,
+ 0
+ ],
+ [
+ 230,
+ 260,
+ 0
+ ],
+ [
+ 230,
+ 270,
+ 0
+ ],
+ [
+ 230,
+ 280,
+ 0
+ ],
+ [
+ 230,
+ 290,
+ 0
+ ],
+ [
+ 230,
+ 300,
+ 0
+ ],
+ [
+ 230,
+ 310,
+ 0
+ ],
+ [
+ 240,
+ 160,
+ 0
+ ],
+ [
+ 240,
+ 170,
+ 0
+ ],
+ [
+ 240,
+ 180,
+ 0
+ ],
+ [
+ 240,
+ 190,
+ 0
+ ],
+ [
+ 240,
+ 200,
+ 0
+ ],
+ [
+ 240,
+ 210,
+ 0
+ ],
+ [
+ 240,
+ 220,
+ 0
+ ],
+ [
+ 240,
+ 230,
+ 0
+ ],
+ [
+ 240,
+ 240,
+ 0
+ ],
+ [
+ 240,
+ 250,
+ 0
+ ],
+ [
+ 240,
+ 260,
+ 0
+ ],
+ [
+ 240,
+ 270,
+ 0
+ ],
+ [
+ 240,
+ 280,
+ 0
+ ],
+ [
+ 240,
+ 290,
+ 0
+ ],
+ [
+ 240,
+ 300,
+ 0
+ ],
+ [
+ 240,
+ 310,
+ 0
+ ],
+ [
+ 250,
+ 160,
+ 0
+ ],
+ [
+ 250,
+ 170,
+ 0
+ ],
+ [
+ 250,
+ 180,
+ 0
+ ],
+ [
+ 250,
+ 190,
+ 0
+ ],
+ [
+ 250,
+ 200,
+ 0
+ ],
+ [
+ 250,
+ 210,
+ 0
+ ],
+ [
+ 250,
+ 220,
+ 0
+ ],
+ [
+ 250,
+ 230,
+ 0
+ ],
+ [
+ 250,
+ 240,
+ 0
+ ],
+ [
+ 250,
+ 250,
+ 0
+ ],
+ [
+ 250,
+ 260,
+ 0
+ ],
+ [
+ 250,
+ 270,
+ 0
+ ],
+ [
+ 250,
+ 280,
+ 0
+ ],
+ [
+ 250,
+ 290,
+ 0
+ ],
+ [
+ 250,
+ 300,
+ 0
+ ],
+ [
+ 250,
+ 310,
+ 0
+ ],
+ [
+ 260,
+ 160,
+ 0
+ ],
+ [
+ 260,
+ 170,
+ 0
+ ],
+ [
+ 260,
+ 180,
+ 0
+ ],
+ [
+ 260,
+ 190,
+ 0
+ ],
+ [
+ 260,
+ 200,
+ 0
+ ],
+ [
+ 260,
+ 210,
+ 0
+ ],
+ [
+ 260,
+ 220,
+ 0
+ ],
+ [
+ 260,
+ 230,
+ 0
+ ],
+ [
+ 260,
+ 240,
+ 0
+ ],
+ [
+ 260,
+ 250,
+ 0
+ ],
+ [
+ 260,
+ 260,
+ 0
+ ],
+ [
+ 260,
+ 270,
+ 0
+ ],
+ [
+ 260,
+ 280,
+ 0
+ ],
+ [
+ 260,
+ 290,
+ 0
+ ],
+ [
+ 260,
+ 300,
+ 0
+ ],
+ [
+ 260,
+ 310,
+ 0
+ ],
+ [
+ 270,
+ 160,
+ 0
+ ],
+ [
+ 270,
+ 170,
+ 0
+ ],
+ [
+ 270,
+ 180,
+ 0
+ ],
+ [
+ 270,
+ 190,
+ 0
+ ],
+ [
+ 270,
+ 200,
+ 0
+ ],
+ [
+ 270,
+ 210,
+ 0
+ ],
+ [
+ 270,
+ 220,
+ 0
+ ],
+ [
+ 270,
+ 230,
+ 0
+ ],
+ [
+ 270,
+ 240,
+ 0
+ ],
+ [
+ 270,
+ 250,
+ 0
+ ],
+ [
+ 270,
+ 260,
+ 0
+ ],
+ [
+ 270,
+ 270,
+ 0
+ ],
+ [
+ 270,
+ 280,
+ 0
+ ],
+ [
+ 270,
+ 290,
+ 0
+ ],
+ [
+ 270,
+ 300,
+ 0
+ ],
+ [
+ 270,
+ 310,
+ 0
+ ],
+ [
+ 280,
+ 160,
+ 0
+ ],
+ [
+ 280,
+ 170,
+ 0
+ ],
+ [
+ 280,
+ 180,
+ 0
+ ],
+ [
+ 280,
+ 190,
+ 0
+ ],
+ [
+ 280,
+ 200,
+ 0
+ ],
+ [
+ 280,
+ 210,
+ 0
+ ],
+ [
+ 280,
+ 220,
+ 0
+ ],
+ [
+ 280,
+ 230,
+ 0
+ ],
+ [
+ 280,
+ 240,
+ 0
+ ],
+ [
+ 280,
+ 250,
+ 0
+ ],
+ [
+ 280,
+ 260,
+ 0
+ ],
+ [
+ 280,
+ 270,
+ 0
+ ],
+ [
+ 280,
+ 280,
+ 0
+ ],
+ [
+ 280,
+ 290,
+ 0
+ ],
+ [
+ 280,
+ 300,
+ 0
+ ],
+ [
+ 280,
+ 310,
+ 0
+ ],
+ [
+ 290,
+ 160,
+ 0
+ ],
+ [
+ 290,
+ 170,
+ 0
+ ],
+ [
+ 290,
+ 180,
+ 0
+ ],
+ [
+ 290,
+ 190,
+ 0
+ ],
+ [
+ 290,
+ 200,
+ 0
+ ],
+ [
+ 290,
+ 210,
+ 0
+ ],
+ [
+ 290,
+ 220,
+ 0
+ ],
+ [
+ 290,
+ 230,
+ 0
+ ],
+ [
+ 290,
+ 240,
+ 0
+ ],
+ [
+ 290,
+ 250,
+ 0
+ ],
+ [
+ 290,
+ 260,
+ 0
+ ],
+ [
+ 290,
+ 270,
+ 0
+ ],
+ [
+ 290,
+ 280,
+ 0
+ ],
+ [
+ 290,
+ 290,
+ 0
+ ],
+ [
+ 290,
+ 300,
+ 0
+ ],
+ [
+ 290,
+ 310,
+ 0
+ ],
+ [
+ 300,
+ 160,
+ 0
+ ],
+ [
+ 300,
+ 170,
+ 0
+ ],
+ [
+ 300,
+ 180,
+ 0
+ ],
+ [
+ 300,
+ 190,
+ 0
+ ],
+ [
+ 300,
+ 200,
+ 0
+ ],
+ [
+ 300,
+ 210,
+ 0
+ ],
+ [
+ 300,
+ 220,
+ 0
+ ],
+ [
+ 300,
+ 230,
+ 0
+ ],
+ [
+ 300,
+ 240,
+ 0
+ ],
+ [
+ 300,
+ 250,
+ 0
+ ],
+ [
+ 300,
+ 260,
+ 0
+ ],
+ [
+ 300,
+ 270,
+ 0
+ ],
+ [
+ 300,
+ 280,
+ 0
+ ],
+ [
+ 300,
+ 290,
+ 0
+ ],
+ [
+ 300,
+ 300,
+ 0
+ ],
+ [
+ 300,
+ 310,
+ 0
+ ],
+ [
+ 310,
+ 160,
+ 0
+ ],
+ [
+ 310,
+ 170,
+ 0
+ ],
+ [
+ 310,
+ 180,
+ 0
+ ],
+ [
+ 310,
+ 190,
+ 0
+ ],
+ [
+ 310,
+ 200,
+ 0
+ ],
+ [
+ 310,
+ 210,
+ 0
+ ],
+ [
+ 310,
+ 220,
+ 0
+ ],
+ [
+ 310,
+ 230,
+ 0
+ ],
+ [
+ 310,
+ 240,
+ 0
+ ],
+ [
+ 310,
+ 250,
+ 0
+ ],
+ [
+ 310,
+ 260,
+ 0
+ ],
+ [
+ 310,
+ 270,
+ 0
+ ],
+ [
+ 310,
+ 280,
+ 0
+ ],
+ [
+ 310,
+ 290,
+ 0
+ ],
+ [
+ 310,
+ 300,
+ 0
+ ],
+ [
+ 310,
+ 310,
+ 0
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/misc/model.json b/misc/model.json
index 7bd471e..59c6e8d 100644
--- a/misc/model.json
+++ b/misc/model.json
@@ -169,7 +169,7 @@
{
"id": "reset 1",
"type": "select",
- "ro": true,
+ "ro": false,
"pid": "System",
"o": 56,
"fun": 42
@@ -612,14 +612,14 @@
"dash": true
},
{
- "id": "watches",
+ "id": "patches",
"type": "table",
"ro": true,
"n": [
{
"id": "channel",
"type": "number",
- "pid": "watches",
+ "pid": "patches",
"ro": true,
"min": 1,
"max": 512,
@@ -629,7 +629,7 @@
{
"id": "variable",
"type": "text",
- "pid": "watches",
+ "pid": "patches",
"ro": true,
"max": 32,
"o": 111,
@@ -638,7 +638,7 @@
{
"id": "max",
"type": "number",
- "pid": "watches",
+ "pid": "patches",
"ro": true,
"o": 76,
"fun": 61
@@ -646,7 +646,7 @@
{
"id": "value",
"type": "number",
- "pid": "watches",
+ "pid": "patches",
"ro": true,
"max": 255,
"o": 113,
@@ -936,7 +936,8 @@
},
{
"id": "LiveScripts",
- "type": "usermod",
+ "type": "User",
+ "pid": "m",
"ro": true,
"max": 255,
"n": [
@@ -945,8 +946,9 @@
"type": "select",
"pid": "LiveScripts",
"ro": false,
- "o": 107,
- "fun": 87
+ "value": 255,
+ "o": 101,
+ "fun": 74
},
{
"id": "fps1",
@@ -954,7 +956,9 @@
"pid": "LiveScripts",
"ro": true,
"max": 10,
- "o": 148
+ "o": 102,
+ "fun": 75,
+ "value": "0 /s"
},
{
"id": "fps2",
@@ -962,10 +966,84 @@
"pid": "LiveScripts",
"ro": true,
"max": 10,
- "o": 149
+ "o": 103,
+ "fun": 76,
+ "value": "0 /s"
+ },
+ {
+ "id": "scripts",
+ "type": "table",
+ "pid": "LiveScripts",
+ "ro": true,
+ "n": [
+ {
+ "id": "name",
+ "type": "text",
+ "pid": "scripts",
+ "ro": true,
+ "max": 32,
+ "o": 105,
+ "fun": 77,
+ "value": []
+ },
+ {
+ "id": "running",
+ "type": "checkbox",
+ "pid": "scripts",
+ "ro": true,
+ "o": 106,
+ "fun": 78,
+ "value": []
+ },
+ {
+ "id": "halted",
+ "type": "checkbox",
+ "pid": "scripts",
+ "ro": true,
+ "o": 107,
+ "fun": 79,
+ "value": []
+ },
+ {
+ "id": "exe",
+ "type": "checkbox",
+ "pid": "scripts",
+ "ro": true,
+ "o": 108,
+ "fun": 80,
+ "value": []
+ },
+ {
+ "id": "handle",
+ "type": "number",
+ "pid": "scripts",
+ "ro": true,
+ "o": 109,
+ "fun": 81,
+ "value": []
+ },
+ {
+ "id": "size",
+ "type": "text",
+ "pid": "scripts",
+ "ro": true,
+ "max": 32,
+ "o": 110,
+ "fun": 82,
+ "value": []
+ },
+ {
+ "id": "Kill",
+ "type": "button",
+ "pid": "scripts",
+ "ro": false,
+ "o": 111,
+ "fun": 83
+ }
+ ],
+ "o": 104
}
],
- "pid": "m",
"o": 7310
},
{
@@ -1148,7 +1226,7 @@
"fun": 9
},
{
- "id": "driverShow",
+ "id": "showDriver",
"type": "checkbox",
"ro": false,
"value": false,
diff --git a/misc/testOutput.txt b/misc/testOutput.txt
index e241acc..5215c98 100644
--- a/misc/testOutput.txt
+++ b/misc/testOutput.txt
@@ -1,43 +1,43 @@
Reading model from /model.json... (deserializeConfigFromFS)
File /model.json open to read, size 6847 bytes
-Read model [{"id":"Preview","type":"appmod","ro":false,"o":1,"n":[{"id":"pview","type":"canvas","ro":false,"o":2,"loopFun":0,"interval":160}]},{"id":"Leds","type":"appmod","ro":false,"o":3,"n":[{"id":"on","type":"checkbox","ro":false,"o":4,"value":1,"dash":true},{"id":"brightness","type":"range","ro":false,"o":5,"value":10,"max":255,"log":true,"dash":true},{"id":"ledsTbl","type":"table","ro":false,"o":6,"n":[{"id":"pro","type":"select","ro":false,"o":13,"value":2,"dash":true},{"id":"ledsStart","type":"coord3D","ro":false,"o":14,"value":[{"x":0,"y":0,"z":0}],"max":127},{"id":"ledsEnd","type":"coord3D","ro":false,"o":15,"value":[{"x":32,"y":32,"z":0}],"max":127},{"id":"ledsSize","type":"coord3D","ro":true,"o":16,"max":127},{"id":"fxCount","type":"number","ro":true,"o":17,"max":255}]},{"id":"fx","type":"select","ro":false,"o":7,"value":13,"dash":true,"n":[{"id":"pal","type":"select","ro":false,"o":8,"value":4,"dash":true},{"id":"speed","type":"range","ro":false,"o":9,"min":1,"max":255,"value":128},{"id":"Offset X","type":"range","ro":false,"o":10,"max":255,"value":128},{"id":"Offset Y","type":"range","ro":false,"o":11,"max":255,"value":128},{"id":"Legs","type":"range","ro":false,"o":12,"min":1,"max":8,"value":4}]},{"id":"fixture","type":"select","ro":false,"o":18,"value":0},{"id":"fixSize","type":"coord3D","ro":true,"o":19,"max":127},{"id":"fixCount","type":"number","ro":true,"o":20,"max":255},{"id":"fps","type":"number","ro":false,"o":21,"value":60,"min":1,"max":999},{"id":"realFps","type":"text","ro":true,"o":22,"max":10}]},{"id":"Fixture Generator","type":"usermod","ro":false,"o":23,"n":[{"id":"fixtureGen","type":"select","ro":false,"o":24,"value":0,"n":[{"id":"ledCount","type":"number","ro":false,"o":25,"min":1,"max":4096,"value":64}]},{"id":"pinList","type":"text","ro":false,"o":26,"value":"16","max":32},{"id":"generate","type":"button","ro":false,"o":27}]},{"id":"Files","type":"sysmod","ro":false,"o":28,"n":[{"id":"files","type":"table","ro":false,"o":29,"n":[{"id":"name","type":"text","ro":true,"o":30,"max":32},{"id":"size","type":"number","ro":true,"o":31},{"id":"flLink","type":"url","ro":true,"o":32}]},{"id":"size","type":"text","ro":true,"o":33,"max":32}]},{"id":"System","type":"sysmod","ro":false,"o":34,"n":[{"id":"name","type":"text","ro":false,"o":35,"value":"StarBase16MB","max":32},{"id":"uptime","type":"text","ro":true,"o":36,"max":16},{"id":"loops","type":"text","ro":true,"o":37,"max":16},{"id":"chip","type":"text","ro":true,"o":38,"max":16},{"id":"heap","type":"text","ro":true,"o":39,"max":32},{"id":"stack","type":"text","ro":true,"o":40,"max":16},{"id":"reboot","type":"button","ro":false,"o":41},{"id":"reset 0","type":"select","ro":true,"o":42},{"id":"reset 1","type":"select","ro":true,"o":43},{"id":"restartReason","type":"select","ro":true,"o":44},{"id":"version","type":"text","ro":true,"o":45,"max":16}],"view":"vAll"},{"id":"Pins","type":"sysmod","ro":false,"o":46,"n":[{"id":"pins","type":"table","ro":true,"o":47,"n":[{"id":"pin","type":"number","ro":true,"o":48,"max":50},{"id":"owner","type":"text","ro":true,"o":49,"max":32},{"id":"details","type":"text","ro":true,"o":50,"max":256}]},{"id":"board","type":"canvas","ro":true,"o":51,"loopFun":1,"interval":1000},{"id":"pin19","type":"checkbox","ro":false,"o":52,"value":1}]},{"id":"Print","type":"sysmod","ro":false,"o":53,"n":[{"id":"output","type":"select","ro":false,"o":54,"value":1},{"id":"log","type":"textarea","ro":true,"o":55}]},{"id":"Web","type":"sysmod","ro":false,"o":56,"n":[{"id":"clients","type":"table","ro":true,"o":57,"n":[{"id":"nr","type":"number","ro":true,"o":58,"max":999},{"id":"ip","type":"text","ro":true,"o":59,"max":16},{"id":"full","type":"checkbox","ro":true,"o":60},{"id":"status","type":"select","ro":true,"o":61},{"id":"length","type":"number","ro":true,"o":62,"max":64}]},{"id":"wsCounter","type":"text","ro":true,"o":63,"max":16},{"id":"queueLength","type":"number","ro":true,"o":64,"max":64}]},{"id":"Network","type":"sysmod","ro":false,"o":65,"n":[{"id":"ssid","type":"text","ro":false,"o":66,"value":"ewtr","max":32},{"id":"password","type":"password","ro":false,"o":67,"value":"zonledmod"},{"id":"connect","type":"button","ro":false,"o":68},{"id":"nwstatus","type":"text","ro":true,"o":69,"max":32},{"id":"rssi","type":"text","ro":true,"o":70,"max":32}]},{"id":"DDP","type":"usermod","ro":false,"o":71,"n":[{"id":"ddpInst","type":"select","ro":false,"o":72}]},{"id":"ArtNet","type":"usermod","ro":false,"o":73,"n":[{"id":"artInst","type":"select","ro":false,"o":74}]},{"id":"E131","type":"usermod","ro":false,"o":75,"n":[{"id":"universe","type":"number","ro":false,"o":76,"value":1,"max":7},{"id":"channel","type":"number","ro":false,"o":77,"value":1,"min":1,"max":512,"dash":true},{"id":"watches","type":"table","ro":true,"o":78,"n":[{"id":"channel","type":"number","ro":true,"o":79,"min":1,"max":512},{"id":"variable","type":"text","ro":true,"o":80,"max":32},{"id":"max","type":"number","ro":true,"o":81},{"id":"value","type":"number","ro":true,"o":82,"max":255}]}]},{"id":"Model","type":"sysmod","ro":false,"o":83,"n":[{"id":"mSize","type":"text","ro":true,"o":84,"max":32},{"id":"saveModel","type":"button","ro":false,"o":85},{"id":"showObsolete","type":"checkbox","ro":false,"o":86,"value":0},{"id":"deleteObsolete","type":"button","ro":false,"o":87}]},{"id":"UI","type":"sysmod","ro":false,"o":88,"n":[{"id":"loops","type":"table","ro":true,"o":89,"n":[{"id":"variable","type":"text","ro":true,"o":90,"max":32},{"id":"#loops","type":"number","ro":true,"o":91,"max":999}]}]},{"id":"Instances","type":"sysmod","ro":false,"o":92,"n":[{"id":"instances","type":"table","ro":true,"o":93,"n":[{"id":"name","type":"text","ro":true,"o":94,"max":32},{"id":"link","type":"url","ro":true,"o":95},{"id":"IP","type":"text","ro":true,"o":96,"max":16},{"id":"type","type":"text","ro":true,"o":97,"max":16},{"id":"version","type":"number","ro":true,"o":98,"max":-1},{"id":"uptime","type":"number","ro":true,"o":99,"max":-1},{"id":"inson","type":"checkbox","ro":false,"o":101},{"id":"insbri","type":"range","ro":false,"o":102,"max":255,"log":true},{"id":"inspro","type":"select","ro":false,"o":103},{"id":"insfx","type":"select","ro":false,"o":104},{"id":"insdch","type":"number","ro":false,"o":106,"min":1,"max":512},{"id":"inssma","type":"select","ro":false,"o":107},{"id":"inspal","type":"select","ro":false,"o":105}]},{"id":"sma","type":"select","ro":false,"o":100,"value":0,"dash":true}]},{"id":"Modules","type":"sysmod","ro":false,"o":108,"n":[{"id":"Modules","type":"table","ro":true,"o":109,"n":[{"id":"name","type":"text","ro":true,"o":110,"max":32},{"id":"success","type":"checkbox","ro":true,"o":111},{"id":"enabled","type":"checkbox","ro":false,"o":112,"value":[true,true,true,true,true,true,true,true,true,false,false,true,true,true,true,true,true]}]}]}]
+Read model [{"id":"Preview","type":"appmod","ro":false,"o":1,"n":[{"id":"pview","type":"canvas","ro":false,"o":2,"loopFun":0,"interval":160}]},{"id":"Leds","type":"appmod","ro":false,"o":3,"n":[{"id":"on","type":"checkbox","ro":false,"o":4,"value":1,"dash":true},{"id":"brightness","type":"range","ro":false,"o":5,"value":10,"max":255,"log":true,"dash":true},{"id":"ledsTbl","type":"table","ro":false,"o":6,"n":[{"id":"pro","type":"select","ro":false,"o":13,"value":2,"dash":true},{"id":"ledsStart","type":"coord3D","ro":false,"o":14,"value":[{"x":0,"y":0,"z":0}],"max":127},{"id":"ledsEnd","type":"coord3D","ro":false,"o":15,"value":[{"x":32,"y":32,"z":0}],"max":127},{"id":"ledsSize","type":"coord3D","ro":true,"o":16,"max":127},{"id":"fxCount","type":"number","ro":true,"o":17,"max":255}]},{"id":"fx","type":"select","ro":false,"o":7,"value":13,"dash":true,"n":[{"id":"pal","type":"select","ro":false,"o":8,"value":4,"dash":true},{"id":"speed","type":"range","ro":false,"o":9,"min":1,"max":255,"value":128},{"id":"Offset X","type":"range","ro":false,"o":10,"max":255,"value":128},{"id":"Offset Y","type":"range","ro":false,"o":11,"max":255,"value":128},{"id":"Legs","type":"range","ro":false,"o":12,"min":1,"max":8,"value":4}]},{"id":"fixture","type":"select","ro":false,"o":18,"value":0},{"id":"fixSize","type":"coord3D","ro":true,"o":19,"max":127},{"id":"fixCount","type":"number","ro":true,"o":20,"max":255},{"id":"fps","type":"number","ro":false,"o":21,"value":60,"min":1,"max":999},{"id":"realFps","type":"text","ro":true,"o":22,"max":10}]},{"id":"Fixture Generator","type":"usermod","ro":false,"o":23,"n":[{"id":"fixtureGen","type":"select","ro":false,"o":24,"value":0,"n":[{"id":"ledCount","type":"number","ro":false,"o":25,"min":1,"max":4096,"value":64}]},{"id":"pinList","type":"text","ro":false,"o":26,"value":"16","max":32},{"id":"generate","type":"button","ro":false,"o":27}]},{"id":"Files","type":"sysmod","ro":false,"o":28,"n":[{"id":"files","type":"table","ro":false,"o":29,"n":[{"id":"name","type":"text","ro":true,"o":30,"max":32},{"id":"size","type":"number","ro":true,"o":31},{"id":"flLink","type":"url","ro":true,"o":32}]},{"id":"size","type":"text","ro":true,"o":33,"max":32}]},{"id":"System","type":"sysmod","ro":false,"o":34,"n":[{"id":"name","type":"text","ro":false,"o":35,"value":"StarBase16MB","max":32},{"id":"uptime","type":"text","ro":true,"o":36,"max":16},{"id":"loops","type":"text","ro":true,"o":37,"max":16},{"id":"chip","type":"text","ro":true,"o":38,"max":16},{"id":"heap","type":"text","ro":true,"o":39,"max":32},{"id":"stack","type":"text","ro":true,"o":40,"max":16},{"id":"reboot","type":"button","ro":false,"o":41},{"id":"reset 0","type":"select","ro":true,"o":42},{"id":"reset 1","type":"select","ro":true,"o":43},{"id":"restartReason","type":"select","ro":true,"o":44},{"id":"version","type":"text","ro":true,"o":45,"max":16}],"view":"vAll"},{"id":"Pins","type":"sysmod","ro":false,"o":46,"n":[{"id":"pins","type":"table","ro":true,"o":47,"n":[{"id":"pin","type":"number","ro":true,"o":48,"max":50},{"id":"owner","type":"text","ro":true,"o":49,"max":32},{"id":"details","type":"text","ro":true,"o":50,"max":256}]},{"id":"board","type":"canvas","ro":true,"o":51,"loopFun":1,"interval":1000},{"id":"pin19","type":"checkbox","ro":false,"o":52,"value":1}]},{"id":"Print","type":"sysmod","ro":false,"o":53,"n":[{"id":"output","type":"select","ro":false,"o":54,"value":1},{"id":"log","type":"textarea","ro":true,"o":55}]},{"id":"Web","type":"sysmod","ro":false,"o":56,"n":[{"id":"clients","type":"table","ro":true,"o":57,"n":[{"id":"nr","type":"number","ro":true,"o":58,"max":999},{"id":"ip","type":"text","ro":true,"o":59,"max":16},{"id":"full","type":"checkbox","ro":true,"o":60},{"id":"status","type":"select","ro":true,"o":61},{"id":"length","type":"number","ro":true,"o":62,"max":64}]},{"id":"wsCounter","type":"text","ro":true,"o":63,"max":16},{"id":"queueLength","type":"number","ro":true,"o":64,"max":64}]},{"id":"Network","type":"sysmod","ro":false,"o":65,"n":[{"id":"ssid","type":"text","ro":false,"o":66,"value":"ewtr","max":32},{"id":"password","type":"password","ro":false,"o":67,"value":"zonledmod"},{"id":"connect","type":"button","ro":false,"o":68},{"id":"nwstatus","type":"text","ro":true,"o":69,"max":32},{"id":"rssi","type":"text","ro":true,"o":70,"max":32}]},{"id":"DDP","type":"usermod","ro":false,"o":71,"n":[{"id":"ddpInst","type":"select","ro":false,"o":72}]},{"id":"ArtNet","type":"usermod","ro":false,"o":73,"n":[{"id":"artInst","type":"select","ro":false,"o":74}]},{"id":"E131","type":"usermod","ro":false,"o":75,"n":[{"id":"universe","type":"number","ro":false,"o":76,"value":1,"max":7},{"id":"channel","type":"number","ro":false,"o":77,"value":1,"min":1,"max":512,"dash":true},{"id":"patches","type":"table","ro":true,"o":78,"n":[{"id":"channel","type":"number","ro":true,"o":79,"min":1,"max":512},{"id":"variable","type":"text","ro":true,"o":80,"max":32},{"id":"max","type":"number","ro":true,"o":81},{"id":"value","type":"number","ro":true,"o":82,"max":255}]}]},{"id":"Model","type":"sysmod","ro":false,"o":83,"n":[{"id":"mSize","type":"text","ro":true,"o":84,"max":32},{"id":"saveModel","type":"button","ro":false,"o":85},{"id":"showObsolete","type":"checkbox","ro":false,"o":86,"value":0},{"id":"deleteObsolete","type":"button","ro":false,"o":87}]},{"id":"UI","type":"sysmod","ro":false,"o":88,"n":[{"id":"loops","type":"table","ro":true,"o":89,"n":[{"id":"variable","type":"text","ro":true,"o":90,"max":32},{"id":"#loops","type":"number","ro":true,"o":91,"max":999}]}]},{"id":"Instances","type":"sysmod","ro":false,"o":92,"n":[{"id":"instances","type":"table","ro":true,"o":93,"n":[{"id":"name","type":"text","ro":true,"o":94,"max":32},{"id":"link","type":"url","ro":true,"o":95},{"id":"IP","type":"text","ro":true,"o":96,"max":16},{"id":"type","type":"text","ro":true,"o":97,"max":16},{"id":"version","type":"number","ro":true,"o":98,"max":-1},{"id":"uptime","type":"number","ro":true,"o":99,"max":-1},{"id":"inson","type":"checkbox","ro":false,"o":101},{"id":"insbri","type":"range","ro":false,"o":102,"max":255,"log":true},{"id":"inspro","type":"select","ro":false,"o":103},{"id":"insfx","type":"select","ro":false,"o":104},{"id":"insdch","type":"number","ro":false,"o":106,"min":1,"max":512},{"id":"inssma","type":"select","ro":false,"o":107},{"id":"inspal","type":"select","ro":false,"o":105}]},{"id":"sma","type":"select","ro":false,"o":100,"value":0,"dash":true}]},{"id":"Modules","type":"sysmod","ro":false,"o":108,"n":[{"id":"Modules","type":"table","ro":true,"o":109,"n":[{"id":"name","type":"text","ro":true,"o":110,"max":32},{"id":"success","type":"checkbox","ro":true,"o":111},{"id":"enabled","type":"checkbox","ro":false,"o":112,"value":[true,true,true,true,true,true,true,true,true,false,false,true,true,true,true,true,true]}]}]}]
sendDataWs no ws
-initVarAndUpdate onChange init bri v:10
+initVarAndValue onChange init bri v:10
Set Brightness to 10 -> b:10 r:1
-initVarAndUpdate onChange init fx v:13
+initVarAndValue onChange init effect v:13
setEffect 13
-initVar create new select var: fx->pal
+initVar create new select var: effect->pal
setValue changed pal ->4
onChange pal <- 4
-initVar create new range var: fx->speed
+initVar create new range var: effect->speed
setValue changed speed ->128
-initVar create new range var: fx->Offset X
+initVar create new range var: effect->Offset X
setValue changed Offset X ->128
-initVar create new range var: fx->Offset Y
+initVar create new range var: effect->Offset Y
setValue changed Offset Y ->128
-initVar create new range var: fx->Legs
+initVar create new range var: effect->Legs
setValue changed Legs ->4
-parentVar {"details":{"id":"fx","type":"select","ro":false,"o":-7,"value":13,"dash":true,"fun":4,"onChange":1,"n":[{"id":"pal","type":"select","ro":false,"o":-8,"fun":5,"onChange":2,"value":4,"dash":true},{"id":"speed","type":"range","ro":false,"o":-9,"min":1,"max":255,"value":128},{"id":"Offset X","type":"range","ro":false,"o":-10,"max":255,"value":128},{"id":"Offset Y","type":"range","ro":false,"o":-11,"max":255,"value":128},{"id":"Legs","type":"range","ro":false,"o":-12,"min":1,"max":8,"value":4}]}}
-initVarAndUpdate onChange init pro v:2
-initVarAndUpdate onChange init ledsStart v:[{"x":0,"y":0,"z":0}]
+parentVar {"details":{"id":"effect","type":"select","ro":false,"o":-7,"value":13,"dash":true,"fun":4,"onChange":1,"n":[{"id":"palette","type":"select","ro":false,"o":-8,"fun":5,"onChange":2,"value":4,"dash":true},{"id":"speed","type":"range","ro":false,"o":-9,"min":1,"max":255,"value":128},{"id":"Offset X","type":"range","ro":false,"o":-10,"max":255,"value":128},{"id":"Offset Y","type":"range","ro":false,"o":-11,"max":255,"value":128},{"id":"Legs","type":"range","ro":false,"o":-12,"min":1,"max":8,"value":4}]}}
+initVarAndValue onChange init pro v:2
+initVarAndValue onChange init ledsStart v:[{"x":0,"y":0,"z":0}]
Coord3D assign 0 0 0
ledsStart 0 0 0 - 7 7 0
-initVarAndUpdate onChange init ledsEnd v:[{"x":32,"y":32,"z":0}]
+initVarAndValue onChange init ledsEnd v:[{"x":32,"y":32,"z":0}]
Coord3D assign 32 32 0
ledsEnd onChange 0 0 0 - 32 32 0
Coord3D toJson 8,8,1 -> {"x":8,"y":8,"z":1}
setValue changed ledsSize ->{"x":8,"y":8,"z":1}
-callVarChangeFun ledsSize unknown type for {"x":8,"y":8,"z":1}
+triggerEvent Change ledsSize unknown type for {"x":8,"y":8,"z":1}
setValue changed fxCount ->64
-initVarAndUpdate onChange init fixture v:0
+initVarAndValue onChange init fixture v:0
seqNrToName: 2DMatrix3232.json 9640
-fixture onChange send ws done {"pview":{"file":"/2DMatrix3232.json"}}
+fixture onChange send ws done {"preview":{"file":"/2DMatrix3232.json"}}
Coord3D toJson 8,8,1 -> {"x":8,"y":8,"z":1}
setValue changed fixSize ->{"x":8,"y":8,"z":1}
-callVarChangeFun fixSize unknown type for {"x":8,"y":8,"z":1}
+triggerEvent Change fixSize unknown type for {"x":8,"y":8,"z":1}
setValue changed fixCount ->64
-initVarAndUpdate onChange init fps v:60
-initVarAndUpdate onChange init fixtureGen v:0
+initVarAndValue onChange init fps v:60
+initVarAndValue onChange init fixtureGen v:0
initVar create new number var: fixtureGen->ledCount
setValue changed ledCount ->64
parentVar {"details":{"id":"fixtureGen","type":"select","ro":false,"o":-24,"value":0,"fun":16,"onChange":8,"n":[{"id":"ledCount","type":"number","ro":false,"o":-25,"min":1,"max":4096,"value":64}]}}
@@ -45,7 +45,7 @@ setValue changed reset 0 ->12
setValue changed reset 1 ->12
setValue changed restartReason ->3
version 24012822 Jan 28 2024 22:33:18 22:33:18
-initVarAndUpdate onChange init pin19 v:1
+initVarAndValue onChange init pin19 v:1
setValue changed log ->WIP
setValue changed queueLength ->64
initVarAndUpdate onChange init universe v:1
@@ -53,8 +53,8 @@ initVarAndUpdate onChange init dch v:1
initVarAndUpdate onChange init showObsolete v:0
dash on 1 found
dash bri 10 found
-dash pro 2 found
-dash fx 13 found
+dash projection 2 found
+dash effect 13 found
dash pal 4 found
dash dch 1 found
dash sma 0 found
@@ -72,11 +72,11 @@ StarJson found all what it was looking for 1030 >= 6
projectAndMap P:32x32x1 V:15x15x1 and P:1024 V:225
Coord3D toJson 15,15,1 -> {"x":15,"y":15,"z":1}
setValue changed ledsSize ->{"x":15,"y":15,"z":1}
-callVarChangeFun ledsSize unknown type for {"x":15,"y":15,"z":1}
+triggerEvent Change ledsSize unknown type for {"x":15,"y":15,"z":1}
setValue changed fxCount ->225
Coord3D toJson 32,32,1 -> {"x":32,"y":32,"z":1}
setValue changed fixSize ->{"x":32,"y":32,"z":1}
-callVarChangeFun fixSize unknown type for {"x":32,"y":32,"z":1}
+triggerEvent Change fixSize unknown type for {"x":32,"y":32,"z":1}
setValue changed fixCount ->1024
StarJson destructing
FastLED.addLeds new 16: 0-1024
@@ -101,15 +101,15 @@ sendDataWs client full or not connected client: 1 ...126 q:0 l:12 s:1 (#:1)
αWS Client disconnected client: 1 ...0 q:1 l:0 s:2 (#:0)
αWS client connected client: 2 ...126 q:0 l:0 s:1 (#:1)
αWS event data client: 2 ...126 q:0 l:15 s:1 (#:1)
-αWS_EVT_DATA json {"pview":{"label":"Preview","comment":"Shows the fixture"}}
+αWS_EVT_DATA json {"preview":{"label":"Preview","comment":"Shows the fixture"}}
αWS_EVT_DATA info 48 / 3072 (1%) (1 0 2)
αWS event data client: 2 ...126 q:0 l:15 s:1 (#:1)
-αWS_EVT_DATA json {"on":{"label":"On/Off"},"brightness":{"label":"Brightness"},"pro":{"label":"Projection","comment":"How to project fx to fixture","options":["None","Random","Distance from point","Distance from center","Mirror","Reverse","Multiply","Kaleidoscope","Fun"]},"ledsStart":{"label":"Start"},"ledsEnd":{"label":"End"},"ledsSize":{"label":"Size"},"fxCount":{"label":"Count"}}
+αWS_EVT_DATA json {"on":{"label":"On/Off"},"brightness":{"label":"Brightness"},"projection":{"label":"Projection","comment":"How to project fx to fixture","options":["None","Random","Distance from point","Distance from center","Mirror","Reverse","Multiply","Kaleidoscope","Fun"]},"start":{"label":"Start"},"end":{"label":"End"},"size":{"label":"Size"},"fxCount":{"label":"Count"}}
αWS_EVT_DATA info 400 / 3072 (13%) (7 0 3)
sendDataWs client full or not connected client: 2 ...126 q:0 l:15 s:1 (#:1)
αWS event data client: 2 ...126 q:0 l:16 s:1 (#:1)
αseqNrToName: 2DMatrix3232.json 9640
-αWS_EVT_DATA json {"ledsTbl":{"label":"Effects","comment":"List of effects (WIP)","value":[[2,[{"x":0,"y":0,"z":0}],[{"x":32,"y":32,"z":0}],{"x":15,"y":15,"z":1},225]]},"pal":{"label":"Palette","comment":"Colors","options":["CloudColors","LavaColors","OceanColors","ForestColors","RainbowColors","RainbowStripeColors","PartyColors","HeatColors"]},"fx":{"label":"Effect","comment":"Effect to show","options":["Solid 1D","Rainbow 1D","Rainbow with glitter 1D","Sinelon 1D","Running 1D","Confetti 1D","Beats per minute 1D","Juggle 1D","Ripples 3D","SphereMove 3D","Frizzles 2D","Lines 2D","DistortionWaves 2D","Octopus 2D","Lissajous 2D","Bouncing Balls 1D","RingRandomFlow 1D","GEQ 2D","AudioRings 1D","FreqMatrix 1D"]},"fixture":{"comment":"Fixture to display effect on","options":["2DMatrix3232.json","3DCube888.json","3DSideCube205.json"]},"pview":{"file":"/2DMatrix3232.json"},"fixSize":{"label":"Size"},"fixCount":{"label":"Count","comment":"Max 4096"},"fps":{"comment":"Frames per second"},"realFps":{"comment":"f(1024 leds)"}}
+αWS_EVT_DATA json {"layers":{"label":"Effects","comment":"List of effects (WIP)","value":[[2,[{"x":0,"y":0,"z":0}],[{"x":32,"y":32,"z":0}],{"x":15,"y":15,"z":1},225]]},"palette":{"label":"Palette","comment":"Colors","options":["CloudColors","LavaColors","OceanColors","ForestColors","RainbowColors","RainbowStripeColors","PartyColors","HeatColors"]},"effect":{"label":"Effect","comment":"Effect to show","options":["Solid 1D","Rainbow 1D","Rainbow with glitter 1D","Sinelon 1D","Running 1D","Confetti 1D","Beats per minute 1D","Juggle 1D","Ripples 3D","SphereMove 3D","Frizzles 2D","Lines 2D","DistortionWaves 2D","Octopus 2D","Lissajous 2D","Bouncing Balls 1D","RingRandomFlow 1D","GEQ 2D","AudioRings 1D","FreqMatrix 1D"]},"fixture":{"comment":"Fixture to display effect on","options":["2DMatrix3232.json","3DCube888.json","3DSideCube205.json"]},"preview":{"file":"/2DMatrix3232.json"},"size":{"label":"Size"},"count":{"label":"Count","comment":"Max 4096"},"fps":{"comment":"Frames per second"},"realFps":{"comment":"f(1024 leds)"}}
αWS_EVT_DATA info 1283 / 3072 (41%) (9 0 6)
sendDataWs client full or not connected client: 2 ...126 q:0 l:16 s:1 (#:1)
αWS event data client: 2 ...126 q:0 l:16 s:1 (#:1)
@@ -126,7 +126,7 @@ sendDataWs client full or not connected client: 2 ...126 q:0 l:16 s:1 (#:1)
αWS_EVT_DATA json {"pin":{"label":"Pin"},"owner":{"label":"Owner"},"details":{"label":"Details"},"pins":{"label":"Pins","comment":"List of pins","value":[[16,"Leds","0-1023"]]},"board":{"label":"Board layout","comment":"WIP"}}
αWS_EVT_DATA info 284 / 3072 (9%) (5 0 4)
αWS event data client: 2 ...126 q:0 l:16 s:1 (#:1)
-αWS_EVT_DATA json {"output":{"label":"Output","comment":"System log to Serial or Net print (WIP)","options":["No","Serial","UI","192.168.8.126"]},"log":{"comment":"Show the printed log"}}
+αWS_EVT_DATA json {"output":{"label":"Output","comment":"System log to Serial or Net print (WIP)","options":["No","Serial","UI","192.168.1.126"]},"log":{"comment":"Show the printed log"}}
αWS_EVT_DATA info 174 / 3072 (5%) (2 0 3)
sendDataWs client full or not connected client: 2 ...126 q:0 l:16 s:1 (#:1)
αWS event data client: 2 ...126 q:0 l:16 s:1 (#:1)
@@ -140,13 +140,13 @@ instances updateNode 132
αWS_EVT_DATA json {"password":{"label":"Password"},"connect":{"comment":"Force reconnect (loose current connection)"},"nwstatus":{"label":"Status"},"rssi":{"label":"Wifi signal"}}
αWS_EVT_DATA info 128 / 3072 (4%) (4 0 2)
αWS event data client: 2 ...126 q:0 l:20 s:1 (#:1)
-αWS_EVT_DATA json {"ddpInst":{"label":"Instance","comment":"Instance to send data","options":[[0,"no sync"],[132,"192.168.8.132 StarBaseRS"]]}}
+αWS_EVT_DATA json {"instance":{"label":"Instance","comment":"Instance to send data","options":[[0,"no sync"],[132,"192.168.1.132 StarBaseRS"]]}}
αWS_EVT_DATA info 184 / 3072 (5%) (1 0 4)
αWS event data client: 2 ...126 q:0 l:20 s:1 (#:1)
-αWS_EVT_DATA json {"artInst":{"label":"Instance","comment":"Instance to send data","options":[[0,"no sync"],[132,"192.168.8.132 StarBaseRS"]]}}
+αWS_EVT_DATA json {"artInst":{"label":"Instance","comment":"Instance to send data","options":[[0,"no sync"],[132,"192.168.1.132 StarBaseRS"]]}}
αWS_EVT_DATA info 184 / 3072 (5%) (1 0 4)
αWS event data client: 2 ...126 q:0 l:20 s:1 (#:1)
-αWS_EVT_DATA json {"universe":{"label":"DMX Universe"},"channel":{"label":"DMX Channel","comment":"First channel"},"channel":{"label":"Channel"},"variable":{"label":"Variable"},"max":{"label":"Max"},"value":{"label":"Value"},"watches":{"label":"Vars to watch","comment":"List of instances","value":[[1,"brightness",255,0],[2,"fx",20,0],[3,"pal",8,0]]}}
+αWS_EVT_DATA json {"universe":{"label":"DMX Universe"},"channel":{"label":"DMX Channel","comment":"First channel"},"channel":{"label":"Channel"},"variable":{"label":"Variable"},"max":{"label":"Max"},"value":{"label":"Value"},"patches":{"label":"Vars to watch","comment":"List of instances","value":[[1,"brightness",255,0],[2,"fx",20,0],[3,"pal",8,0]]}}
αWS_EVT_DATA info 523 / 3072 (17%) (7 0 4)
SysModWeb clientsChanged
αWS event data client: 2 ...126 q:0 l:23 s:1 (#:1)
@@ -157,7 +157,7 @@ setValue var nr[0] value null not array, creating
αWS_EVT_DATA json {"variable":{"label":"Name"},"#loops":{"label":"Loops p s"}}
αWS_EVT_DATA info 64 / 3072 (2%) (2 0 2)
sαWS event data client: 2 ...126 q:0 l:25 s:1 (#:1)
-αWS_EVT_DATA json {"loops":{"label":"Variable loops","comment":"Loops initiated by a variable","value":[["pview",4],["board",0]]}}
+αWS_EVT_DATA json {"vlTbl":{"label":"Variable loops","comment":"Loops initiated by a variable","value":[["preview",4],["board",0]]}}
αWS_EVT_DATA info 172 / 3072 (5%) (1 0 4)
etValue var ip[0] value null not array, creating
αWS event data client: 2 ...126 q:0 l:25 s:1 (#:1)
@@ -165,7 +165,7 @@ etValue var ip[0] value null not array, creating
αWS_EVT_DATA info 464 / 3072 (15%) (9 0 3)
setValue var full[0] value null not array, creating
αWS event data client: 2 ...126 q:0 l:27 s:1 (#:1)
-αWS_EVT_DATA json {"insfx":{"label":"Effect","comment":"Effect to show","options":["Solid 1D","Rainbow 1D","Rainbow with glitter 1D","Sinelon 1D","Running 1D","Confetti 1D","Beats per minute 1D","Juggle 1D","Ripples 3D","SphereMove 3D","Frizzles 2D","Lines 2D","DistortionWaves 2D","Octopus 2D","Lissajous 2D","Bouncing Balls 1D","RingRandomFlow 1D","GEQ 2D","AudioRings 1D","FreqMatrix 1D"]},"inspal":{"label":"Palette","comment":"Colors","options":["CloudColors","LavaColors","OceanColors","ForestColors","RainbowColors","RainbowStripeColors","PartyColors","HeatColors"]},"insdch":{"label":"DMX Channel","comment":"First channel"},"inssma":{"label":"Sync Master","comment":"Instance to sync from","options":[[0,"no sync"],[132,"192.168.8.132 StarBaseRS"]]},"instances":{"label":"Instances","comment":"List of instances","value":[["StarBaseRS","http://192.168.8.132","192.168.8.132","StarBase",24012818,8151,1,141,0,19,-1,1,0]]},"sma":{"label":"Sync Master","comment":"Instance to sync from","options":[[0,"no sync"],[132,"192.168.8.132 StarBaseRS"]]}}
+αWS_EVT_DATA json {"insfx":{"label":"Effect","comment":"Effect to show","options":["Solid 1D","Rainbow 1D","Rainbow with glitter 1D","Sinelon 1D","Running 1D","Confetti 1D","Beats per minute 1D","Juggle 1D","Ripples 3D","SphereMove 3D","Frizzles 2D","Lines 2D","DistortionWaves 2D","Octopus 2D","Lissajous 2D","Bouncing Balls 1D","RingRandomFlow 1D","GEQ 2D","AudioRings 1D","FreqMatrix 1D"]},"inspal":{"label":"Palette","comment":"Colors","options":["CloudColors","LavaColors","OceanColors","ForestColors","RainbowColors","RainbowStripeColors","PartyColors","HeatColors"]},"insdch":{"label":"DMX Channel","comment":"First channel"},"inssma":{"label":"Sync Master","comment":"Instance to sync from","options":[[0,"no sync"],[132,"192.168.1.132 StarBaseRS"]]},"instances":{"label":"Instances","comment":"List of instances","value":[["StarBaseRS","http://192.168.1.132","192.168.1.132","StarBase",24012818,8151,1,141,0,19,-1,1,0]]},"sma":{"label":"Sync Master","comment":"Instance to sync from","options":[[0,"no sync"],[132,"192.168.1.132 StarBaseRS"]]}}
αWS_EVT_DATA info 1301 / 3072 (42%) (6 0 4)
setValue var status[0] value null not array, creating
αWS event data client: 2 ...126 q:0 l:28 s:1 (#:1)
diff --git a/package-lock.json b/package-lock.json
index f102a3c..feb340c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,13 +7,16 @@
"": {
"name": "StarBase",
"version": "0.0.0",
- "license": "ISC",
+ "license": "GPL-3.0-only",
"dependencies": {
"clean-css": "^4.2.3",
"html-minifier-terser": "^5.1.1",
"inliner": "^1.13.1",
"nodemon": "^2.0.20",
"zlib": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=20.0.0"
}
},
"node_modules/abbrev": {
diff --git a/package.json b/package.json
index 65f2ed2..0d4ad88 100644
--- a/package.json
+++ b/package.json
@@ -15,8 +15,8 @@
"type": "git",
"url": "git+https://github.com/ewowi/StarBase.git"
},
- "author": "",
- "license": "ISC",
+ "author": "MoonModules",
+ "license": "GPL-3.0-only",
"bugs": {
"url": "https://github.com/ewowi/StarBase/issues"
},
@@ -27,5 +27,8 @@
"inliner": "^1.13.1",
"nodemon": "^2.0.20",
"zlib": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=20.0.0"
}
}
diff --git a/platformio.ini b/platformio.ini
index 3e9319c..6c05bb6 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -77,7 +77,7 @@ lib_deps =
[STARBASE_USERMOD_LIVE]
build_flags =
-D STARBASE_USERMOD_LIVE
- -D EXTPRINTF=ppf
+ -D EXTPRINTF=ppf ;redirect Live Script prints to StarBase print
lib_deps =
https://github.com/ewowi/ESPLiveScript.git#main ;1.2.0. ewowi repo adds some proposed PR's and makes sure we don't have unexpected updates
@@ -85,7 +85,7 @@ lib_deps =
build_flags =
-D APP=StarBase
-D PIOENV=$PIOENV
- -D VERSION=24110711 ; Date and time (GMT!), update at every commit!!
+ -D VERSION=24112412 ; Date and time (GMT!), update at every commit!!
-D LFS_THREADSAFE ; enables use of semaphores in LittleFS driver
-D STARBASE_DEVMODE
-mtext-section-literals ;otherwise [UserModLive::setup()]+0xa17): dangerous relocation: l32r: literal target out of range (try using text-section-literals)
@@ -100,7 +100,7 @@ build_flags =
${STARBASE_USERMOD_LIVE.build_flags} ;+222.204 bytes 11.7%
lib_deps =
${ESPAsyncWebServer.lib_deps} ;alternatively PsychicHttp
- https://github.com/bblanchon/ArduinoJson.git @ 7.2.0 ;force latest
+ https://github.com/bblanchon/ArduinoJson.git @ 7.2.1 ;force latest
; https://github.com/Jason2866/ESP32_Show_Info.git
;optional:
${STARBASE_USERMOD_E131.lib_deps}
diff --git a/src/App/AppModDemo.h b/src/App/AppModDemo.h
index a398d28..40e730b 100644
--- a/src/App/AppModDemo.h
+++ b/src/App/AppModDemo.h
@@ -64,6 +64,8 @@ class AppModDemo: public SysModule {
ui->initSlider(parentVar, "frequency", &frequency);
+ ui->initCoord3D(parentVar, "coordinate", Coord3D());
+
}
void loop1s() {
diff --git a/src/Sys/SysModFiles.cpp b/src/Sys/SysModFiles.cpp
index ebd7bc5..ecf2cac 100644
--- a/src/Sys/SysModFiles.cpp
+++ b/src/Sys/SysModFiles.cpp
@@ -28,7 +28,7 @@ SysModFiles::SysModFiles() :SysModule("Files") {
void SysModFiles::setup() {
SysModule::setup();
- Variable parentVar = ui->initSysMod(Variable(), name, 2101);
+ const Variable parentVar = ui->initSysMod(Variable(), name, 2101);
Variable tableVar = ui->initTable(parentVar, "files", nullptr, false, [this](EventArguments) { switch (eventType) {
case onUI:
diff --git a/src/Sys/SysModFiles.h b/src/Sys/SysModFiles.h
index 58d5051..3487208 100644
--- a/src/Sys/SysModFiles.h
+++ b/src/Sys/SysModFiles.h
@@ -25,9 +25,9 @@ class SysModFiles: public SysModule {
std::vector fileTimes;
SysModFiles();
- void setup();
- void loop20ms();
- void loop10s();
+ void setup() override;
+ void loop20ms() override;
+ void loop10s() override;
bool remove(const char * path);
diff --git a/src/Sys/SysModInstances.h b/src/Sys/SysModInstances.h
index 659f4bd..cc71eb5 100644
--- a/src/Sys/SysModInstances.h
+++ b/src/Sys/SysModInstances.h
@@ -110,10 +110,10 @@ class SysModInstances:public SysModule {
SysModInstances() :SysModule("Instances") {
};
- void setup() {
+ void setup() override {
SysModule::setup();
- Variable parentVar = ui->initSysMod(Variable(), name, 3000);
+ const Variable parentVar = ui->initSysMod(Variable(), name, 3000);
Variable tableVar = ui->initTable(parentVar, "instances", nullptr, true);
@@ -232,7 +232,7 @@ class SysModInstances:public SysModule {
Variable insVariable = mdl->initVar(tableVar, columnVarID, variable.var["type"], false, [this](Variable insVariable, uint8_t rowNr, uint8_t eventType) {
//extract the variable from insVariable.id()
char pid[32]; strlcpy(pid, insVariable.id() + 3, sizeof(pid)); //+3 : remove ins
- char * id = strtok(pid, "_"); if (id != NULL ) {strlcpy(pid, id, sizeof(pid)); id = strtok(NULL, "_");} //split pid and id
+ char * id = strtok(pid, "_"); if (id != nullptr ) {strlcpy(pid, id, sizeof(pid)); id = strtok(nullptr, "_");} //split pid and id
Variable variable = Variable(mdl->findVar(pid, id));
switch (eventType) { //varEvent
case onSetValue:
@@ -274,7 +274,7 @@ class SysModInstances:public SysModule {
// insVar["fun"] = var["fun"]; //copy the onUI
}
- });
+ }); //findVars
if (sizeof(UDPWLEDMessage) != 44) {
ppf("dev Size of UDP message is not 44: %d\n", sizeof(UDPWLEDMessage));
@@ -291,7 +291,7 @@ class SysModInstances:public SysModule {
ppf("UDP message sizes WLED:%d Star:%d WLED-Sync:%d\n", sizeof(UDPWLEDMessage), sizeof(UDPStarMessage), sizeof(UDPWLEDSyncMessage));
}
- void onOffChanged() {
+ void onOffChanged() override {
if (mdls->isConnected && isEnabled) {
udpConnected = notifierUdp.begin(notifierUDPPort); //sync
udp2Connected = instanceUDP.begin(instanceUDPPort); //instances
@@ -307,7 +307,7 @@ class SysModInstances:public SysModule {
}
}
- void loop20ms() { //20 ms instead of loop() tripples the loops/sec!
+ void loop20ms() override { //20 ms instead of loop() tripples the loops/sec!
handleNotifications();
@@ -319,7 +319,7 @@ class SysModInstances:public SysModule {
}
- void loop10s() {
+ void loop10s() override {
sendSysInfoUDP(); //temporary every second
}
@@ -331,10 +331,10 @@ class SysModInstances:public SysModule {
char * token = strtok(copy, "-"); //before minus
//check if group
- if (token != NULL) {
+ if (token != nullptr) {
// ppf("groupOfName 1:%s 2:%s 3:%s 4:%s 5:%s\n",name, strnstr(name, "-", 32), name, strtok(name, "-"), name?name:"X");
- token = strtok(NULL, "-"); //after -
- if (token != NULL) {
+ token = strtok(nullptr, "-"); //after -
+ if (token != nullptr) {
// ppf("groupOfName g:%s i:%s\n", copy, token);
if (group) strlcpy(group, copy, sizeof(copy)); //group has same size!
return true;
@@ -778,9 +778,9 @@ class SysModInstances:public SysModule {
char pid[32];
strlcpy(pid, pair.key().c_str(), sizeof(pid));
char * id = strtok(pid, ".");
- if (id != NULL ) {
+ if (id != nullptr ) {
strlcpy(pid, id, sizeof(pid)); //copy the id part
- id = strtok(NULL, "."); //the rest after .
+ id = strtok(nullptr, "."); //the rest after .
}
Variable(mdl->findVar(pid, id)).setValueJV(pair.value());
diff --git a/src/Sys/SysModModel.cpp b/src/Sys/SysModModel.cpp
index f264585..facb315 100644
--- a/src/Sys/SysModModel.cpp
+++ b/src/Sys/SysModModel.cpp
@@ -509,7 +509,7 @@ SysModModel::SysModModel() :SysModule("Model") {
void SysModModel::setup() {
SysModule::setup();
- Variable parentVar = ui->initSysMod(Variable(), name, 4303);
+ const Variable parentVar = ui->initSysMod(Variable(), name, 4303);
parentVar.var["s"] = true; //setup
ui->initButton(parentVar, "saveModel", false, [this](EventArguments) { switch (eventType) {
@@ -524,7 +524,7 @@ void SysModModel::setup() {
#ifdef STARBASE_DEVMODE
- ui->initCheckBox(parentVar, "showObsolete", false, false, [this](EventArguments) { switch (eventType) {
+ ui->initCheckBox(parentVar, "showObsolete", (bool3State)false, false, [this](EventArguments) { switch (eventType) {
case onUI:
variable.setComment("Show in UI (refresh)");
return true;
@@ -576,9 +576,9 @@ void SysModModel::loop20ms() {
}
void SysModModel::loop1s() {
- mdl->walkThroughModel([](Variable variable) {
- variable.triggerEvent(onLoop1s);
- return false; //don't stop
+ mdl->walkThroughModel([](JsonObject parentVar, JsonObject var) {
+ Variable(var).triggerEvent(onLoop1s);
+ return JsonObject(); //don't stop
});
}
@@ -625,12 +625,12 @@ void SysModModel::cleanUpModel(Variable parent, bool oPos, bool ro) {
//recursive call
if (!variable.children().isNull())
- cleanUpModel(var, oPos, ro);
+ cleanUpModel(variable, oPos, ro);
}
}
}
-Variable SysModModel::initVar(Variable parent, const char * id, const char * type, bool readOnly, VarEvent varEvent) {
+Variable SysModModel::initVar(Variable parent, const char * id, const char * type, bool readOnly, const VarEvent &varEvent) {
const char * parentId = parent.var["id"];
if (!parentId) parentId = "m"; //m=module
JsonObject var = mdl->findVar(parentId, id);
@@ -689,11 +689,11 @@ Variable SysModModel::initVar(Variable parent, const char * id, const char * typ
var["fun"] = mdl->varEvents.size()-1;
// }
- if (varEvent(var, UINT8_MAX, onLoop)) { //test run if it supports loop
+ if (varEvent(variable, UINT8_MAX, onLoop)) { //test run if it supports loop
//no need to check if already in...
VarLoop loop;
loop.loopFun = varEvent;
- loop.var = var;
+ loop.variable = variable;
ui->loopFunctions.push_back(loop);
var["loopFun"] = ui->loopFunctions.size()-1;
@@ -707,32 +707,22 @@ Variable SysModModel::initVar(Variable parent, const char * id, const char * typ
return variable;
}
-bool SysModModel::walkThroughModel(std::function fun, JsonObject parent) {
- JsonArray root;
- if (parent.isNull())
- root = model->as();
- else
- root = parent["n"];
-
- for (JsonObject var : root) {
+JsonObject SysModModel::walkThroughModel(std::function fun, JsonObject parentVar) {
+ for (JsonObject var : parentVar.isNull()?model->as(): parentVar["n"]) {
// ppf(" %s", var["id"].as());
- if (fun(Variable(var))) return true;
+ JsonObject foundVar = fun(parentVar, var);
+ if (!foundVar.isNull()) return foundVar;
if (!var["n"].isNull()) {
- if (walkThroughModel(fun, var)) return true;
+ foundVar = walkThroughModel(fun, var);
+ if (!foundVar.isNull()) return foundVar;
}
}
- return false; //don't stop
+ return JsonObject(); //don't stop
}
-JsonObject SysModModel::findVar(const char * pid, const char * id, JsonObject parent) {
- JsonArray root;
- if (parent.isNull())
- root = model->as();
- else
- root = parent["n"];
-
- for (JsonObject var : root) {
+JsonObject SysModModel::findVar(const char * pid, const char * id, JsonObject parentVar) {
+ for (JsonObject var : parentVar.isNull()?model->as():parentVar["n"]) {
if (var["pid"] == pid && var["id"] == id) { //(!pid && var["pid"] == pid) &&
// Serial.printf("findVar found %s.%s!!\n", pid, id);
return var;
@@ -749,18 +739,13 @@ JsonObject SysModModel::findVar(const char * pid, const char * id, JsonObject pa
return JsonObject();
}
-void SysModModel::findVars(const char * property, bool value, FindFun fun, JsonArray parent) {
- JsonArray root;
+void SysModModel::findVars(const char * property, bool value, FindFun fun, JsonObject parentVar) {
// print ->print("findVar %s %s\n", id, parent.isNull()?"root":"n");
- if (parent.isNull())
- root = model->as();
- else
- root = parent;
- for (JsonObject var : root) {
+ for (JsonObject var : parentVar.isNull()?model->as():parentVar["n"]) {
if (var[property] == value)
fun(Variable(var));
if (!var["n"].isNull())
- findVars(property, value, fun, var["n"]);
+ findVars(property, value, fun, var);
}
}
\ No newline at end of file
diff --git a/src/Sys/SysModModel.h b/src/Sys/SysModModel.h
index 173d749..fea8703 100644
--- a/src/Sys/SysModModel.h
+++ b/src/Sys/SysModModel.h
@@ -39,56 +39,56 @@ struct Coord3D {
// return x != rhs.x || y != rhs.y || z != rhs.z;
return !(*this==rhs);
}
- bool operator==(Coord3D rhs) {
+ bool operator==(const Coord3D rhs) const {
return x == rhs.x && y == rhs.y && z == rhs.z;
}
- bool operator>=(Coord3D rhs) {
+ bool operator>=(const Coord3D rhs) const {
return x >= rhs.x && y >= rhs.y && z >= rhs.z;
}
- bool operator<=(Coord3D rhs) {
+ bool operator<=(const Coord3D rhs) const {
return x <= rhs.x && y <= rhs.y && z <= rhs.z;
}
- bool operator<(Coord3D rhs) {
+ bool operator<(const Coord3D rhs) const {
return x < rhs.x && y < rhs.y && z < rhs.z;
}
- bool operator>=(int rhs) {
+ bool operator>=(const int rhs) const {
return x >= rhs && y >= rhs && z >= rhs;
}
//assignments
- Coord3D operator=(Coord3D rhs) {
+ Coord3D operator=(const Coord3D rhs) {
// ppf("Coord3D assign %d,%d,%d\n", rhs.x, rhs.y, rhs.z);
x = rhs.x;
y = rhs.y;
z = rhs.z;
return *this;
}
- Coord3D operator+=(Coord3D rhs) {
+ Coord3D operator+=(const Coord3D rhs) {
x += rhs.x;
y += rhs.y;
z += rhs.z;
return *this;
}
- Coord3D operator-=(Coord3D rhs) {
+ Coord3D operator-=(const Coord3D rhs) {
x -= rhs.x;
y -= rhs.y;
z -= rhs.z;
return *this;
}
- Coord3D operator*=(Coord3D rhs) {
+ Coord3D operator*=(const Coord3D rhs) {
x *= rhs.x;
y *= rhs.y;
z *= rhs.z;
return *this;
}
- Coord3D operator/=(Coord3D rhs) {
+ Coord3D operator/=(const Coord3D rhs) {
if (rhs.x) x /= rhs.x;
if (rhs.y) y /= rhs.y;
if (rhs.z) z /= rhs.z;
return *this;
}
//Minus / delta (abs)
- Coord3D operator-(Coord3D rhs) {
+ Coord3D operator-(const Coord3D rhs) const {
Coord3D result;
// result.x = x > rhs.x? x - rhs.x : rhs.x - x;
// result.y = y > rhs.y? y - rhs.y : rhs.y - y;
@@ -98,28 +98,28 @@ struct Coord3D {
result.z = z - rhs.z;
return result;
}
- Coord3D operator+(Coord3D rhs) {
+ Coord3D operator+(const Coord3D rhs) const {
return Coord3D{x + rhs.x, y + rhs.y, z + rhs.z};
}
- Coord3D operator*(Coord3D rhs) {
+ Coord3D operator*(const Coord3D rhs) const {
return Coord3D{x * rhs.x, y * rhs.y, z * rhs.z};
}
- Coord3D operator/(Coord3D rhs) {
+ Coord3D operator/(const Coord3D rhs) const {
return Coord3D{x / rhs.x, y / rhs.y, z / rhs.z};
}
- Coord3D operator%(Coord3D rhs) {
+ Coord3D operator%(const Coord3D rhs) const {
return Coord3D{x % rhs.x, y % rhs.y, z % rhs.z};
}
- Coord3D minimum(Coord3D rhs) {
+ Coord3D minimum(const Coord3D rhs) const {
return Coord3D{min(x, rhs.x), min(y, rhs.y), min(z, rhs.z)};
}
- Coord3D maximum(Coord3D rhs) {
+ Coord3D maximum(const Coord3D rhs) const {
return Coord3D{max(x, rhs.x), max(y, rhs.y), max(z, rhs.z)};
}
- Coord3D operator*(uint8_t rhs) {
+ Coord3D operator*(const uint8_t rhs) const {
return Coord3D{x * rhs, y * rhs, z * rhs};
}
- Coord3D operator/(uint8_t rhs) {
+ Coord3D operator/(const uint8_t rhs) const {
return Coord3D{x / rhs, y / rhs, z / rhs};
}
//move the coordinate one step closer to the goal, if difference in coordinates (used in GenFix)
@@ -129,15 +129,15 @@ struct Coord3D {
if (z != goal.z) z += (z= rhs.x || y >= rhs.y || z >= rhs.z;
}
};
@@ -209,31 +209,31 @@ class Variable {
JsonObject var;
Variable() {this->var = JsonObject();} //undefined variable
- Variable(JsonObject var) {this->var = var;}
+ explicit Variable(JsonObject var) {this->var = var;}
//core methods
- const char *pid() {return var["pid"];}
- const char *id() {return var["id"];}
+ const char *pid() const {return var["pid"];}
+ const char *id() const {return var["id"];}
- JsonVariant value() {return var["value"];}
- JsonVariant value(uint8_t rowNr) {return var["value"][rowNr];}
+ JsonVariant value() const {return var["value"];}
+ JsonVariant value(uint8_t rowNr) const {return var["value"][rowNr];}
String valueString(uint8_t rowNr = UINT8_MAX);
- int order() {return var["o"];}
- void order(int value) {var["o"] = value;}
+ int order() const {return var["o"];}
+ void order(int value) const {var["o"] = value;}
- bool readOnly() {return var["ro"];}
+ bool readOnly() const {return var["ro"];}
void readOnly(bool value) {var["ro"] = value;}
- JsonArray children() {return var["n"];}
+ JsonArray children() const {return var["n"];}
- void defaultOrder(int value) {if (order() > -1000) order(- value); } //set default order (in range >=1000). Don't use auto generated order as order can be changed in the ui (WIP)
+ void defaultOrder(int value) const {if (order() > -1000) order(- value); } //set default order (in range >=1000). Don't use auto generated order as order can be changed in the ui (WIP)
//recursively remove all value[rowNr] from children of var
void removeValuesForRow(uint8_t rowNr);
- JsonArray valArray() {if (var["value"].is()) return var["value"]; else return JsonArray(); }
+ JsonArray valArray() const {if (var["value"].is()) return var["value"]; else return JsonArray(); }
//if variable is a table, loop through its rows
void rows(std::function fun = nullptr);
@@ -354,12 +354,12 @@ class SysModModel: public SysModule {
std::vector varEvents;
SysModModel();
- void setup();
- void loop20ms();
- void loop1s();
+ void setup() override;
+ void loop20ms() override;
+ void loop1s() override;
//adds a variable to the model
- Variable initVar(Variable parent, const char * id, const char * type, bool readOnly = true, VarEvent varEvent = nullptr);
+ Variable initVar(Variable parent, const char * id, const char * type, bool readOnly = true, const VarEvent &varEvent = nullptr);
//scan all vars in the model and remove vars where var["o"] is negative or positive, if ro then remove ro values
void cleanUpModel(Variable parent = Variable(), bool oPos = true, bool ro = false);
@@ -388,9 +388,9 @@ class SysModModel: public SysModule {
}
//returns the var defined by id (parent to recursively call findVar)
- bool walkThroughModel(std::function fun, JsonObject parent = JsonObject());
- JsonObject findVar(const char * pid, const char * id, JsonObject parent = JsonObject());
- void findVars(const char * id, bool value, FindFun fun, JsonArray parent = JsonArray());
+ JsonObject walkThroughModel(std::function fun, JsonObject parentVar = JsonObject());
+ JsonObject findVar(const char * pid, const char * id, JsonObject parentVar = JsonObject());
+ void findVars(const char * id, bool value, FindFun fun, JsonObject parentVar = JsonObject());
uint8_t linearToLogarithm(uint8_t value, uint8_t minp = 0, uint8_t maxp = UINT8_MAX) {
if (value == 0) return 0;
diff --git a/src/Sys/SysModNetwork.cpp b/src/Sys/SysModNetwork.cpp
index 6fe25a7..d29c344 100644
--- a/src/Sys/SysModNetwork.cpp
+++ b/src/Sys/SysModNetwork.cpp
@@ -28,14 +28,14 @@ SysModNetwork::SysModNetwork() :SysModule("Network") {};
void SysModNetwork::setup() {
SysModule::setup();
- Variable parentVar = ui->initSysMod(Variable(), name, 3502);
+ const Variable parentVar = ui->initSysMod(Variable(), name, 3502);
parentVar.var["s"] = true; //setup
// Variable tableVar = ui->initTable(parentVar, "wfTbl", nullptr, false, [this](EventArguments) { //varEvent ro false: create and delete row possible
// variable.setComment("List of defined and available Wifi APs");
// });
- Variable currentVar = ui->initCheckBox(parentVar, "wiFi", true, false, [this](EventArguments) { switch (eventType) {
+ Variable currentVar = ui->initCheckBox(parentVar, "wiFi", (bool3State)true, false, [this](EventArguments) { switch (eventType) {
case onChange:
if (variable.value().as())
initWiFiConnection();
@@ -81,7 +81,7 @@ void SysModNetwork::setup() {
#ifdef STARBASE_ETHERNET
- currentVar = ui->initCheckBox(parentVar, "ethernet", false, false, [this](EventArguments) { switch (eventType) {
+ currentVar = ui->initCheckBox(parentVar, "ethernet", (bool3State)false, false, [this](EventArguments) { switch (eventType) {
case onLoop1s:
//initEthernet not done in onChange as initEthernet needs a bit of a delay
if (!ethActive && variable.getValue().as())
@@ -102,31 +102,31 @@ void SysModNetwork::setup() {
mdl->setValueRowNr = rowNr;
if (variable.value() == 0) {//manual
- ui->initNumber(variable.var, "address", (uint16_t)0, 0, 255, false, [this](EventArguments) { switch (eventType) {
+ ui->initNumber(variable, "address", (uint16_t)0, 0, 255, false, [this](EventArguments) { switch (eventType) {
case onChange:
ethActive = false;
return true;
default: return false;
}});
- ui->initPin(variable.var, "power", 14, false, [this](EventArguments) { switch (eventType) {
+ ui->initPin(variable, "power", 14, false, [this](EventArguments) { switch (eventType) {
case onChange:
ethActive = false;
return true;
default: return false;
}});
- ui->initPin(variable.var, "mdc", 23, false, [this](EventArguments) { switch (eventType) {
+ ui->initPin(variable, "mdc", 23, false, [this](EventArguments) { switch (eventType) {
case onChange:
ethActive = false;
return true;
default: return false;
}});
- ui->initPin(variable.var, "mdio", 18, false, [this](EventArguments) { switch (eventType) {
+ ui->initPin(variable, "mdio", 18, false, [this](EventArguments) { switch (eventType) {
case onChange:
ethActive = false;
return true;
default: return false;
}});
- ui->initSelect(variable.var, "type", ETH_PHY_LAN8720, false, [this](EventArguments) { switch (eventType) {
+ ui->initSelect(variable, "type", ETH_PHY_LAN8720, false, [this](EventArguments) { switch (eventType) {
case onUI: {
JsonArray options = variable.setOptions();
options.add("LAN8720");
@@ -144,7 +144,7 @@ void SysModNetwork::setup() {
return true;
default: return false;
}});
- ui->initSelect(variable.var, "clockMode", ETH_CLOCK_GPIO17_OUT, false, [this](EventArguments) { switch (eventType) {
+ ui->initSelect(variable, "clockMode", ETH_CLOCK_GPIO17_OUT, false, [this](EventArguments) { switch (eventType) {
case onUI: {
JsonArray options = variable.setOptions();
options.add("GPIO0_IN");
@@ -179,7 +179,7 @@ void SysModNetwork::setup() {
#endif
- currentVar = ui->initCheckBox(parentVar, "AP", false, false, [this](EventArguments) { switch (eventType) {
+ currentVar = ui->initCheckBox(parentVar, "AP", (bool3State)false, false, [this](EventArguments) { switch (eventType) {
case onChange:
if (variable.value().as())
initAP();
@@ -315,7 +315,7 @@ void SysModNetwork::initAP() {
const char * apSSID = mdl->getValue("System", "name");
if (WiFi.softAPConfig(IPAddress(4, 3, 2, 1), IPAddress(4, 3, 2, 1), IPAddress(255, 255, 255, 0))
- && WiFi.softAP(apSSID, NULL, apChannel, false)) { //no password!!!
+ && WiFi.softAP(apSSID, nullptr, apChannel, false)) { //no password!!!
ppf("AP success %s %s s:%d\n", apSSID, WiFi.softAPIP().toString().c_str(), WiFi.status()); //6 is disconnected
#if defined(STARBASE_LOLIN_WIFI_FIX )
WiFi.setTxPower(WIFI_POWER_8_5dBm );
diff --git a/src/Sys/SysModNetwork.h b/src/Sys/SysModNetwork.h
index 2791292..1c91f56 100644
--- a/src/Sys/SysModNetwork.h
+++ b/src/Sys/SysModNetwork.h
@@ -21,10 +21,10 @@ class SysModNetwork:public SysModule {
SysModNetwork();
//setup wifi an async webserver
- void setup();
+ void setup() override;
- void loop1s();
- void loop10s();
+ void loop1s() override;
+ void loop10s() override;
// void handleConnections();
diff --git a/src/Sys/SysModPins.cpp b/src/Sys/SysModPins.cpp
index 4ab4bab..3f1e1c4 100644
--- a/src/Sys/SysModPins.cpp
+++ b/src/Sys/SysModPins.cpp
@@ -23,7 +23,7 @@ SysModPins::SysModPins() :SysModule("Pins") {
void SysModPins::setup() {
SysModule::setup();
- Variable parentVar = ui->initSysMod(Variable(), name, 2202);
+ const Variable parentVar = ui->initSysMod(Variable(), name, 2202);
//show table of allocated pins
Variable tableVar = ui->initTable(parentVar, "pins", nullptr, true, [](EventArguments) { switch (eventType) {
diff --git a/src/Sys/SysModPins.h b/src/Sys/SysModPins.h
index 3a8f826..3da6767 100644
--- a/src/Sys/SysModPins.h
+++ b/src/Sys/SysModPins.h
@@ -34,12 +34,12 @@ class SysModPins:public SysModule {
PinObject pinObjects[NUM_DIGITAL_PINS]; //all pins
SysModPins();
- void setup();
- void loop20ms();
+ void setup() override;
+ void loop20ms() override;
void allocatePin(uint8_t pin, const char * owner, const char * details);
void deallocatePin(uint8_t pin = UINT8_MAX, const char * owner = nullptr);
- bool isOwner(uint8_t pin, const char * owner) {
+ bool isOwner(uint8_t pin, const char * owner) const {
return strncmp(pinObjects[pin].owner, owner, sizeof(PinObject::owner)) == 0;
}
diff --git a/src/Sys/SysModPrint.cpp b/src/Sys/SysModPrint.cpp
index 16823c9..83450fa 100644
--- a/src/Sys/SysModPrint.cpp
+++ b/src/Sys/SysModPrint.cpp
@@ -55,7 +55,7 @@ SysModPrint::SysModPrint() :SysModule("Print") {
void SysModPrint::setup() {
SysModule::setup();
- Variable parentVar = ui->initSysMod(Variable(), name, 2302);
+ const Variable parentVar = ui->initSysMod(Variable(), name, 2302);
//default to Serial
ui->initSelect(parentVar, "output", 1, false, [](EventArguments) { switch (eventType) {
@@ -84,12 +84,12 @@ void SysModPrint::printf(const char * format, ...) {
va_start(args, format);
- uint8_t output = 1; //default serial
char buffer[512]; //this is a lot for the stack - move to heap?
vsnprintf(buffer, sizeof(buffer), format, args);
bool toSerial = false;
if (mdls->isConnected) {
+ uint8_t output = 1;
if (mdl->model)
output = mdl->getValue("Print", "output"); //"Print",
@@ -113,7 +113,7 @@ void SysModPrint::printf(const char * format, ...) {
toSerial = true;
if (toSerial) {
- Serial.print(strncmp(pcTaskGetTaskName(NULL), "loopTask", 9) == 0?"":"α"); //looptask λ/ asyncTCP task α
+ Serial.print(strncmp(pcTaskGetTaskName(nullptr), "loopTask", 9) == 0?"":"α"); //looptask λ/ asyncTCP task α
Serial.print(buffer);
}
diff --git a/src/Sys/SysModPrint.h b/src/Sys/SysModPrint.h
index dbddc2e..dc5e1b5 100644
--- a/src/Sys/SysModPrint.h
+++ b/src/Sys/SysModPrint.h
@@ -22,8 +22,8 @@ class SysModPrint:public SysModule {
public:
SysModPrint();
- void setup();
- void loop20ms();
+ void setup() override;
+ void loop20ms() override;
//generic print function
void printf(const char * format, ...);
diff --git a/src/Sys/SysModSystem.cpp b/src/Sys/SysModSystem.cpp
index 45baea5..0916b49 100644
--- a/src/Sys/SysModSystem.cpp
+++ b/src/Sys/SysModSystem.cpp
@@ -39,7 +39,7 @@ SysModSystem::SysModSystem() :SysModule("System") {};
void SysModSystem::setup() {
SysModule::setup();
- Variable parentVar = ui->initSysMod(Variable(), name, 2000);
+ const Variable parentVar = ui->initSysMod(Variable(), name, 2000);
parentVar.var["s"] = true; //setup
ui->initText(parentVar, "name", _INIT(TOSTRING(APP)), 24, false, [this](EventArguments) { switch (eventType) {
@@ -240,7 +240,10 @@ void SysModSystem::loop() {
void SysModSystem::loop10s() {
//heartbeat
- ppf("❤️");
+ if (sys->now < 60000)
+ ppf("❤️ %s\n", net->localIP().toString().c_str());
+ else
+ ppf("❤️");
}
//replace code by sentence as soon it occurs, so we know what will happen and what not
@@ -328,22 +331,22 @@ String SysModSystem::sysTools_reset2String(int resetCode) {
int SysModSystem::sysTools_get_arduino_maxStackUsage(void) {
char * loop_taskname = pcTaskGetTaskName(loop_taskHandle); // ask for name of the known task (to make sure we are still looking at the right one)
- if ((loop_taskHandle == NULL) || (loop_taskname == NULL) || (strncmp(loop_taskname, "loopTask", 9) != 0)) {
+ if ((loop_taskHandle == nullptr) || (loop_taskname == nullptr) || (strncmp(loop_taskname, "loopTask", 9) != 0)) {
loop_taskHandle = xTaskGetHandle("loopTask"); // need to look for the task by name. FreeRTOS docs say this is very slow, so we store the result for next time
}
- if (loop_taskHandle != NULL) return uxTaskGetStackHighWaterMark(loop_taskHandle); // got it !!
+ if (loop_taskHandle != nullptr) return uxTaskGetStackHighWaterMark(loop_taskHandle); // got it !!
else return -1;
}
int SysModSystem::sysTools_get_webserver_maxStackUsage(void) {
char * tcp_taskname = pcTaskGetTaskName(tcp_taskHandle); // ask for name of the known task (to make sure we are still looking at the right one)
- if ((tcp_taskHandle == NULL) || (tcp_taskname == NULL) || (strncmp(tcp_taskname, "async_tcp", 10) != 0)) {
+ if ((tcp_taskHandle == nullptr) || (tcp_taskname == nullptr) || (strncmp(tcp_taskname, "async_tcp", 10) != 0)) {
tcp_taskHandle = xTaskGetHandle("async_tcp"); // need to look for the task by name. FreeRTOS docs say this is very slow, so we store the result for next time
}
- if (tcp_taskHandle != NULL) return uxTaskGetStackHighWaterMark(tcp_taskHandle); // got it !!
+ if (tcp_taskHandle != nullptr) return uxTaskGetStackHighWaterMark(tcp_taskHandle); // got it !!
else return -1;
}
diff --git a/src/Sys/SysModSystem.h b/src/Sys/SysModSystem.h
index 6729105..9771fbb 100644
--- a/src/Sys/SysModSystem.h
+++ b/src/Sys/SysModSystem.h
@@ -26,17 +26,17 @@ class SysModSystem:public SysModule {
timebase = 0;
SysModSystem();
- void setup();
- void loop();
- void loop10s();
+ void setup() override;
+ void loop() override;
+ void loop10s() override;
//from esp32Tools
- bool sysTools_normal_startup(void); // FALSE if unusual startup code --> use next function to get more info
- String sysTools_getRestartReason(void); // long string including restart codes from system, Core#0 and Core#1 (if availeable)
+ bool sysTools_normal_startup(); // FALSE if unusual startup code --> use next function to get more info
+ String sysTools_getRestartReason(); // long string including restart codes from system, Core#0 and Core#1 (if availeable)
String sysTools_restart2String(int reasoncode); // helper for SysModSystem::addRestartReasonsSelect. Returns "(#) ReasonText"
String sysTools_reset2String(int resetCode); // helper for SysModSystem::addResetReasonsSelect. Returns "shortResetReasonText (#)"
- int sysTools_get_arduino_maxStackUsage(void); // to query max used stack of the arduino task. returns "-1" if unknown
- int sysTools_get_webserver_maxStackUsage(void); // to query max used stack of the webserver task. returns "-1" if unknown
+ int sysTools_get_arduino_maxStackUsage(); // to query max used stack of the arduino task. returns "-1" if unknown
+ int sysTools_get_webserver_maxStackUsage(); // to query max used stack of the webserver task. returns "-1" if unknown
//tbd: utility function ... (pka prepareHostname)
void removeInvalidCharacters(char* hostname, const char *in)
@@ -74,8 +74,8 @@ class SysModSystem:public SysModule {
String restartCode2InfoLong(esp_reset_reason_t reason);
String restartCode2Info(esp_reset_reason_t reason);
- TaskHandle_t loop_taskHandle = NULL; // to store the task handle for later calls
- TaskHandle_t tcp_taskHandle = NULL; // to store the task handle for later calls
+ TaskHandle_t loop_taskHandle = nullptr; // to store the task handle for later calls
+ TaskHandle_t tcp_taskHandle = nullptr; // to store the task handle for later calls
};
diff --git a/src/Sys/SysModUI.cpp b/src/Sys/SysModUI.cpp
index 77a9d4d..5046fe3 100644
--- a/src/Sys/SysModUI.cpp
+++ b/src/Sys/SysModUI.cpp
@@ -20,7 +20,7 @@ SysModUI::SysModUI() :SysModule("UI") {
void SysModUI::setup() {
SysModule::setup();
- Variable parentVar = initSysMod(Variable(), name, 4101);
+ const Variable parentVar = initSysMod(Variable(), name, 4101);
Variable tableVar = initTable(parentVar, "loops", nullptr, true, [](EventArguments) { switch (eventType) {
case onUI:
@@ -32,7 +32,7 @@ void SysModUI::setup() {
initText(tableVar, "variable", nullptr, 32, true, [this](EventArguments) { switch (eventType) {
case onSetValue:
for (size_t rowNr = 0; rowNr < loopFunctions.size(); rowNr++)
- variable.setValue(JsonString(loopFunctions[rowNr].var["id"], JsonString::Copied), rowNr);
+ variable.setValue(JsonString(loopFunctions[rowNr].variable.id(), JsonString::Copied), rowNr);
return true;
default: return false;
}});
@@ -54,10 +54,10 @@ void SysModUI::setup() {
void SysModUI::loop20ms() { //never more then 50 times a second!
for (VarLoop &varLoop : loopFunctions) {
- if (millis() - varLoop.lastMillis >= varLoop.var["interval"].as()) {
+ if (millis() - varLoop.lastMillis >= varLoop.variable.var["interval"].as()) {
varLoop.lastMillis = millis();
- varLoop.loopFun(varLoop.var, 1, onLoop); //rowNr..
+ varLoop.loopFun(varLoop.variable, 1, onLoop); //rowNr..
varLoop.counter++;
// ppf("%s %u %u %d %d\n", varLoop->Variable(var).id(), varLoop->lastMillis, millis(), varLoop->interval, varLoop->counter);
@@ -114,9 +114,9 @@ void SysModUI::processJson(JsonVariant json) {
char pid[32];
strlcpy(pid, varInArray, sizeof(pid));
char * id = strtok(pid, ".");
- if (id != NULL ) {
+ if (id != nullptr ) {
strlcpy(pid, id, sizeof(pid)); //copy the id part
- id = strtok(NULL, "."); //the rest after .
+ id = strtok(nullptr, "."); //the rest after .
}
JsonObject var = mdl->findVar(pid, id); //value is the id
@@ -143,18 +143,18 @@ void SysModUI::processJson(JsonVariant json) {
strlcpy(pidid, key, sizeof(pidid));
//check if we deal with multiple rows (from table type)
char * rowNrC = strtok(pidid, "#");
- if (rowNrC != NULL ) {
+ if (rowNrC != nullptr ) {
strlcpy(pidid, rowNrC, sizeof(pidid)); //copy the pidid part
- rowNrC = strtok(NULL, "#"); //the rest after #
+ rowNrC = strtok(nullptr, "#"); //the rest after #
}
- uint8_t rowNr = rowNrC?atoi(rowNrC):UINT8_MAX;
+ uint8_t rowNr = rowNrC?strtol(rowNrC, nullptr, 10):UINT8_MAX;
char pid[64];
strlcpy(pid, pidid, sizeof(pid));
char * id = strtok(pid, ".");
- if (id != NULL ) {
+ if (id != nullptr ) {
strlcpy(pid, id, sizeof(pid)); //copy the id part
- id = strtok(NULL, "."); //the rest after .
+ id = strtok(nullptr, "."); //the rest after .
}
if (pid && id) {
diff --git a/src/Sys/SysModUI.h b/src/Sys/SysModUI.h
index 0060cd4..dff044d 100644
--- a/src/Sys/SysModUI.h
+++ b/src/Sys/SysModUI.h
@@ -15,7 +15,7 @@
#include "SysModModel.h"
struct VarLoop {
- JsonObject var;
+ Variable variable;
VarEvent loopFun;
unsigned long lastMillis = 0;
unsigned long counter = 0;
@@ -30,9 +30,9 @@ class SysModUI: public SysModule {
SysModUI();
//serve index.htm
- void setup();
+ void setup() override;
- void loop20ms();
+ void loop20ms() override;
//order: order%4 determines the column (WIP)
Variable initAppMod(Variable parent, const char * id, int order = 0) {
@@ -41,135 +41,135 @@ class SysModUI: public SysModule {
return variable;
}
Variable initSysMod(Variable parent, const char * id, int order = 0) {
- Variable variable = initVarAndValue(parent, id, "sysmod", (const char *)nullptr);
+ const Variable variable = initVarAndValue(parent, id, "sysmod", (const char *)nullptr);
if (order) variable.defaultOrder(order + 1000);
return variable;
}
Variable initUserMod(Variable parent, const char * id, int order = 0) {
- Variable variable = initVarAndValue(parent, id, "usermod", (const char *)nullptr);
+ const Variable variable = initVarAndValue(parent, id, "usermod", (const char *)nullptr);
if (order) variable.defaultOrder(order + 1000);
return variable;
}
- Variable initTable(Variable parent, const char * id, const char * value = nullptr, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initTable(Variable parent, const char * id, const char * value = nullptr, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "table", value, 0, 0, readOnly, varEvent);
}
- Variable initText(Variable parent, const char * id, const char * value = nullptr, uint16_t max = 32, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initText(Variable parent, const char * id, const char * value = nullptr, uint16_t max = 32, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "text", value, 0, max, readOnly, varEvent);
}
//vector of text
- Variable initTextVector(Variable parent, const char * id, std::vector *values, uint16_t max = 32, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initTextVector(Variable parent, const char * id, std::vector *values, uint16_t max = 32, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValueVector(parent, id, "text", values, 0, max, readOnly, varEvent);
}
- Variable initFileUpload(Variable parent, const char * id, const char * value = nullptr, uint16_t max = 32, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initFileUpload(Variable parent, const char * id, const char * value = nullptr, uint16_t max = 32, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "fileUpload", value, 0, max, readOnly, varEvent);
}
- Variable initPassword(Variable parent, const char * id, const char * value = nullptr, uint8_t max = 32, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initPassword(Variable parent, const char * id, const char * value = nullptr, uint8_t max = 32, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "password", value, 0, max, readOnly, varEvent);
}
//number is uint16_t for the time being (because it is called by uint16_t referenced vars...)
- Variable initNumber(Variable parent, const char * id, uint16_t value = UINT16_MAX, int min = 0, int max = UINT16_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initNumber(Variable parent, const char * id, uint16_t value = UINT16_MAX, int min = 0, int max = UINT16_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "number", value, min, max, readOnly, varEvent);
}
//init a number using referenced value
- Variable initNumber(Variable parent, const char * id, uint16_t * value = nullptr, int min = 0, int max = UINT16_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initNumber(Variable parent, const char * id, uint16_t * value = nullptr, int min = 0, int max = UINT16_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "number", value, min, max, readOnly, varEvent);
}
//init a number using a vector of integers
- Variable initNumber(Variable parent, const char * id, std::vector *values, int min = 0, int max = UINT16_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initNumber(Variable parent, const char * id, std::vector *values, int min = 0, int max = UINT16_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "number", values, min, max, readOnly, varEvent);
}
- Variable initPin(Variable parent, const char * id, uint8_t value = UINT8_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initPin(Variable parent, const char * id, uint8_t value = UINT8_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "pin", value, 0, NUM_DIGITAL_PINS, readOnly, varEvent);
}
//referenced value
- Variable initPin(Variable parent, const char * id, uint8_t *value = nullptr, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initPin(Variable parent, const char * id, uint8_t *value = nullptr, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "pin", value, 0, NUM_DIGITAL_PINS, readOnly, varEvent);
}
//type int!
- Variable initProgress(Variable parent, const char * id, int value = UINT16_MAX, int min = 0, int max = 255, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initProgress(Variable parent, const char * id, int value = UINT16_MAX, int min = 0, int max = 255, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "progress", value, min, max, readOnly, varEvent);
}
- Variable initCoord3D(Variable parent, const char * id, Coord3D value = {UINT16_MAX, UINT16_MAX, UINT16_MAX}, int min = 0, int max = UINT16_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initCoord3D(Variable parent, const char * id, Coord3D value = {UINT16_MAX, UINT16_MAX, UINT16_MAX}, int min = 0, int max = UINT16_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "coord3D", value, min, max, readOnly, varEvent);
}
//init a Coord3D using referenced value
- Variable initCoord3D(Variable parent, const char * id, Coord3D *value = nullptr, int min = 0, int max = UINT16_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initCoord3D(Variable parent, const char * id, Coord3D *value = nullptr, int min = 0, int max = UINT16_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "coord3D", value, min, max, readOnly, varEvent);
}
//init a range slider, range between 0 and 255!
- Variable initSlider(Variable parent, const char * id, uint8_t value = UINT8_MAX, int min = 0, int max = 255, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initSlider(Variable parent, const char * id, uint8_t value = UINT8_MAX, int min = 0, int max = 255, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "range", value, min, max, readOnly, varEvent);
}
//init a range slider using referenced value
- Variable initSlider(Variable parent, const char * id, uint8_t * value = nullptr, int min = 0, int max = 255, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initSlider(Variable parent, const char * id, uint8_t * value = nullptr, int min = 0, int max = 255, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "range", value, min, max, readOnly, varEvent);
}
- Variable initCanvas(Variable parent, const char * id, int value = UINT16_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initCanvas(Variable parent, const char * id, int value = UINT16_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "canvas", value, 0, 0, readOnly, varEvent);
}
//supports 3 state value: if UINT8_MAX it is indeterminated
- Variable initCheckBox(Variable parent, const char * id, bool3State value = UINT8_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initCheckBox(Variable parent, const char * id, bool3State value = UINT8_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "checkbox", value, 0, 0, readOnly, varEvent);
}
//init a checkbox using referenced value
- Variable initCheckBox(Variable parent, const char * id, bool3State *value = nullptr, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initCheckBox(Variable parent, const char * id, bool3State *value = nullptr, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "checkbox", value, 0, 0, readOnly, varEvent);
}
//a button never gets a value
- Variable initButton(Variable parent, const char * id, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initButton(Variable parent, const char * id, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "button", false, 0, 0, readOnly, varEvent);
}
- // Variable initButton2(Variable parent, const char * id, bool readOnly = false, VarEvent varEvent = nullptr) {
+ // Variable initButton2(Variable parent, const char * id, bool readOnly = false, const VarEvent &varEvent = nullptr) {
// // return initVarAndValue(parent, id, "button", false, 0, 0, readOnly, varEvent);
// return JsonObject();
// }
//int value ?
- Variable initSelect(Variable parent, const char * id, uint8_t value = UINT8_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initSelect(Variable parent, const char * id, uint8_t value = UINT8_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "select", value, 0, 0, readOnly, varEvent);
}
//init a select using referenced value
- Variable initSelect(Variable parent, const char * id, uint8_t * value = nullptr, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initSelect(Variable parent, const char * id, uint8_t * value = nullptr, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "select", value, 0, 0, readOnly, varEvent);
}
- Variable initIP(Variable parent, const char * id, int value = UINT16_MAX, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initIP(Variable parent, const char * id, int value = UINT16_MAX, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "ip", value, 0, 255, readOnly, varEvent);
}
- Variable initTextArea(Variable parent, const char * id, const char * value = nullptr, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initTextArea(Variable parent, const char * id, const char * value = nullptr, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "textarea", value, 0, 0, readOnly, varEvent);
}
- Variable initFileEdit(Variable parent, const char * id, const char * value = nullptr, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initFileEdit(Variable parent, const char * id, const char * value = nullptr, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "fileEdit", value, 0, 0, readOnly, varEvent);
}
//vector of fileEdit
- Variable initFileEditVector(Variable parent, const char * id, std::vector *values, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initFileEditVector(Variable parent, const char * id, std::vector *values, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValueVector(parent, id, "fileEdit", values, 0, 0, readOnly, varEvent);
}
- Variable initURL(Variable parent, const char * id, const char * value = nullptr, bool readOnly = false, VarEvent varEvent = nullptr) {
+ Variable initURL(Variable parent, const char * id, const char * value = nullptr, bool readOnly = false, const VarEvent &varEvent = nullptr) {
return initVarAndValue(parent, id, "url", value, 0, 0, readOnly, varEvent);
}
//initVarAndValue using basic value
template
- Variable initVarAndValue(Variable parent, const char * id, const char * type, Type value, int min = 0, int max = 255, bool readOnly = true, VarEvent varEvent = nullptr) {
+ Variable initVarAndValue(Variable parent, const char * id, const char * type, Type value, int min = 0, int max = 255, bool readOnly = true, const VarEvent &varEvent = nullptr) {
Variable variable = mdl->initVar(parent, id, type, readOnly, varEvent);
if (variable.initValue(min, max, 0)) { //no pointer
@@ -181,7 +181,7 @@ class SysModUI: public SysModule {
//initVarAndValue using referenced value
template
- Variable initVarAndValue(Variable parent, const char * id, const char * type, Type * value, int min = 0, int max = 255, bool readOnly = true, VarEvent varEvent = nullptr) {
+ Variable initVarAndValue(Variable parent, const char * id, const char * type, Type * value, int min = 0, int max = 255, bool readOnly = true, const VarEvent &varEvent = nullptr) {
Variable variable = mdl->initVar(parent, id, type, readOnly, varEvent);
if (variable.initValue(min, max, int(value))) {
@@ -193,7 +193,7 @@ class SysModUI: public SysModule {
//initVarAndValue using vector of values
template
- Variable initVarAndValue(Variable parent, const char * id, const char * type, std::vector *values, int min = 0, int max = 255, bool readOnly = true, VarEvent varEvent = nullptr) {
+ Variable initVarAndValue(Variable parent, const char * id, const char * type, std::vector *values, int min = 0, int max = 255, bool readOnly = true, const VarEvent &varEvent = nullptr) {
Variable variable = mdl->initVar(parent, id, type, readOnly, varEvent);
if (!variable.var["value"].isNull()) {
@@ -213,7 +213,7 @@ class SysModUI: public SysModule {
}
//initVarAndValue using vector of values . WIP!!!
- Variable initVarAndValueVector(Variable parent, const char * id, const char * type, std::vector *values, int min = 0, int max = 255, bool readOnly = true, VarEvent varEvent = nullptr) {
+ Variable initVarAndValueVector(Variable parent, const char * id, const char * type, std::vector *values, int min = 0, int max = 255, bool readOnly = true, const VarEvent &varEvent = nullptr) {
Variable variable = mdl->initVar(parent, id, type, readOnly, varEvent);
if (!variable.var["value"].isNull()) {
diff --git a/src/Sys/SysModWeb.cpp b/src/Sys/SysModWeb.cpp
index d1d5294..72850a2 100644
--- a/src/Sys/SysModWeb.cpp
+++ b/src/Sys/SysModWeb.cpp
@@ -45,7 +45,7 @@ SysModWeb::SysModWeb() :SysModule("Web") {
void SysModWeb::setup() {
SysModule::setup();
- Variable parentVar = ui->initSysMod(Variable(), name, 3101);
+ const Variable parentVar = ui->initSysMod(Variable(), name, 3101);
Variable tableVar = ui->initTable(parentVar, "clients", nullptr, true, [](EventArguments) { switch (eventType) {
case onLoop1s:
@@ -657,9 +657,9 @@ bool SysModWeb::captivePortal(WebRequest *request)
}
JsonDocument * SysModWeb::getResponseDoc() {
- // ppf("response wsevent core %d %s\n", xPortGetCoreID(), pcTaskGetTaskName(NULL));
+ // ppf("response wsevent core %d %s\n", xPortGetCoreID(), pcTaskGetTaskName(nullptr));
- return strncmp(pcTaskGetTaskName(NULL), "loopTask", 9) == 0?responseDocLoopTask:responseDocAsyncTCP;
+ return strncmp(pcTaskGetTaskName(nullptr), "loopTask", 9) == 0?responseDocLoopTask:responseDocAsyncTCP;
}
JsonObject SysModWeb::getResponseObject() {
@@ -669,7 +669,7 @@ JsonObject SysModWeb::getResponseObject() {
void SysModWeb::sendResponseObject(WebClient * client) {
JsonObject responseObject = getResponseObject();
if (responseObject.size()) {
- // if (strncmp(pcTaskGetTaskName(NULL), "loopTask", 9) != 0) {
+ // if (strncmp(pcTaskGetTaskName(nullptr), "loopTask", 9) != 0) {
// ppf("send ");
// char sep[3] = "";
// for (JsonPair pair: responseObject) {
diff --git a/src/Sys/SysModWeb.h b/src/Sys/SysModWeb.h
index fc7b054..58911c1 100644
--- a/src/Sys/SysModWeb.h
+++ b/src/Sys/SysModWeb.h
@@ -65,13 +65,13 @@ class SysModWeb:public SysModule {
SysModWeb();
- void setup();
- void loop20ms();
- void loop1s();
+ void setup() override;
+ void loop20ms() override;
+ void loop1s() override;
- void reboot();
+ void reboot() override;
- void connectedChanged();
+ void connectedChanged() override;
void wsEvent(WebSocket * ws, WebClient * client, AwsEventType type, void * arg, byte *data, size_t len);
@@ -107,7 +107,7 @@ class SysModWeb:public SysModule {
void jsonHandler(WebRequest *request, JsonVariant json);
//Is this an IP?
- bool isIp(String str) {
+ bool isIp(const String& str) {
for (size_t i = 0; i < str.length(); i++) {
int c = str.charAt(i);
if (c != '.' && (c < '0' || c > '9')) {
@@ -120,7 +120,7 @@ class SysModWeb:public SysModule {
bool captivePortal(WebRequest *request);
template
- void addResponse(JsonObject var, const char * key, Type value, uint8_t rowNr = UINT8_MAX) {
+ void addResponse(const JsonObject var, const char * key, Type value, const uint8_t rowNr = UINT8_MAX) {
JsonObject responseObject = getResponseObject();
// if (responseObject[id].isNull()) responseObject[id].to();;
char pidid[64];
@@ -134,7 +134,7 @@ class SysModWeb:public SysModule {
}
}
- void addResponse(JsonObject var, const char * key, const char * format = nullptr, ...) {
+ void addResponse(const JsonObject var, const char * key, const char * format = nullptr, ...) {
va_list args;
va_start(args, format);
diff --git a/src/Sys/SysStarJson.cpp b/src/Sys/SysStarJson.cpp
index 2e1918a..53c88d5 100644
--- a/src/Sys/SysStarJson.cpp
+++ b/src/Sys/SysStarJson.cpp
@@ -61,14 +61,14 @@
}
//look for array of integers
- void StarJson::lookFor(const char * id, std::function)> fun) {
+ void StarJson::lookFor(const char * id, const std::function)>& fun) {
funList.push_back(fun);
addToVars(id, "fun", funList.size()-1);
}
//reads from file until all vars have been found (then stops reading)
//returns false if not all vars to look for are found
- bool StarJson::deserialize(bool lazy) {
+ bool StarJson::deserialize(const bool lazy) {
f.read(&character, sizeof(byte));
while (f.available() && (!foundAll || !lazy))
next();
@@ -81,7 +81,7 @@
}
//called by lookedFor, store the var details in varDetails
- void StarJson::addToVars(const char * id, const char * type, size_t index) {
+ void StarJson::addToVars(const char * id, const char * type, const size_t index) {
VarDetails vd;
vd.id = id;
vd.type = type;
@@ -122,7 +122,7 @@
check(lastVarId);
//check the parent array, if exists
- if (varStack.size()-2 >=0) {
+ if (varStack.size() - 2 >= 0) {
// ppf(" Parent check %s\n", varStack[varStack.size()-2].c_str());
strlcpy(beforeLastVarId, varStack[varStack.size()-2].c_str(), sizeof(beforeLastVarId));
check(beforeLastVarId);
@@ -164,7 +164,7 @@
//number value found
// ppf("Number var %s: [%s]\n", lastVarId, value);
if (collectNumbers)
- uint16CollectList.push_back(atoi(value));
+ uint16CollectList.push_back(strtol(value, nullptr, 10));
check(lastVarId, value);
@@ -202,9 +202,9 @@
// ppf("check %s %s %s\n", vd->id, varId, value);
if (strncmp(vd->id, varId, 32)==0) {
// ppf("StarJson found %s:%s %d %s %d %d\n", varId, vd->type, vd->index, value?value:"", uint16CollectList.size(), funList.size());
- if (strncmp(vd->type, "uint8", 7) ==0 && value) *uint8List[vd->index] = atoi(value);
- // if (strncmp(vd->type, "uint16", 7) ==0 && value) *uint16List[vd->index] = atoi(value);
- // if (strncmp(vd->type, "int", 7) ==0 && value) *intList[vd->index] = atoi(value);
+ if (strncmp(vd->type, "uint8", 7) ==0 && value) *uint8List[vd->index] = strtol(value, nullptr, 10);
+ // if (strncmp(vd->type, "uint16", 7) ==0 && value) *uint16List[vd->index] = strtol(value, nullptr, 10);
+ // if (strncmp(vd->type, "int", 7) ==0 && value) *intList[vd->index] = strtol(value, nullptr, 10);
if (strncmp(vd->type, "char", 5) ==0 && value) strlcpy(charList[vd->index], value, 32); //assuming size 32 here
if (strncmp(vd->type, "fun", 4) ==0) funList[vd->index](uint16CollectList); //call for every found item (no value check)
foundCounter++;
diff --git a/src/Sys/SysStarJson.h b/src/Sys/SysStarJson.h
index 1908a52..d252d39 100644
--- a/src/Sys/SysStarJson.h
+++ b/src/Sys/SysStarJson.h
@@ -22,7 +22,7 @@ class StarJson {
public:
- StarJson(const char * path, const char * mode = "r");
+ explicit StarJson(const char * path, const char * mode = "r");
~StarJson();
@@ -42,7 +42,7 @@ class StarJson {
// void lookFor(const char * id, uint16_t * value);
// void lookFor(const char * id, int * value);
void lookFor(const char * id, char * value);
- void lookFor(const char * id, std::function)> fun);
+ void lookFor(const char * id, const std::function)>& fun);
//reads from file until all vars have been found (then stops reading)
//returns false if not all vars to look for are found
diff --git a/src/SysModule.h b/src/SysModule.h
index dbdf9fd..505ca00 100644
--- a/src/SysModule.h
+++ b/src/SysModule.h
@@ -45,8 +45,9 @@ class SysModule {
unsigned long twentyMsMillis = millis() - random(1000); //random so not all 1s are fired at once
unsigned long oneSecondMillis = millis() - random(1000); //random so not all 1s are fired at once
unsigned long tenSecondMillis = millis() - random(10000); //random within a second
+ // void (SysModule::*loopCached)() = &SysModule::loop; //use virtual cached function for speed??? tested, no difference ...
- SysModule(const char * name) {
+ explicit SysModule(const char * name) {
this->name = name;
success = true;
isEnabled = true;
@@ -64,9 +65,4 @@ class SysModule {
virtual void connectedChanged() {onOffChanged();}
virtual void enabledChanged() {onOffChanged();}
virtual void onOffChanged() {}
-
- virtual void testManager() {}
- virtual void performanceManager() {}
- virtual void dataSizeManager() {}
- virtual void codeSizeManager() {}
};
\ No newline at end of file
diff --git a/src/SysModules.cpp b/src/SysModules.cpp
index 29e798b..67a28cc 100644
--- a/src/SysModules.cpp
+++ b/src/SysModules.cpp
@@ -15,8 +15,7 @@
#include "Sys/SysModWeb.h"
#include "Sys/SysModModel.h"
-SysModules::SysModules() {
-};
+SysModules::SysModules() = default;
void SysModules::setup() {
for (SysModule *module:modules) {
@@ -33,7 +32,7 @@ void SysModules::setup() {
}
//do its own setup: will be shown as last module
- Variable parentVar = ui->initSysMod(Variable(), "Modules", 4203);
+ const Variable parentVar = ui->initSysMod(Variable(), "Modules", 4203);
Variable tableVar = ui->initTable(parentVar, "Modules", nullptr, true, [](EventArguments) { switch (eventType) {
case onUI:
@@ -94,7 +93,8 @@ void SysModules::loop() {
// }
for (SysModule *module:modules) {
if (module->isEnabled && module->success) {
- module->loop(); //use virtual cached function for speed???
+ module->loop();
+ // (module->*module->loopCached)(); //use virtual cached function for speed??? tested, no difference ...
if (millis() - module->twentyMsMillis >= 20) {
module->twentyMsMillis = millis();
module->loop20ms(); //use virtual cached function for speed???
@@ -107,10 +107,6 @@ void SysModules::loop() {
module->tenSecondMillis = millis();
module->loop10s();
}
- // module->testManager();
- // module->performanceManager();
- // module->dataSizeManager();
- // module->codeSizeManager();
}
}
if (newConnection) {
@@ -118,7 +114,6 @@ void SysModules::loop() {
isConnected = true;
connectedChanged();
}
-
}
void SysModules::reboot() {
diff --git a/src/User/UserModE131.h b/src/User/UserModE131.h
index 75baca1..4aca97c 100644
--- a/src/User/UserModE131.h
+++ b/src/User/UserModE131.h
@@ -24,10 +24,10 @@ class UserModE131:public SysModule {
isEnabled = false; //default not enabled
};
- void setup() {
+ void setup() override {
SysModule::setup();
- Variable parentVar = ui->initUserMod(Variable(), name, 6201);
+ const Variable parentVar = ui->initUserMod(Variable(), name, 6201);
ui->initNumber(parentVar, "universe", &universe, 0, 7);
@@ -36,14 +36,14 @@ class UserModE131:public SysModule {
variable.setComment("First channel");
return true;
case onChange:
- for (JsonObject childVar: Variable(mdl->findVar("E131", "watches")).children())
+ for (JsonObject childVar: Variable(mdl->findVar("E131", "patches")).children())
Variable(childVar).triggerEvent(onSetValue); //set the value (WIP)
return true;
default: return false;
}});
currentVar.var["dash"] = true;
- Variable tableVar = ui->initTable(parentVar, "watches", nullptr, true, [](EventArguments) { switch (eventType) {
+ Variable tableVar = ui->initTable(parentVar, "patches", nullptr, true, [](EventArguments) { switch (eventType) {
case onUI:
variable.setComment("Variables to watch");
return true;
@@ -119,7 +119,7 @@ class UserModE131:public SysModule {
}
}
- void loop20ms() {
+ void loop20ms() override {
if(!e131Created) {
return;
}
diff --git a/src/User/UserModHA.h b/src/User/UserModHA.h
index ba9d9c1..da132e9 100644
--- a/src/User/UserModHA.h
+++ b/src/User/UserModHA.h
@@ -24,7 +24,7 @@ class UserModHA:public SysModule {
void setup() override {
SysModule::setup();
- Variable parentVar = ui->initUserMod(Variable(), name, 6300);
+ const Variable parentVar = ui->initUserMod(Variable(), name, 6300);
ui->initText(parentVar, "mqttAddr");
ui->initText(parentVar, "mqttUser");
@@ -32,7 +32,7 @@ class UserModHA:public SysModule {
}
- void connectedChanged() {
+ void connectedChanged() override {
ppf("connectedChanged\n");
if (mdls->isConnected) {
// set device's details (optional)
diff --git a/src/User/UserModLive.cpp b/src/User/UserModLive.cpp
index 982724e..6a610c7 100644
--- a/src/User/UserModLive.cpp
+++ b/src/User/UserModLive.cpp
@@ -115,7 +115,7 @@ static float _time(float j) {
//note: -mtext-section-literals needed in pio.ini, first only for s2, now for all due to something in setup...
- Variable parentVar = ui->initUserMod(Variable(), name, 6310);
+ const Variable parentVar = ui->initUserMod(Variable(), name, 6310);
ui->initSelect(parentVar, "script", UINT8_MAX, false, [this](EventArguments) { switch (eventType) {
case onUI: {
@@ -368,11 +368,7 @@ static float _time(float j) {
uint8_t UserModLive::compile(const char * fileName, const char * post) {
ppf("live compile n:%s o:%s \n", fileName, this->fileName);
- //if(this->fileName!=NULL)
- killAndDelete(); //doesn't this kill running scripts, e.g. when changing a Live Fixture, a running Live Effect will be killed !
- killAndDelete(fileName); //kill any old script
-
- //this->fileName=(char *)_fileName;
+
File f = files->open(fileName, "r");
if (!f)
{
diff --git a/src/User/UserModLive.h b/src/User/UserModLive.h
index f8cb5a3..3f52a72 100644
--- a/src/User/UserModLive.h
+++ b/src/User/UserModLive.h
@@ -17,7 +17,7 @@ class UserModLive: public SysModule {
public:
char fileName[32] = ""; //running sc file
- std::string scScript = ""; //externals etc generated (would prefer String for esp32...)
+ std::string scScript; //externals etc generated (would prefer String for esp32...)
UserModLive() :SysModule("LiveScripts") {
isEnabled = false; //need to enable after fresh setup
@@ -37,11 +37,11 @@ class UserModLive: public SysModule {
//testing class functions instead of static
void showM();
- void loop();
+ void loop() override;
- void loop20ms();
+ void loop20ms() override;
- void loop1s();
+ void loop1s() override;
//return the id of the executable
uint8_t compile(const char *fileName, const char *post = nullptr);
@@ -76,9 +76,9 @@ external uint32_t millis();
external void pinMode(int a1, int a2);
external void digitalWrite(int a1, int a2);
external void delay(int a1);
-external uint8_t slider1;
-external uint8_t slider2;
-external uint8_t slider3;
+external uint8_t custom1Control;
+external uint8_t custom2Control;
+external uint8_t custom3Control;
external CRGB hsv(int a1, int a2, int a3);
external CRGB rgb(int a1, int a2, int a3);
external uint8_t beatSin8(uint8_t a1, uint8_t a2, uint8_t a3);
@@ -92,5 +92,4 @@ external void fadeToBlackBy(uint8_t a1);
define width 32
define height 32
define NUM_LEDS 1024
-define panel_width 32
*/
\ No newline at end of file
diff --git a/src/User/UserModMDNS.h b/src/User/UserModMDNS.h
index e10d467..7382857 100644
--- a/src/User/UserModMDNS.h
+++ b/src/User/UserModMDNS.h
@@ -22,7 +22,7 @@ class UserModMDNS:public SysModule {
UserModMDNS() :SysModule("MDNS") {
};
- void setup() {
+ void setup() override {
SysModule::setup();
escapedMac = WiFi.macAddress();
@@ -31,7 +31,7 @@ class UserModMDNS:public SysModule {
}
- void onOffChanged() {
+ void onOffChanged() override {
if (mdls->isConnected && isEnabled) {
resetMDNS();
diff --git a/src/User/UserModMPU6050.h b/src/User/UserModMPU6050.h
index f18217a..c2d6894 100644
--- a/src/User/UserModMPU6050.h
+++ b/src/User/UserModMPU6050.h
@@ -32,9 +32,9 @@ class UserModMPU6050: public SysModule {
isEnabled = false; //need to enable after fresh setup
};
- void setup() {
+ void setup() override {
SysModule::setup();
- Variable parentVar = ui->initUserMod(Variable(), name, 6305);
+ const Variable parentVar = ui->initUserMod(Variable(), name, 6305);
ui->initCheckBox(parentVar, "ready", &motionTrackingReady, true, [](EventArguments) { switch (eventType) {
case onUI:
@@ -98,7 +98,7 @@ class UserModMPU6050: public SysModule {
mdl->setValue("Motion Tracking", "ready", motionTrackingReady);
}
- void loop20ms() { // loop(): 700/s, loop20ms: 3000/s, loop1s(): 5500/s, disabled: 6000/s
+ void loop20ms() override { // loop(): 700/s, loop20ms: 3000/s, loop1s(): 5500/s, disabled: 6000/s
// mpu.getMotion6(&accell.x, &accell.y, &accell.z, &gyro.x, &gyro.y, &gyro.z);
// // display tab-separated accel/gyro x/y/z values
// ppf("mpu6050 %d,%d,%d %d,%d,%d\n", accell.x, accell.y, accell.z, gyro.x, gyro.y, gyro.z);
diff --git a/src/User/UserModMidi.h b/src/User/UserModMidi.h
index 1d7d5ac..1711be2 100644
--- a/src/User/UserModMidi.h
+++ b/src/User/UserModMidi.h
@@ -11,6 +11,8 @@
// #include
+#include "SysModules.h"
+
class UserModMidi:public SysModule {
public:
@@ -18,7 +20,7 @@ class UserModMidi:public SysModule {
UserModMidi() :SysModule("Midi") {
};
- void setup() {
+ void setup() override {
SysModule::setup();
// UsbMidi_Setup();
@@ -26,7 +28,7 @@ class UserModMidi:public SysModule {
}
- void onOffChanged() {
+ void onOffChanged() override{
if (mdls->isConnected && isEnabled) {
@@ -34,7 +36,7 @@ class UserModMidi:public SysModule {
}
}
- void loop() {
+ void loop() override {
// if (esp32_usb_midi.available()) {
// esp32_usb_midi.read(); // Read MIDI data
// }
diff --git a/src/html_newui.h b/src/html_newui.h
index fc2499a..44b5b56 100644
--- a/src/html_newui.h
+++ b/src/html_newui.h
@@ -7,544 +7,615 @@
*/
// Autogenerated from data/newui/index.htm, do not edit!!
-const uint16_t PAGE_newui_L = 8598;
+const uint16_t PAGE_newui_L = 9732;
const uint8_t PAGE_newui[] PROGMEM = {
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xd5, 0x3d, 0xc9, 0x76, 0xe3, 0x46,
- 0x92, 0x77, 0x7d, 0x45, 0x16, 0xec, 0x96, 0x08, 0x13, 0x24, 0xc1, 0x55, 0x12, 0x29, 0xb0, 0x9a,
- 0xda, 0xaa, 0xa4, 0x52, 0x49, 0xb2, 0x28, 0x95, 0x6a, 0x99, 0x7a, 0x16, 0x48, 0x24, 0x49, 0x94,
- 0x40, 0x00, 0x06, 0x40, 0x51, 0x14, 0x8d, 0x3f, 0x98, 0xd3, 0xbc, 0x39, 0xcc, 0xad, 0xcf, 0xf3,
- 0xe6, 0x1f, 0xe6, 0x30, 0x9f, 0x32, 0x5f, 0xd0, 0x9f, 0x30, 0x11, 0x99, 0x09, 0x10, 0x20, 0xa1,
- 0xa5, 0xdc, 0x7e, 0xf3, 0xda, 0x76, 0x5b, 0x04, 0x22, 0x23, 0x33, 0x23, 0x23, 0x22, 0x63, 0xc9,
- 0x05, 0x4d, 0x76, 0x5e, 0xed, 0x9f, 0xed, 0x5d, 0x7e, 0x3a, 0x3f, 0x20, 0xa3, 0x60, 0x6c, 0xb5,
- 0xc9, 0x4e, 0xf4, 0x43, 0x75, 0x03, 0x7e, 0xc6, 0x34, 0xd0, 0x49, 0x7f, 0xa4, 0x7b, 0x3e, 0x0d,
- 0x34, 0x69, 0x12, 0x0c, 0x0a, 0x5b, 0x52, 0x0c, 0x76, 0xec, 0x80, 0xda, 0x00, 0x9e, 0x51, 0x5f,
- 0x22, 0x6b, 0xb6, 0x3e, 0xa6, 0x9a, 0xa4, 0xbb, 0xae, 0x45, 0x0b, 0x63, 0xa7, 0x67, 0xc2, 0xcf,
- 0x94, 0xf6, 0x0a, 0x00, 0x28, 0xf4, 0x75, 0x57, 0xef, 0x59, 0x34, 0xae, 0xb9, 0x16, 0x57, 0x9d,
- 0x9a, 0x46, 0x30, 0xd2, 0x0c, 0x7a, 0x67, 0xf6, 0x01, 0x1d, 0x5f, 0x14, 0xd3, 0x36, 0x03, 0x53,
- 0xb7, 0x0a, 0x7e, 0x5f, 0xb7, 0xa8, 0x56, 0x96, 0x08, 0x6f, 0xf8, 0xce, 0xa4, 0x53, 0xd7, 0xf1,
- 0x82, 0x45, 0x23, 0xa2, 0xc3, 0x49, 0x30, 0x72, 0x3c, 0x69, 0x41, 0xcd, 0x7b, 0xc7, 0xb1, 0xdf,
- 0x3b, 0xc6, 0xc4, 0xa2, 0x3e, 0xd1, 0x6d, 0x83, 0x98, 0x81, 0xcf, 0x0a, 0x3d, 0xb3, 0x37, 0x09,
- 0x1c, 0xcf, 0xc7, 0x06, 0x2c, 0xd3, 0xbe, 0x25, 0x1e, 0xb5, 0x34, 0xc9, 0x84, 0x22, 0x20, 0x7e,
- 0xe4, 0xd1, 0x81, 0x26, 0x19, 0x7a, 0xa0, 0x37, 0xcd, 0xb1, 0x3e, 0xa4, 0x25, 0xd7, 0x1e, 0xb6,
- 0x7a, 0xba, 0x4f, 0x1b, 0x35, 0xc5, 0xfc, 0xb0, 0x7b, 0x76, 0x31, 0x55, 0xdf, 0xbd, 0x19, 0x3a,
- 0x1d, 0xf8, 0xe7, 0xb4, 0x7b, 0x35, 0x3a, 0xb8, 0x1a, 0xc2, 0xd3, 0x2e, 0xbe, 0x76, 0x7e, 0xde,
- 0xeb, 0x7c, 0xc2, 0xdf, 0xc1, 0x56, 0x69, 0x7b, 0xc4, 0x20, 0x1f, 0x4f, 0xbb, 0x17, 0xea, 0x51,
- 0xc7, 0xf3, 0x6b, 0xfd, 0xc6, 0xcf, 0xf0, 0x7e, 0x70, 0x61, 0x5d, 0x1f, 0x58, 0xe3, 0xcb, 0x2b,
- 0xb5, 0xf3, 0x0e, 0xeb, 0x75, 0xe0, 0xcf, 0x27, 0xc3, 0x85, 0xaa, 0x9d, 0xa8, 0x95, 0x37, 0x0c,
- 0x0e, 0xff, 0x34, 0xf0, 0xfd, 0xbd, 0x80, 0x1f, 0x74, 0x3a, 0xef, 0x3a, 0x7b, 0x49, 0xbc, 0x83,
- 0x77, 0x9d, 0xfd, 0xd4, 0x3b, 0xaf, 0xa5, 0x7e, 0xf8, 0xf8, 0x76, 0x86, 0xb0, 0xca, 0x81, 0x75,
- 0xf0, 0xf3, 0x87, 0x9f, 0x6b, 0x07, 0x9f, 0x3e, 0x74, 0x2f, 0xaf, 0x82, 0xde, 0xd5, 0x45, 0x67,
- 0x7b, 0xeb, 0xfe, 0xdd, 0xa5, 0xf5, 0x66, 0xf7, 0xea, 0xe1, 0xe0, 0xf3, 0xbb, 0xc3, 0xab, 0xb7,
- 0xbb, 0x56, 0xff, 0x83, 0x79, 0xb8, 0x6b, 0x74, 0xf7, 0xac, 0x63, 0xbd, 0x7b, 0x7b, 0x5c, 0xfd,
- 0x48, 0xbd, 0xbd, 0xe0, 0xf2, 0xee, 0xe3, 0xc5, 0x87, 0xd9, 0x71, 0xad, 0xb3, 0xe5, 0x9c, 0x04,
- 0xf7, 0x65, 0x7b, 0xd6, 0x09, 0x7a, 0xb7, 0xce, 0x47, 0xef, 0x7a, 0xcf, 0x72, 0x0c, 0xf5, 0xd7,
- 0xc3, 0xa3, 0x8f, 0xfa, 0xe8, 0xe2, 0x4d, 0xef, 0xfa, 0xcd, 0x29, 0xed, 0x9e, 0xd6, 0xd5, 0xba,
- 0x57, 0x3f, 0x3f, 0xaf, 0x1d, 0xed, 0x6f, 0x6e, 0x97, 0x1f, 0xea, 0xf5, 0xe9, 0x83, 0xb1, 0x39,
- 0xaa, 0xee, 0xed, 0x56, 0xf6, 0x66, 0xa5, 0xdb, 0x7e, 0xe5, 0xee, 0x72, 0x4f, 0xdd, 0x7f, 0x9b,
- 0xef, 0xee, 0x9e, 0x59, 0xbd, 0xaa, 0x71, 0xdc, 0xb8, 0xd6, 0xbb, 0x83, 0x87, 0xfb, 0x73, 0xa7,
- 0x6e, 0x35, 0xf6, 0x6a, 0xfe, 0xc7, 0x29, 0x1d, 0x3e, 0x9c, 0x9f, 0x1d, 0xf4, 0xf7, 0xc7, 0xaa,
- 0xa9, 0x7e, 0x30, 0x47, 0xf7, 0x0f, 0x93, 0x8f, 0x57, 0xfd, 0x7c, 0xb9, 0x63, 0x3f, 0x4c, 0xdf,
- 0x3b, 0x67, 0xa5, 0xad, 0xab, 0xad, 0xe1, 0xf9, 0xd1, 0xf8, 0x5d, 0xc7, 0x7f, 0xa8, 0x7d, 0x0b,
- 0x36, 0xaf, 0xdf, 0xdf, 0x7b, 0xdb, 0x57, 0xe7, 0xa7, 0x0f, 0xd6, 0xb0, 0xf4, 0xfe, 0xda, 0x29,
- 0xdf, 0x19, 0xfb, 0x5d, 0xef, 0xe7, 0xce, 0xc4, 0x3b, 0x1e, 0x1d, 0xef, 0xee, 0x6e, 0xce, 0x06,
- 0x0f, 0xaa, 0x77, 0x32, 0xa8, 0xd6, 0x8c, 0x8f, 0xfe, 0xe5, 0xf9, 0xbb, 0x6f, 0x9f, 0xc6, 0x9f,
- 0x37, 0xdf, 0x75, 0x6a, 0x9b, 0xa3, 0xee, 0x6c, 0xeb, 0x24, 0xdf, 0x1b, 0x7e, 0xdc, 0xae, 0x74,
- 0xbb, 0x6f, 0x2e, 0x36, 0xdd, 0xde, 0xd5, 0xd8, 0xec, 0x1c, 0xdf, 0xfa, 0x1f, 0x8e, 0xfb, 0xef,
- 0xcf, 0xde, 0xec, 0xdf, 0x8e, 0xbe, 0x9d, 0xdb, 0xb7, 0x93, 0x4e, 0x7d, 0x72, 0x7a, 0xb8, 0x3f,
- 0xc8, 0x57, 0x8e, 0xf2, 0xf7, 0x9f, 0xbd, 0xcb, 0xe9, 0xaf, 0xbf, 0x5e, 0x0c, 0xab, 0xc7, 0xf9,
- 0x83, 0xea, 0xc1, 0x60, 0xef, 0xfc, 0xfd, 0xd1, 0xd4, 0x35, 0x2f, 0x3f, 0xe7, 0x2f, 0xa7, 0xd7,
- 0xa3, 0x8f, 0xfd, 0xde, 0x68, 0xac, 0x8f, 0x1f, 0x3e, 0xbd, 0xeb, 0x4d, 0x3f, 0xef, 0xff, 0x6a,
- 0xbc, 0x69, 0x54, 0x36, 0x3b, 0x9d, 0xad, 0x0f, 0xf7, 0x07, 0x9d, 0xee, 0xdd, 0xe5, 0xb0, 0x74,
- 0xa9, 0x7a, 0xef, 0xfa, 0xef, 0x3e, 0x77, 0x7b, 0x23, 0x3d, 0xd8, 0x72, 0x4f, 0xed, 0x41, 0xe7,
- 0xbc, 0x5c, 0x2a, 0x4f, 0x7b, 0x9f, 0xf3, 0xb3, 0x7c, 0x63, 0xb7, 0xb1, 0xf9, 0xcd, 0x7e, 0xd8,
- 0x1c, 0xed, 0xa9, 0xb6, 0x75, 0x54, 0xdb, 0xbe, 0xb3, 0x81, 0x5d, 0x9f, 0x82, 0xb3, 0xee, 0xe7,
- 0xfc, 0x45, 0xc3, 0x53, 0xc7, 0x33, 0xb5, 0xe1, 0x1e, 0x0c, 0x4f, 0xbc, 0xd2, 0xe4, 0xa2, 0x17,
- 0x6c, 0xbb, 0x7b, 0x5b, 0xc3, 0x8f, 0xbb, 0x87, 0x07, 0x33, 0xd5, 0x55, 0xf7, 0xcf, 0x3e, 0x97,
- 0xfd, 0x8b, 0xeb, 0xdb, 0x59, 0x67, 0xd7, 0xf4, 0xbb, 0x6f, 0xaa, 0x9d, 0xad, 0xe3, 0xcd, 0xe3,
- 0x43, 0xf7, 0xa1, 0x7f, 0xe2, 0x5d, 0xdf, 0xbf, 0xfd, 0xa6, 0xab, 0xfa, 0x0c, 0xa6, 0x49, 0xd7,
- 0x7b, 0xeb, 0x58, 0xc3, 0x7d, 0x7b, 0x7a, 0xb9, 0x99, 0xbf, 0x1e, 0xcc, 0x26, 0xef, 0xaf, 0x3f,
- 0x7f, 0x2e, 0xdd, 0xf7, 0xb7, 0xeb, 0xfa, 0xb0, 0xf6, 0x7e, 0xef, 0xf2, 0xf3, 0x55, 0xfe, 0xa2,
- 0x74, 0x56, 0xdd, 0x33, 0x87, 0xee, 0xcf, 0x0f, 0xd7, 0x47, 0x23, 0xaf, 0x72, 0x78, 0xf1, 0xee,
- 0xe4, 0xad, 0x79, 0x7c, 0x77, 0xfa, 0xce, 0x3a, 0x39, 0xde, 0xbd, 0x18, 0xd3, 0x5a, 0x63, 0xf4,
- 0x79, 0xeb, 0x53, 0xb5, 0xba, 0x45, 0xcd, 0x6f, 0xb7, 0xe5, 0xeb, 0xfa, 0xed, 0xc3, 0x5b, 0xb7,
- 0xb7, 0x15, 0xdc, 0xbe, 0xe9, 0x4c, 0xf6, 0x3e, 0x4c, 0x3f, 0x9e, 0xd3, 0x9a, 0x3b, 0xdc, 0xeb,
- 0xf6, 0xef, 0xbb, 0x1d, 0x6b, 0x4a, 0x0f, 0xcf, 0x1b, 0xf9, 0xbd, 0x81, 0xf7, 0xa1, 0x74, 0x56,
- 0xbf, 0x7e, 0xfb, 0xae, 0x5a, 0x7b, 0x28, 0xd5, 0x55, 0xfd, 0xa8, 0x3f, 0xfa, 0xf9, 0xed, 0x6e,
- 0x9d, 0xab, 0xe6, 0xf1, 0xc5, 0x55, 0xfd, 0xc0, 0xbb, 0x3d, 0x1e, 0x0e, 0x87, 0x9a, 0x26, 0xb5,
- 0xd7, 0xc8, 0x8e, 0xdf, 0xf7, 0x4c, 0x37, 0x68, 0x97, 0x4a, 0xe4, 0xaf, 0x16, 0xcc, 0x75, 0xdb,
- 0xa7, 0x84, 0x90, 0x37, 0xa7, 0x57, 0xe4, 0xcd, 0xc1, 0xe9, 0xc1, 0x45, 0xe7, 0x84, 0x9c, 0x5f,
- 0xed, 0x9e, 0x1c, 0xed, 0x11, 0xf8, 0xef, 0xe0, 0xb4, 0x7b, 0x40, 0x3e, 0x50, 0xcf, 0x37, 0x1d,
- 0x9b, 0x54, 0x15, 0x52, 0xd9, 0x26, 0xc7, 0x13, 0x9b, 0x92, 0x8a, 0xaa, 0x6e, 0xae, 0xa5, 0x1b,
- 0x38, 0x74, 0x3c, 0x62, 0x03, 0xd6, 0x9b, 0xf3, 0x93, 0xc2, 0x5d, 0x95, 0x4c, 0x7c, 0x98, 0xba,
- 0x0a, 0xcc, 0xf6, 0xf1, 0x98, 0x7a, 0x7d, 0x30, 0x22, 0x44, 0xa0, 0xfa, 0x64, 0x3c, 0xf1, 0x03,
- 0xd2, 0xa3, 0xc4, 0x9d, 0x78, 0x60, 0xce, 0x7c, 0x6a, 0x14, 0xc9, 0x1e, 0x18, 0x05, 0xbd, 0x1f,
- 0x90, 0x31, 0x18, 0x8c, 0x31, 0x37, 0x18, 0x7f, 0x35, 0xfb, 0x96, 0x33, 0x31, 0x8a, 0xd0, 0xc2,
- 0x5a, 0xdf, 0xd2, 0x7d, 0x9f, 0x21, 0x79, 0x8e, 0x65, 0x51, 0x6f, 0x3e, 0xf5, 0x35, 0x7b, 0x62,
- 0x59, 0x2d, 0x7f, 0xe6, 0x1f, 0xd9, 0x03, 0x47, 0x9b, 0x87, 0x2d, 0x51, 0x8d, 0xc3, 0x83, 0x11,
- 0x05, 0x83, 0xc4, 0x1e, 0xc7, 0xba, 0x69, 0x9f, 0xea, 0x77, 0xfc, 0xc5, 0xb1, 0x4f, 0x1c, 0xdd,
- 0xc8, 0xc9, 0x73, 0xc3, 0xe9, 0x4f, 0xc6, 0x60, 0xa3, 0x8a, 0x81, 0x19, 0x80, 0x69, 0x03, 0xcb,
- 0x78, 0x0a, 0x26, 0x2c, 0x27, 0xe7, 0xa5, 0xbf, 0xff, 0xed, 0xdf, 0xfe, 0x8b, 0xf4, 0x66, 0x24,
- 0x69, 0xbb, 0xfe, 0xfe, 0xb7, 0x7f, 0xfd, 0x77, 0x49, 0x99, 0x9a, 0xb6, 0xe1, 0x4c, 0x8b, 0x96,
- 0xd3, 0xd7, 0x03, 0xe0, 0x47, 0x11, 0x0d, 0x55, 0xd1, 0xb4, 0xfb, 0xd6, 0xc4, 0xa0, 0x7e, 0x4e,
- 0x2a, 0x57, 0x36, 0x8b, 0x2a, 0xfc, 0x5b, 0x96, 0xe4, 0xd7, 0xc1, 0xc8, 0xf4, 0x8b, 0x03, 0x1a,
- 0xf4, 0x47, 0xd0, 0x04, 0xb5, 0x80, 0x37, 0x27, 0xe6, 0x1d, 0xed, 0x52, 0xef, 0x8e, 0x7a, 0x39,
- 0xb9, 0xc9, 0x8a, 0xc7, 0xfa, 0x2d, 0xbd, 0xee, 0xe6, 0x64, 0x85, 0xbf, 0x45, 0xe4, 0xd3, 0x29,
- 0x11, 0xdd, 0xf2, 0x02, 0x31, 0x14, 0x00, 0x5f, 0xe2, 0x53, 0x02, 0x58, 0xec, 0x7b, 0x54, 0x0f,
- 0xe8, 0xdb, 0xcb, 0xf7, 0x27, 0x51, 0x2b, 0x1c, 0x3e, 0xa4, 0x01, 0xc3, 0x8d, 0xdb, 0x8e, 0x58,
- 0x80, 0x6d, 0xf3, 0xe7, 0x5c, 0xb2, 0x53, 0xfc, 0xa5, 0x56, 0x1a, 0x39, 0xdd, 0xf8, 0xc4, 0xa7,
- 0xde, 0xe1, 0xc4, 0xee, 0xd2, 0x60, 0xe2, 0xe6, 0xe4, 0x50, 0xf7, 0x67, 0x76, 0x9f, 0x3c, 0x3a,
- 0xbe, 0xb9, 0x45, 0x03, 0x02, 0x4c, 0x9d, 0xea, 0x66, 0x90, 0x63, 0x7f, 0x39, 0x6e, 0x4e, 0x2a,
- 0x8d, 0x4d, 0xbf, 0x5f, 0x62, 0xdd, 0x15, 0xbf, 0xf9, 0x60, 0xee, 0x65, 0x99, 0xfd, 0xe6, 0xe4,
- 0x16, 0x2d, 0xfa, 0xe0, 0x52, 0x72, 0xb9, 0xc1, 0xc4, 0xee, 0x23, 0x7b, 0x73, 0x30, 0x54, 0x79,
- 0xee, 0x41, 0x8f, 0x9e, 0x0d, 0x54, 0x07, 0xa3, 0xa2, 0xde, 0xf3, 0x73, 0xb4, 0xe8, 0xc8, 0x85,
- 0xf8, 0x2d, 0x80, 0xb7, 0x50, 0x96, 0x5b, 0x03, 0xc7, 0xcb, 0x61, 0x9f, 0x01, 0x71, 0x06, 0x84,
- 0xca, 0xa9, 0xb1, 0xe9, 0x86, 0xc1, 0xf9, 0x99, 0x0b, 0xe4, 0x16, 0x43, 0xd2, 0xe6, 0x42, 0x6d,
- 0x9a, 0xf3, 0x30, 0x6c, 0x05, 0x45, 0xf1, 0x56, 0xec, 0x39, 0xba, 0x67, 0x68, 0x12, 0xf5, 0xdd,
- 0x6a, 0x45, 0x52, 0x16, 0x70, 0xdb, 0x3b, 0x1b, 0x9c, 0x9b, 0xb6, 0xaf, 0xd5, 0xd4, 0x04, 0xd4,
- 0x35, 0xed, 0xcb, 0x99, 0x0b, 0x12, 0xfb, 0xf2, 0x35, 0xee, 0x9f, 0x6a, 0x6a, 0x8b, 0xee, 0xac,
- 0xd6, 0x6c, 0xd1, 0x7c, 0x5e, 0x5e, 0xad, 0xfa, 0x85, 0x7e, 0xd5, 0xd8, 0x58, 0x3c, 0x67, 0x62,
- 0x1b, 0xb9, 0xea, 0x4f, 0xfc, 0x05, 0x3c, 0xa5, 0x33, 0xce, 0xc1, 0xb0, 0xd8, 0x38, 0x3c, 0xda,
- 0xa7, 0xc0, 0xdb, 0x7d, 0xf0, 0x87, 0x30, 0x82, 0x48, 0x09, 0x21, 0x06, 0x38, 0x02, 0x27, 0xeb,
- 0xdd, 0xe9, 0x56, 0x82, 0x65, 0xf2, 0xbc, 0x1f, 0xcf, 0x91, 0x98, 0x01, 0x43, 0x6a, 0x53, 0x0f,
- 0x44, 0xc9, 0x5a, 0x00, 0x76, 0x29, 0x65, 0x5a, 0x7d, 0xb6, 0x1d, 0x3e, 0x9a, 0x2f, 0xaa, 0x52,
- 0x56, 0x2a, 0x4a, 0x55, 0xa9, 0x7d, 0x6d, 0x99, 0x83, 0x1c, 0xfd, 0xa2, 0xa6, 0x08, 0x4e, 0x93,
- 0xab, 0xa8, 0x9a, 0x86, 0x18, 0xbc, 0x72, 0xa0, 0x0d, 0x8f, 0x8c, 0x9c, 0x84, 0xa3, 0xe7, 0x8c,
- 0x95, 0x64, 0x6c, 0x02, 0x44, 0x1a, 0x0b, 0x0b, 0x98, 0x15, 0xec, 0x24, 0x08, 0x5e, 0xe1, 0x5a,
- 0x00, 0x5c, 0xa3, 0x5f, 0x82, 0x7c, 0x3d, 0xd5, 0x6b, 0xa5, 0xde, 0x58, 0x66, 0x54, 0xc6, 0xa8,
- 0x5d, 0x8f, 0x62, 0x98, 0xb2, 0x8b, 0x5d, 0xe7, 0x02, 0x85, 0xca, 0x61, 0x48, 0x2d, 0x30, 0x54,
- 0x42, 0x93, 0x73, 0x94, 0x71, 0x42, 0x55, 0xe5, 0x30, 0x9a, 0x87, 0x73, 0x24, 0x0f, 0x39, 0x3e,
- 0xf5, 0x65, 0xae, 0x76, 0x2d, 0xce, 0x85, 0x9c, 0x34, 0x0a, 0x02, 0xd7, 0x6f, 0x4a, 0x9a, 0xb6,
- 0x6c, 0x02, 0x5c, 0xcf, 0x09, 0x9c, 0xbe, 0x63, 0xbd, 0x96, 0xa6, 0xbe, 0x2f, 0x35, 0xe1, 0xaf,
- 0x04, 0x26, 0xa4, 0x59, 0x2a, 0x49, 0xf9, 0x15, 0x6b, 0xe1, 0xf8, 0x01, 0x86, 0x49, 0x79, 0xa9,
- 0x04, 0x58, 0x48, 0xb2, 0xef, 0x58, 0x14, 0xca, 0x87, 0x39, 0x89, 0x93, 0x40, 0x26, 0x9e, 0x25,
- 0x01, 0xa5, 0x8a, 0xa0, 0x82, 0xcd, 0xd7, 0x6b, 0xda, 0xeb, 0x3a, 0xfd, 0x5b, 0x1a, 0xe4, 0x16,
- 0x05, 0xc5, 0x9e, 0x69, 0xeb, 0xde, 0x0c, 0x75, 0x08, 0x82, 0x2e, 0xcf, 0xd3, 0x67, 0xbd, 0xc9,
- 0x60, 0x40, 0x3d, 0x29, 0x46, 0x00, 0x2b, 0x4a, 0x7d, 0xb4, 0xc0, 0x1a, 0xd5, 0xda, 0x38, 0x30,
- 0x5a, 0xc4, 0x80, 0x8a, 0x00, 0x57, 0x03, 0xdd, 0xee, 0x53, 0x98, 0x26, 0x1d, 0xac, 0xb7, 0xcb,
- 0xea, 0x45, 0x12, 0xc3, 0xfe, 0xae, 0x4c, 0x3b, 0xd8, 0x62, 0x65, 0xa2, 0x0e, 0x13, 0x1b, 0x88,
- 0x36, 0x88, 0x45, 0x4b, 0x33, 0x44, 0x4b, 0xd7, 0xd7, 0x53, 0xb3, 0x2e, 0xc5, 0x7e, 0x9c, 0xc9,
- 0x69, 0xee, 0x8b, 0xf7, 0xa8, 0x5f, 0x66, 0xb2, 0xbd, 0xd9, 0x3c, 0xd0, 0x8e, 0xbb, 0x67, 0xa7,
- 0x45, 0x17, 0x63, 0xdc, 0xa8, 0xfb, 0x10, 0xf8, 0x07, 0xa6, 0xc3, 0x91, 0xe7, 0x1c, 0x51, 0x89,
- 0x38, 0x47, 0x3d, 0x0f, 0x34, 0x29, 0xe2, 0x1d, 0x5a, 0x11, 0xc2, 0x40, 0x92, 0xe2, 0x28, 0x51,
- 0x5d, 0xa6, 0x71, 0xf8, 0xa7, 0x18, 0x00, 0xb3, 0xd6, 0xd7, 0xbf, 0x60, 0x50, 0x0c, 0x34, 0x4a,
- 0x8a, 0x84, 0xa4, 0xf0, 0x27, 0xd0, 0x3b, 0x7c, 0xf8, 0xba, 0xb0, 0xe5, 0x1c, 0x5d, 0x8e, 0x86,
- 0xfb, 0xaa, 0x1c, 0xcf, 0x70, 0x07, 0x2d, 0x4c, 0x86, 0xed, 0x74, 0x8a, 0xa6, 0x01, 0x3c, 0x82,
- 0xbf, 0xeb, 0xeb, 0x39, 0xa8, 0xa1, 0x02, 0x4b, 0x5e, 0xa7, 0x64, 0x8c, 0xc1, 0x3c, 0x56, 0xe6,
- 0xf5, 0x88, 0x6e, 0x81, 0x7d, 0x35, 0x66, 0x24, 0x9a, 0x9d, 0x40, 0x48, 0x10, 0x39, 0x86, 0x0c,
- 0xcb, 0xc5, 0xd9, 0xc7, 0xe4, 0x52, 0x34, 0x7d, 0x2e, 0x9f, 0x40, 0x4e, 0xf7, 0x00, 0xa1, 0x3b,
- 0x61, 0xda, 0x00, 0x7e, 0x18, 0xc8, 0xbe, 0x77, 0x69, 0x3f, 0xd5, 0x6e, 0xda, 0x92, 0x84, 0x61,
- 0x42, 0x5b, 0xc0, 0xd5, 0xfa, 0x5c, 0x57, 0x52, 0x2d, 0x02, 0x5f, 0x59, 0x09, 0x0b, 0xde, 0x61,
- 0x4e, 0x78, 0x33, 0xa6, 0x9f, 0x60, 0x34, 0x2e, 0xcd, 0x31, 0x75, 0x26, 0x41, 0x8e, 0x73, 0x5f,
- 0x29, 0xd7, 0x61, 0x26, 0x2d, 0xf4, 0x16, 0xc4, 0x94, 0x6c, 0xdd, 0x71, 0xa9, 0x9d, 0xd9, 0x38,
- 0x16, 0x60, 0x8b, 0x49, 0x64, 0x26, 0xc3, 0x4c, 0x6c, 0x21, 0x5d, 0x9c, 0xca, 0x1e, 0xfd, 0x75,
- 0x42, 0xfd, 0xe0, 0x18, 0x5d, 0x07, 0x65, 0x33, 0xf7, 0xe5, 0xce, 0x19, 0x24, 0x83, 0xaa, 0x07,
- 0x75, 0x5e, 0x65, 0x4c, 0x77, 0xa1, 0x82, 0x3e, 0xe4, 0x28, 0xf6, 0xd0, 0x1c, 0xc0, 0x2c, 0x10,
- 0x76, 0x18, 0x88, 0xf3, 0x29, 0x98, 0x9f, 0x80, 0x75, 0xbf, 0xe0, 0x24, 0xef, 0xde, 0xf4, 0xcf,
- 0x7a, 0xdf, 0x80, 0xdf, 0xf0, 0x2a, 0xa7, 0xbc, 0x11, 0x07, 0x17, 0x6f, 0xe9, 0xcc, 0xcf, 0x45,
- 0x1a, 0xe5, 0x80, 0x9d, 0x0c, 0xbe, 0x2a, 0x36, 0xe8, 0x8b, 0xef, 0x5a, 0xe0, 0x23, 0xa5, 0xa2,
- 0x04, 0x5c, 0xd5, 0x52, 0xd2, 0x1f, 0xc0, 0x80, 0x3e, 0xe8, 0x5e, 0xce, 0x86, 0x79, 0xa7, 0xd8,
- 0x5f, 0xca, 0x5f, 0xd9, 0x44, 0xf4, 0xe5, 0xf9, 0x9d, 0xee, 0xe1, 0xb8, 0x2f, 0x9d, 0x3d, 0x8c,
- 0x8a, 0x00, 0x92, 0x12, 0xac, 0xc3, 0x55, 0x45, 0x12, 0xc6, 0x14, 0x6c, 0x56, 0x00, 0x1a, 0xc9,
- 0x5a, 0x8e, 0x82, 0x25, 0x40, 0x09, 0x43, 0xc1, 0xaf, 0x85, 0xe5, 0x64, 0xb3, 0x7f, 0x11, 0x62,
- 0x31, 0x03, 0x15, 0x90, 0xab, 0xa3, 0xd3, 0xcb, 0xad, 0x5f, 0xde, 0x77, 0x3e, 0x6a, 0x95, 0x7a,
- 0x5d, 0xc1, 0xb7, 0x72, 0x83, 0xbd, 0x36, 0xea, 0xf5, 0x6a, 0xbd, 0x15, 0x79, 0x0c, 0x82, 0x16,
- 0x81, 0xc6, 0xee, 0x3a, 0x8e, 0xae, 0x20, 0x12, 0x39, 0xb0, 0x28, 0x3e, 0xee, 0xce, 0x18, 0x46,
- 0x18, 0xd7, 0xe8, 0x1f, 0x64, 0x55, 0xe0, 0x51, 0x87, 0xa8, 0x93, 0xc2, 0x37, 0xfd, 0x13, 0x67,
- 0x0a, 0xe9, 0x91, 0x8e, 0xa6, 0x21, 0xae, 0x48, 0x8b, 0x81, 0xb3, 0x80, 0xcb, 0xe0, 0x81, 0x12,
- 0x35, 0x20, 0x7b, 0xdd, 0xd3, 0x5d, 0x21, 0x21, 0x89, 0x8b, 0x54, 0x7a, 0xa5, 0xe1, 0xdc, 0x66,
- 0x71, 0x02, 0x6f, 0x43, 0x92, 0x84, 0xe0, 0xe1, 0x21, 0x9e, 0xe6, 0xe0, 0x9b, 0x9c, 0x1d, 0x50,
- 0x3d, 0x6a, 0x0f, 0x83, 0x51, 0xcb, 0x01, 0x47, 0x04, 0x26, 0xd0, 0x79, 0x1d, 0xe4, 0x35, 0x08,
- 0xbb, 0x20, 0x07, 0xef, 0x04, 0xc0, 0x69, 0xe8, 0xfb, 0xca, 0x75, 0xa3, 0xbe, 0x9b, 0xaf, 0x52,
- 0x24, 0x2e, 0xd0, 0xe4, 0xf5, 0xf5, 0xec, 0x92, 0x42, 0x59, 0x96, 0xb1, 0x49, 0x89, 0x48, 0xf9,
- 0x04, 0x7e, 0x53, 0x2a, 0x80, 0xd8, 0x12, 0x80, 0xdf, 0x7e, 0x93, 0x7e, 0x49, 0x43, 0x44, 0xad,
- 0x66, 0x9a, 0x9e, 0x96, 0x60, 0x4a, 0x90, 0xe4, 0x5a, 0xac, 0x97, 0x82, 0x65, 0xaf, 0xd2, 0x46,
- 0x84, 0x02, 0x75, 0x39, 0x9c, 0xb0, 0xaf, 0xa0, 0x03, 0x78, 0x94, 0xa2, 0xaa, 0xa8, 0x39, 0x82,
- 0x51, 0xd0, 0xbf, 0xc3, 0x5a, 0x49, 0xc0, 0xe4, 0x84, 0x68, 0x58, 0x70, 0xd7, 0xb1, 0x8d, 0x83,
- 0x7b, 0xda, 0x9f, 0x04, 0x14, 0xed, 0x3d, 0xd8, 0x60, 0x5b, 0xe1, 0x96, 0x00, 0x3c, 0x3e, 0x0b,
- 0xfe, 0x68, 0x3e, 0x50, 0xe6, 0x63, 0x1a, 0x8c, 0x1c, 0xa3, 0x29, 0x81, 0x62, 0x48, 0xa1, 0x8c,
- 0xf1, 0x2a, 0x4c, 0x60, 0xad, 0x0d, 0x61, 0xdd, 0xed, 0x6b, 0x90, 0x25, 0xbd, 0x0f, 0x80, 0x91,
- 0x39, 0x7f, 0x7d, 0x1d, 0xe6, 0xec, 0xa1, 0x09, 0x76, 0x52, 0xca, 0x07, 0x79, 0x89, 0x19, 0xb4,
- 0x01, 0x7a, 0x7f, 0x98, 0x27, 0x12, 0x06, 0x8d, 0x51, 0xc5, 0xb9, 0x9d, 0x73, 0xd0, 0x22, 0xc8,
- 0x45, 0xee, 0x26, 0x12, 0xe1, 0xa3, 0x3c, 0x67, 0xcd, 0x38, 0x8a, 0x74, 0x80, 0x86, 0x03, 0x2c,
- 0x6d, 0x10, 0x80, 0x02, 0x60, 0x8b, 0xb2, 0x92, 0xb4, 0x2d, 0x58, 0x5d, 0xc6, 0xf9, 0xa6, 0x5b,
- 0xd6, 0x2c, 0x07, 0x4a, 0xd4, 0x9e, 0x87, 0x72, 0xb8, 0xb6, 0x53, 0x12, 0x89, 0x52, 0x9c, 0x31,
- 0xad, 0xfd, 0xe9, 0x52, 0x26, 0x96, 0x06, 0xcc, 0x93, 0xa1, 0xfc, 0x9c, 0xf9, 0xee, 0x9e, 0x63,
- 0xcc, 0x24, 0x19, 0xec, 0x23, 0x98, 0x5b, 0x84, 0xe7, 0xb5, 0x9b, 0x1d, 0xb7, 0xbd, 0x63, 0xe9,
- 0x3d, 0x6a, 0xb5, 0x59, 0xa5, 0x9d, 0x12, 0x7f, 0x21, 0xff, 0x62, 0x03, 0xa5, 0xc0, 0x02, 0x6a,
- 0x81, 0x02, 0x88, 0x05, 0x20, 0x96, 0x66, 0x14, 0x38, 0x48, 0x22, 0xe0, 0xf9, 0x96, 0x20, 0xe0,
- 0x50, 0x46, 0xba, 0x0d, 0xd1, 0x87, 0x94, 0x88, 0xcc, 0x78, 0x6e, 0xe2, 0x47, 0xb9, 0x09, 0x33,
- 0x49, 0x10, 0x76, 0x4e, 0xa8, 0x2c, 0xb5, 0x79, 0x27, 0xd0, 0x8d, 0xe3, 0x32, 0x8d, 0x62, 0x70,
- 0x0d, 0xa6, 0xac, 0xee, 0xe1, 0xca, 0x8f, 0xd4, 0xee, 0xc2, 0xd3, 0x2e, 0x3c, 0xed, 0x94, 0x38,
- 0xc6, 0x53, 0x35, 0x2c, 0x73, 0x38, 0x0a, 0x78, 0x95, 0x13, 0x7c, 0x7c, 0xae, 0xce, 0xd4, 0x02,
- 0x2f, 0xd9, 0xbe, 0x3e, 0x39, 0xd8, 0x7f, 0x0e, 0x73, 0x08, 0x33, 0x86, 0x82, 0xcb, 0x6a, 0xbf,
- 0xe1, 0x0f, 0xcf, 0xe1, 0x83, 0x47, 0x96, 0xda, 0xfb, 0xf4, 0xee, 0x39, 0x3c, 0x41, 0xf1, 0x8b,
- 0xa8, 0x35, 0x74, 0xef, 0x16, 0x1b, 0x85, 0x08, 0x18, 0x47, 0xf8, 0x1c, 0x7a, 0x0f, 0xfe, 0x4a,
- 0xed, 0x5d, 0xf8, 0xfb, 0x1c, 0x26, 0x64, 0x25, 0xd0, 0x30, 0x44, 0x75, 0xb7, 0xcf, 0x32, 0xd9,
- 0xd5, 0xfb, 0x28, 0x13, 0xfc, 0x79, 0x0e, 0xd7, 0x9e, 0xe9, 0xc0, 0xaf, 0x53, 0xf8, 0xbb, 0x8a,
- 0x59, 0xe2, 0xfa, 0xd2, 0xde, 0x81, 0x06, 0xed, 0x36, 0xf9, 0x0d, 0x21, 0xf8, 0xb4, 0x63, 0xda,
- 0xee, 0x04, 0x2c, 0x32, 0x8b, 0x6f, 0x7b, 0x93, 0x20, 0xc0, 0x75, 0x41, 0xd1, 0x1e, 0x73, 0x7a,
- 0x66, 0xff, 0xea, 0x88, 0xeb, 0x5d, 0x2f, 0xf1, 0x8e, 0x61, 0x8c, 0xd9, 0xbf, 0xc5, 0x95, 0x4c,
- 0xe6, 0xdb, 0x30, 0xba, 0xc8, 0x6d, 0xfc, 0x38, 0xcf, 0x0c, 0x0d, 0x3c, 0xea, 0x5a, 0x40, 0x3e,
- 0xa4, 0xa4, 0xe0, 0xf7, 0x26, 0xa6, 0x84, 0x66, 0x25, 0xdc, 0x20, 0xca, 0xc6, 0x2f, 0x40, 0xd4,
- 0x60, 0x43, 0x6e, 0x49, 0xed, 0x9d, 0x12, 0xa3, 0x23, 0x41, 0xaf, 0xdb, 0xbe, 0x09, 0x63, 0x05,
- 0xa6, 0x72, 0x3a, 0x42, 0x89, 0x0a, 0x58, 0x88, 0x84, 0x9d, 0x59, 0xdd, 0xc0, 0xf1, 0x60, 0x4a,
- 0xb3, 0x24, 0x2b, 0xa0, 0xe3, 0x1c, 0x9f, 0x25, 0xac, 0x3c, 0x76, 0x78, 0xd1, 0x83, 0x70, 0x79,
- 0x45, 0x36, 0x6f, 0x71, 0x2d, 0x02, 0x3c, 0xd9, 0x22, 0x8f, 0x17, 0x81, 0x68, 0xaa, 0xd5, 0x61,
- 0xba, 0x55, 0x16, 0x83, 0x4b, 0x68, 0x70, 0xc1, 0xc5, 0xa1, 0x25, 0x67, 0x13, 0x3d, 0x35, 0x2f,
- 0x65, 0x3e, 0xdf, 0x34, 0x8c, 0xa0, 0x52, 0xe6, 0x2d, 0x98, 0x59, 0xb4, 0xbd, 0xd6, 0xf4, 0x1c,
- 0x27, 0x50, 0xd8, 0xdf, 0x62, 0x34, 0xf3, 0xe6, 0x85, 0x42, 0x6f, 0x58, 0x80, 0x0c, 0xc7, 0xf1,
- 0x9a, 0x3f, 0x94, 0x2b, 0xf8, 0x6f, 0xab, 0x50, 0x40, 0x3b, 0x1d, 0x01, 0xfb, 0x03, 0x43, 0xdd,
- 0x6e, 0x20, 0x70, 0x14, 0x83, 0x2a, 0x9b, 0xb4, 0x81, 0xa0, 0x55, 0x48, 0xcf, 0xf1, 0x0c, 0xea,
- 0xc5, 0x60, 0x43, 0x37, 0x1a, 0x3a, 0x80, 0x39, 0x81, 0x71, 0x3f, 0xfa, 0x96, 0x3e, 0x18, 0x00,
- 0x98, 0x99, 0xa0, 0x08, 0xba, 0x55, 0xed, 0xd7, 0x69, 0x0f, 0xa0, 0xcc, 0x40, 0xda, 0x31, 0x76,
- 0x7d, 0x7b, 0x4b, 0xaf, 0x55, 0x01, 0x3e, 0x00, 0x5b, 0x53, 0xf0, 0xcd, 0x07, 0xda, 0x2c, 0xab,
- 0xee, 0x7d, 0xb8, 0x18, 0x08, 0x9b, 0x5e, 0xc9, 0x91, 0x58, 0xa6, 0x4d, 0x75, 0xaf, 0x00, 0xd3,
- 0xd9, 0x30, 0x31, 0xce, 0x08, 0x1c, 0xd2, 0x73, 0x40, 0xcd, 0xc6, 0x0a, 0xf9, 0x61, 0x30, 0xe8,
- 0xd1, 0x6a, 0x95, 0xa8, 0x7f, 0x81, 0xe7, 0x5e, 0x43, 0x1d, 0x34, 0x2a, 0x04, 0xd2, 0xc4, 0xbf,
- 0xc8, 0x4b, 0xc3, 0x56, 0xab, 0xf8, 0x6f, 0x6a, 0xd8, 0x1c, 0x7b, 0xab, 0x9c, 0x1c, 0x38, 0x87,
- 0xad, 0x0c, 0xbc, 0xc1, 0x98, 0x91, 0x1e, 0xf5, 0x21, 0xfb, 0x67, 0x65, 0xd4, 0x0d, 0xda, 0xdb,
- 0x7a, 0x74, 0x74, 0x68, 0xba, 0x9e, 0x17, 0xd1, 0x80, 0x31, 0x33, 0x26, 0xd4, 0x1b, 0xf6, 0x72,
- 0x18, 0xcd, 0x91, 0x72, 0x43, 0x55, 0x88, 0x2a, 0x27, 0xe8, 0xcd, 0x28, 0x4a, 0x11, 0x9e, 0x51,
- 0x9e, 0x1a, 0x44, 0x46, 0x79, 0x26, 0xdd, 0xc2, 0x90, 0xbe, 0x54, 0x26, 0xdb, 0x9b, 0xdb, 0x95,
- 0xed, 0x1a, 0x97, 0x49, 0x6d, 0xb3, 0x56, 0xaf, 0x65, 0xcb, 0x64, 0xd0, 0x1b, 0xd4, 0x06, 0xb5,
- 0x94, 0x4c, 0x2a, 0xe5, 0xda, 0x56, 0xa5, 0x97, 0x94, 0x48, 0x0c, 0x49, 0x4b, 0x24, 0x06, 0xa7,
- 0x85, 0x12, 0x83, 0xd3, 0xc3, 0x48, 0x02, 0x0a, 0x7e, 0x73, 0x2b, 0x1e, 0x18, 0x58, 0xfc, 0x3f,
- 0xfd, 0x94, 0x59, 0x99, 0x2e, 0x91, 0x02, 0x25, 0x86, 0x50, 0xae, 0x54, 0x93, 0xc4, 0xaa, 0xec,
- 0x9f, 0xd4, 0x88, 0x1a, 0x46, 0x63, 0xab, 0xa1, 0xb3, 0xd9, 0x90, 0x26, 0x35, 0x2a, 0x88, 0x38,
- 0x06, 0xfe, 0xec, 0x79, 0x96, 0x35, 0xb6, 0x1b, 0xc6, 0xa6, 0x21, 0xaa, 0xa0, 0x4f, 0x4b, 0x55,
- 0x51, 0xeb, 0xd5, 0xed, 0xc6, 0xee, 0x52, 0x95, 0x83, 0xcd, 0xc3, 0xf2, 0xe1, 0xc1, 0xcb, 0x67,
- 0x68, 0x9a, 0xca, 0x08, 0x55, 0x74, 0x89, 0xce, 0x71, 0x89, 0x25, 0x7d, 0xdd, 0xa8, 0x2d, 0x75,
- 0x49, 0x37, 0xeb, 0xb5, 0x2d, 0x75, 0xa5, 0x2d, 0x0e, 0x8e, 0x0c, 0x12, 0x7a, 0xcd, 0x34, 0xf5,
- 0x9c, 0x73, 0x49, 0x45, 0xae, 0xf4, 0x8c, 0x32, 0x93, 0xfd, 0xb0, 0x30, 0xf1, 0xac, 0x26, 0xfc,
- 0x97, 0xdb, 0x60, 0x3b, 0x62, 0xb8, 0xa7, 0x67, 0x72, 0x3f, 0x56, 0x72, 0x20, 0xbd, 0x07, 0xe9,
- 0x05, 0x10, 0xdd, 0x8d, 0xa3, 0x0d, 0xb2, 0x8d, 0x78, 0xca, 0x0d, 0xf4, 0xb1, 0x69, 0xcd, 0x9a,
- 0x1b, 0xe7, 0x1e, 0x85, 0x40, 0x10, 0x43, 0x85, 0x80, 0x54, 0xce, 0x37, 0x94, 0xfe, 0x04, 0x42,
- 0xd3, 0x3b, 0x2a, 0xa8, 0x41, 0xf7, 0x9c, 0x26, 0xa6, 0x5c, 0xad, 0x36, 0x36, 0x33, 0x0d, 0xc8,
- 0x1f, 0x40, 0xcc, 0x9e, 0x33, 0x36, 0xfb, 0xe4, 0x94, 0x4e, 0xe8, 0x82, 0x10, 0xf4, 0x44, 0xcc,
- 0x01, 0xa5, 0x76, 0x26, 0xd8, 0xba, 0x3c, 0x73, 0xbb, 0x51, 0xe8, 0xc7, 0x82, 0xe7, 0x81, 0x29,
- 0xa0, 0x04, 0xd7, 0xa9, 0x6d, 0xfd, 0xae, 0xf8, 0xcd, 0x67, 0x05, 0x40, 0x90, 0x28, 0xa8, 0xa8,
- 0x95, 0x5a, 0xb9, 0xac, 0xd6, 0x19, 0x18, 0xdc, 0xbc, 0xc3, 0xc1, 0x7c, 0x0d, 0xaf, 0x54, 0x1a,
- 0x9a, 0xc1, 0x68, 0xd2, 0xc3, 0x18, 0xb9, 0x44, 0xa7, 0xce, 0xd4, 0x2c, 0x45, 0xed, 0x2b, 0xc4,
- 0x9f, 0xf4, 0xc6, 0x66, 0x40, 0x78, 0xec, 0xea, 0x13, 0xb0, 0x40, 0x18, 0xa4, 0x12, 0xd6, 0xa7,
- 0xee, 0x93, 0xf3, 0x0b, 0x06, 0x4b, 0xd7, 0x62, 0xbd, 0x74, 0xd8, 0xc6, 0xa7, 0xff, 0x92, 0x5e,
- 0x4a, 0x38, 0x15, 0xcd, 0xc0, 0x2f, 0x21, 0xfd, 0xac, 0xf2, 0x9e, 0xe3, 0xce, 0x3c, 0x9c, 0x72,
- 0xe4, 0x7f, 0xfe, 0x93, 0x11, 0x4f, 0xde, 0xb0, 0xca, 0xf1, 0xc0, 0x21, 0xd4, 0xc7, 0x2a, 0x44,
- 0xf4, 0xf2, 0x67, 0xca, 0x42, 0xd6, 0x4a, 0x3f, 0xfd, 0xb4, 0x46, 0x7e, 0xc2, 0x3c, 0x84, 0x09,
- 0x8c, 0x24, 0x54, 0x86, 0xb0, 0x50, 0x07, 0x4b, 0xcf, 0x3d, 0xf3, 0x0e, 0xc5, 0xe7, 0xb2, 0xe4,
- 0xd0, 0x27, 0xba, 0x07, 0xcf, 0x10, 0xa4, 0x99, 0xf7, 0xd4, 0x20, 0x53, 0x60, 0x06, 0xd1, 0xc9,
- 0xc6, 0x0f, 0x1b, 0xc4, 0x47, 0x81, 0xd0, 0x19, 0x80, 0x2c, 0x0b, 0xe9, 0x18, 0x43, 0x86, 0x3f,
- 0x06, 0xe3, 0x65, 0xe0, 0x7e, 0x0d, 0x94, 0x90, 0x1e, 0x64, 0x88, 0x90, 0x6a, 0x40, 0x9b, 0x25,
- 0x91, 0x00, 0x89, 0xed, 0x0e, 0x32, 0x5f, 0x5b, 0x23, 0x24, 0x99, 0x07, 0x01, 0x04, 0xb5, 0x02,
- 0xe3, 0x2a, 0x4c, 0x86, 0x88, 0x46, 0x12, 0x89, 0x51, 0x6b, 0x8d, 0x15, 0xe2, 0x0b, 0x0f, 0xc8,
- 0x4e, 0x4c, 0x18, 0x79, 0x5e, 0x23, 0x92, 0x51, 0x18, 0x58, 0xf4, 0x9e, 0xe0, 0x1f, 0x9c, 0x1c,
- 0x93, 0xb1, 0x2d, 0x25, 0x91, 0xe3, 0x84, 0x0a, 0x91, 0x6f, 0x76, 0x5e, 0x15, 0x0a, 0xa4, 0x03,
- 0x04, 0x05, 0x6c, 0x4c, 0x3a, 0xf1, 0x71, 0x03, 0x5c, 0x0f, 0x18, 0xad, 0x81, 0xe3, 0x12, 0xbd,
- 0xe7, 0xdc, 0x51, 0xf6, 0xc6, 0x98, 0x03, 0xea, 0x6c, 0x0e, 0x79, 0x8c, 0x0a, 0xd5, 0x2c, 0x67,
- 0xca, 0x8a, 0x46, 0x94, 0x29, 0x07, 0x6a, 0xde, 0xbd, 0x8b, 0x0b, 0x71, 0x77, 0xd0, 0x20, 0xf0,
- 0x10, 0x92, 0x55, 0x04, 0x0e, 0x40, 0x33, 0x74, 0x7b, 0x16, 0x6d, 0xba, 0x93, 0x35, 0xae, 0xee,
- 0x04, 0xa4, 0xea, 0x8f, 0x3c, 0xdc, 0x5c, 0x37, 0x71, 0xc5, 0x92, 0x02, 0x4f, 0x41, 0x97, 0x21,
- 0x91, 0x1e, 0x61, 0x12, 0x0c, 0x15, 0xfd, 0x11, 0x74, 0x00, 0xbd, 0x62, 0x1f, 0x7a, 0x82, 0xc8,
- 0x42, 0xa1, 0x0d, 0x6d, 0xec, 0x18, 0xe6, 0x1d, 0x8b, 0xb0, 0x79, 0x91, 0xc4, 0xa5, 0x05, 0x89,
- 0x1e, 0x33, 0x0b, 0x14, 0xf7, 0x0c, 0x08, 0x18, 0x04, 0xbe, 0x26, 0xd7, 0x66, 0x9d, 0xb2, 0xe1,
- 0x9e, 0x63, 0x54, 0xbd, 0x68, 0x93, 0x20, 0x3e, 0xf6, 0xa2, 0x13, 0x57, 0x37, 0x0c, 0x10, 0x15,
- 0xb6, 0xcb, 0x04, 0x09, 0x7c, 0x98, 0x42, 0x16, 0x4f, 0xcc, 0x60, 0x83, 0xd1, 0x85, 0x22, 0xf7,
- 0x71, 0x04, 0x8b, 0xca, 0x8c, 0x9e, 0x48, 0xda, 0x23, 0x13, 0xea, 0xdb, 0x9c, 0x3a, 0x41, 0x9f,
- 0xa0, 0xc9, 0xd5, 0x0b, 0x55, 0x92, 0x20, 0x4c, 0x6a, 0xfb, 0xce, 0x38, 0x49, 0xc0, 0x4e, 0x09,
- 0xb0, 0xd9, 0xa8, 0xa2, 0x87, 0x35, 0x41, 0xee, 0xfb, 0x34, 0xdf, 0x49, 0x4f, 0xf7, 0x08, 0xa8,
- 0x36, 0x90, 0xcb, 0xb5, 0x4f, 0x30, 0x1f, 0xd9, 0x0e, 0x44, 0x03, 0xab, 0x81, 0x87, 0xba, 0x35,
- 0xd5, 0x67, 0x3e, 0xb9, 0x33, 0x7d, 0xb3, 0x07, 0x96, 0x61, 0x89, 0x5f, 0x28, 0xc9, 0x02, 0xb4,
- 0x18, 0x73, 0x4c, 0xa8, 0x8c, 0x0e, 0x6e, 0xd5, 0x66, 0x06, 0x32, 0xe8, 0x8f, 0xb8, 0x02, 0x71,
- 0xf9, 0x14, 0x54, 0x4c, 0x35, 0x18, 0x5d, 0x29, 0xaa, 0xd8, 0xe0, 0x51, 0xaa, 0xf0, 0xe2, 0x33,
- 0xa6, 0xb8, 0x30, 0x33, 0x63, 0x39, 0x23, 0x49, 0x60, 0x99, 0x2c, 0x20, 0x84, 0x2e, 0xa9, 0x03,
- 0x63, 0xe0, 0x9d, 0x6e, 0x5a, 0x78, 0xd2, 0x83, 0xf4, 0x3c, 0xc7, 0x9f, 0x82, 0xb4, 0x98, 0xe3,
- 0x29, 0x92, 0x33, 0x50, 0x9f, 0x01, 0xea, 0x16, 0x8c, 0x04, 0x12, 0x93, 0x58, 0x5f, 0xa0, 0x2e,
- 0xe7, 0x30, 0x0e, 0x54, 0x8f, 0x95, 0x8c, 0x80, 0x4d, 0x86, 0xfc, 0x1d, 0xf9, 0x62, 0xd3, 0x3b,
- 0x6c, 0x06, 0xd4, 0xc6, 0x57, 0x60, 0x38, 0xd0, 0x06, 0xd3, 0x24, 0xe8, 0x6c, 0x00, 0xae, 0x04,
- 0x8a, 0x30, 0x64, 0xa3, 0x82, 0x71, 0x42, 0xcb, 0x79, 0x08, 0x97, 0xc5, 0xa3, 0x98, 0x3f, 0x8c,
- 0x15, 0x43, 0xcf, 0x99, 0x16, 0xca, 0xc4, 0x11, 0xc4, 0x15, 0x38, 0x29, 0x49, 0xc5, 0x62, 0x3c,
- 0x89, 0x07, 0x8f, 0xbc, 0xe1, 0x72, 0xf2, 0x29, 0x00, 0x21, 0x88, 0x98, 0xc1, 0xec, 0x32, 0x68,
- 0x52, 0x96, 0xc8, 0x21, 0x5d, 0xf0, 0x71, 0x00, 0xd3, 0x81, 0xb1, 0xa5, 0x1f, 0x80, 0xcf, 0xe1,
- 0x9c, 0x4c, 0xa9, 0x52, 0x2c, 0x3a, 0xd1, 0xc5, 0xb2, 0xf8, 0x46, 0x05, 0x88, 0x38, 0x05, 0x3d,
- 0x89, 0x2a, 0xbc, 0xf7, 0x94, 0xbc, 0x53, 0xa2, 0x5d, 0x8c, 0x68, 0x56, 0xd0, 0x27, 0x81, 0xb3,
- 0x68, 0x21, 0xd2, 0xc4, 0x54, 0x73, 0x48, 0x57, 0x26, 0x63, 0x92, 0x8d, 0x96, 0x57, 0x1a, 0x25,
- 0xcc, 0x81, 0x42, 0xe2, 0x0b, 0xa1, 0x62, 0xa1, 0x07, 0xe3, 0xbd, 0x6d, 0x12, 0xf6, 0x53, 0x40,
- 0x88, 0xd4, 0x5e, 0x5b, 0xed, 0x74, 0xa1, 0x71, 0x82, 0xbf, 0x97, 0xe8, 0xea, 0x50, 0xbb, 0x6d,
- 0xb0, 0x33, 0xfa, 0xd8, 0x05, 0xcd, 0x71, 0x06, 0x6c, 0xda, 0x0e, 0x29, 0x9f, 0xad, 0x51, 0xaf,
- 0xcc, 0x0b, 0x72, 0xb5, 0x48, 0xd8, 0x22, 0x05, 0xed, 0xcc, 0xcc, 0x99, 0x80, 0x9a, 0x80, 0xf8,
- 0x59, 0x85, 0x98, 0xc1, 0xd0, 0xfe, 0x0b, 0x38, 0xcd, 0x58, 0xfc, 0x38, 0xc3, 0x46, 0xe5, 0x68,
- 0x98, 0x7c, 0x52, 0x36, 0xeb, 0x74, 0x2c, 0xb5, 0xdf, 0x52, 0xc8, 0x17, 0x40, 0x0d, 0xcf, 0x6c,
- 0xba, 0x53, 0x1a, 0x95, 0x5f, 0x88, 0x7d, 0x39, 0x75, 0xbe, 0x07, 0x7b, 0xe4, 0xd1, 0xef, 0x69,
- 0xfd, 0xd0, 0x99, 0x78, 0xdf, 0x83, 0x0e, 0x1a, 0xb9, 0x40, 0x4f, 0xc8, 0x08, 0xf9, 0xf7, 0x3d,
- 0x02, 0xe2, 0xe6, 0x00, 0xd5, 0x1c, 0xd8, 0x6a, 0x7a, 0xc2, 0x56, 0xdc, 0xc7, 0x76, 0x14, 0xbc,
- 0xeb, 0x24, 0x10, 0x92, 0x83, 0x8e, 0xff, 0x70, 0x89, 0x89, 0x49, 0x1b, 0x8d, 0xb5, 0xa7, 0xf7,
- 0x6f, 0x87, 0x6c, 0xcf, 0x56, 0xc4, 0x91, 0x64, 0xe8, 0xd1, 0x99, 0xb4, 0x18, 0x9b, 0xe0, 0x0e,
- 0x73, 0x1b, 0x40, 0x98, 0xce, 0xb4, 0x9c, 0x50, 0xbe, 0x12, 0x82, 0x4e, 0x83, 0x79, 0x2d, 0x16,
- 0x00, 0x70, 0xc3, 0x0e, 0x64, 0xf6, 0x47, 0xa6, 0x65, 0x78, 0x60, 0xa5, 0x22, 0x0f, 0xc6, 0xe8,
- 0xe6, 0x86, 0x39, 0xd0, 0x6f, 0x91, 0x9f, 0x13, 0x97, 0x1b, 0xa5, 0x09, 0xe8, 0x27, 0x3b, 0xc7,
- 0xc6, 0x2c, 0x81, 0xb0, 0xe4, 0xe9, 0x7e, 0x93, 0xf3, 0x2f, 0x63, 0xbe, 0x0b, 0xa3, 0x2d, 0xdc,
- 0xdd, 0x37, 0x08, 0x7f, 0xcc, 0xc1, 0x2c, 0x76, 0x32, 0x91, 0xe5, 0x44, 0xf9, 0xb6, 0x2f, 0x29,
- 0x44, 0x08, 0x7b, 0xc2, 0x3c, 0x1d, 0x62, 0xd7, 0xd7, 0xac, 0xeb, 0x3c, 0x79, 0x4b, 0xf9, 0xb2,
- 0x5e, 0x42, 0x1f, 0x62, 0x11, 0xaf, 0x0a, 0x7b, 0xc5, 0x43, 0x1d, 0x72, 0xdb, 0x9a, 0x0c, 0x1d,
- 0x84, 0x51, 0x15, 0x91, 0x51, 0xca, 0x51, 0x2d, 0x19, 0x5a, 0x6e, 0x98, 0x1f, 0x31, 0x4d, 0x49,
- 0x57, 0xce, 0x9e, 0x03, 0x6f, 0x62, 0xf7, 0x59, 0x20, 0x06, 0x0e, 0x55, 0x6a, 0xaf, 0xf7, 0x21,
- 0x32, 0x6d, 0x11, 0xb6, 0x3a, 0x27, 0x5a, 0xd8, 0x40, 0xd0, 0x46, 0x5b, 0xac, 0xd3, 0xa5, 0xce,
- 0xc8, 0xfc, 0xef, 0x7f, 0xfc, 0x37, 0x29, 0xb0, 0x98, 0x15, 0x20, 0xca, 0x22, 0x78, 0x45, 0xde,
- 0xc7, 0x4b, 0xb1, 0x28, 0x25, 0x11, 0x4e, 0x1a, 0x04, 0x14, 0x03, 0x7a, 0xe6, 0x61, 0xa7, 0x18,
- 0xf6, 0x0d, 0xd7, 0x77, 0x08, 0x50, 0xaf, 0x5c, 0x16, 0xd1, 0xe3, 0x70, 0xfb, 0x71, 0x80, 0x0c,
- 0x51, 0x02, 0x54, 0x8e, 0x82, 0x16, 0x3e, 0x38, 0x56, 0x21, 0x5e, 0x4e, 0xfb, 0x75, 0x42, 0xbd,
- 0x59, 0x97, 0x65, 0x5f, 0x8e, 0x97, 0xdb, 0xf8, 0x41, 0x78, 0xa6, 0x22, 0xa3, 0x5b, 0x2c, 0x78,
- 0x5f, 0xe2, 0x94, 0xd0, 0x08, 0xee, 0x77, 0xed, 0x43, 0x1f, 0x39, 0x19, 0x97, 0xd2, 0x50, 0x64,
- 0x9f, 0xa8, 0xee, 0xe5, 0x64, 0x68, 0x30, 0x04, 0x0a, 0x20, 0x5a, 0xd9, 0x85, 0x90, 0x6e, 0x0d,
- 0x29, 0x62, 0x51, 0x2c, 0x81, 0x48, 0xb5, 0x4b, 0x83, 0xa4, 0x1b, 0xe1, 0x11, 0x2f, 0x2f, 0xfa,
- 0xab, 0xab, 0x7b, 0xfa, 0x98, 0xcc, 0xf9, 0x4e, 0x49, 0x18, 0xed, 0xf3, 0x42, 0x00, 0x98, 0x44,
- 0x2b, 0xc1, 0x5f, 0xf4, 0xba, 0xbc, 0x01, 0xce, 0x3b, 0xb6, 0x8b, 0x39, 0x8e, 0x1f, 0xa3, 0xd0,
- 0x14, 0x26, 0x67, 0xee, 0x55, 0x12, 0xcc, 0xf7, 0x6f, 0x38, 0x87, 0xd8, 0xea, 0xf9, 0x0f, 0xcb,
- 0xad, 0xc0, 0xa8, 0x16, 0x15, 0x38, 0x62, 0xe6, 0x42, 0xe4, 0x46, 0xb2, 0xe2, 0x91, 0xb1, 0xa1,
- 0x24, 0xaa, 0x15, 0x4d, 0x23, 0x8a, 0x7f, 0xd3, 0x62, 0x58, 0x0a, 0x51, 0x9f, 0xe0, 0x3b, 0xc4,
- 0xae, 0xc0, 0xfa, 0x28, 0x10, 0x22, 0x45, 0xc0, 0x98, 0x14, 0x4c, 0xe8, 0x18, 0x24, 0x00, 0x8e,
- 0xf8, 0x40, 0xef, 0x8f, 0x72, 0x08, 0x43, 0x5a, 0x88, 0xd6, 0x16, 0xe3, 0xe5, 0x23, 0x8e, 0xe0,
- 0x6c, 0x03, 0x1f, 0xe8, 0x65, 0x3b, 0xf1, 0x44, 0xd3, 0x1e, 0x19, 0x31, 0xdf, 0xa8, 0x8f, 0x5b,
- 0x80, 0xb4, 0x30, 0xaa, 0x1f, 0xc7, 0xed, 0xb8, 0x8f, 0x9e, 0xdb, 0xe0, 0x19, 0x39, 0x35, 0x36,
- 0x64, 0x81, 0x1a, 0x12, 0xb6, 0xa5, 0xfe, 0x64, 0x4d, 0x8f, 0x8e, 0xc1, 0xb8, 0x65, 0x55, 0x66,
- 0xbf, 0xa1, 0x9c, 0xc5, 0xa7, 0x45, 0x40, 0xf2, 0x1d, 0xcc, 0x5a, 0xc4, 0x11, 0xff, 0x20, 0xbb,
- 0x4c, 0xe3, 0x09, 0x66, 0x81, 0x68, 0xff, 0xa9, 0x58, 0x95, 0x0c, 0x68, 0x63, 0x9d, 0xe7, 0xb4,
- 0x2f, 0x72, 0xb5, 0xc3, 0x89, 0x9d, 0xa4, 0x1a, 0xd3, 0xb4, 0x0d, 0xac, 0xb8, 0x91, 0xd8, 0xbf,
- 0x02, 0xc5, 0x17, 0x08, 0x37, 0x19, 0xb6, 0x3c, 0x91, 0xad, 0x91, 0x6c, 0x97, 0x95, 0xb0, 0xe5,
- 0x89, 0xea, 0x4b, 0x41, 0x7a, 0x8c, 0xc3, 0x3d, 0x7a, 0x94, 0x10, 0xe1, 0x42, 0x85, 0xd4, 0xfe,
- 0x71, 0xfe, 0x28, 0xcf, 0xc3, 0xa4, 0xed, 0x5f, 0x8a, 0xfc, 0xd2, 0x1d, 0xae, 0xc4, 0x3e, 0x37,
- 0xe0, 0x3f, 0x32, 0xf8, 0x91, 0xcb, 0xee, 0x4b, 0x26, 0xf9, 0xb8, 0xd9, 0x9b, 0x74, 0x80, 0xc9,
- 0x5e, 0x6e, 0xd6, 0x16, 0x02, 0x29, 0x95, 0x0c, 0xc7, 0x06, 0x43, 0x36, 0x40, 0xf3, 0xb8, 0xe0,
- 0x23, 0x84, 0xd4, 0xe0, 0x4b, 0x31, 0x20, 0xf0, 0x79, 0x36, 0x61, 0x1b, 0x4c, 0x52, 0xb6, 0x63,
- 0x50, 0xbf, 0x48, 0x82, 0x9e, 0xd1, 0x24, 0x29, 0x52, 0x08, 0xa8, 0x0c, 0x43, 0x35, 0xc0, 0x23,
- 0x19, 0x10, 0x74, 0xf4, 0x03, 0x6b, 0xb6, 0x24, 0x4b, 0xd0, 0xcb, 0x7d, 0x3a, 0xd0, 0x27, 0x56,
- 0xf0, 0x01, 0xf7, 0x1f, 0xfc, 0x94, 0x44, 0x1f, 0x45, 0x79, 0x6c, 0x90, 0xf1, 0x20, 0xd0, 0x4a,
- 0x3f, 0x67, 0x4b, 0x9f, 0xb7, 0xde, 0x7c, 0x99, 0x07, 0xd3, 0x16, 0x0f, 0x3c, 0x38, 0xf2, 0x44,
- 0xb8, 0x17, 0x51, 0x6c, 0x61, 0xea, 0x3f, 0x1d, 0xe1, 0x29, 0x18, 0x66, 0x8a, 0xc6, 0xb8, 0xcf,
- 0x4c, 0xfd, 0xb4, 0xd1, 0xe7, 0x67, 0x0b, 0x22, 0xa3, 0x8f, 0x07, 0xb3, 0x48, 0x81, 0x2f, 0x7a,
- 0x88, 0x3e, 0x00, 0xc2, 0x6b, 0x00, 0xe2, 0x70, 0xc8, 0x22, 0x99, 0xde, 0x8c, 0xcd, 0xa3, 0x68,
- 0xdb, 0xea, 0x51, 0xf7, 0x80, 0xad, 0xe5, 0x16, 0x0d, 0x47, 0x9c, 0x63, 0xdc, 0xc9, 0x70, 0x00,
- 0x19, 0x67, 0xe1, 0xf8, 0x79, 0x4b, 0x94, 0x65, 0x82, 0x35, 0x68, 0x49, 0xc6, 0x69, 0x3b, 0x8a,
- 0x96, 0x23, 0xd1, 0x51, 0xc2, 0xd1, 0x4c, 0xd8, 0x9c, 0xed, 0x46, 0x96, 0xed, 0x3d, 0xd0, 0x9d,
- 0x03, 0x2f, 0x81, 0x72, 0x78, 0x31, 0x83, 0xc5, 0x9b, 0xef, 0xd2, 0xbe, 0x39, 0x30, 0x17, 0x8b,
- 0x36, 0xa6, 0x91, 0xcd, 0x4b, 0xb0, 0x64, 0x29, 0x1e, 0x46, 0x78, 0xdf, 0xcf, 0x41, 0xb0, 0x18,
- 0x0b, 0xcb, 0xf7, 0x07, 0xf3, 0x8d, 0xdb, 0x5b, 0x68, 0x3e, 0x66, 0x46, 0x89, 0xbc, 0x11, 0x6c,
- 0x98, 0xd8, 0x26, 0x98, 0x7a, 0xae, 0x41, 0x8b, 0x93, 0x5f, 0xc8, 0x69, 0x54, 0x1f, 0xc1, 0x54,
- 0xcc, 0x6b, 0x39, 0x3f, 0x05, 0x81, 0xfc, 0xe0, 0x0d, 0xaf, 0xcb, 0x8e, 0x89, 0x3e, 0x41, 0x1c,
- 0xab, 0x00, 0x14, 0x5a, 0x30, 0x8b, 0x73, 0x09, 0x22, 0x21, 0xb4, 0x87, 0xe0, 0xea, 0x3e, 0xf2,
- 0xeb, 0xbe, 0x9c, 0xf4, 0x1b, 0xe2, 0x94, 0x48, 0xf2, 0xa0, 0xd1, 0x11, 0x62, 0xe7, 0x98, 0x77,
- 0x19, 0x47, 0xaa, 0xa0, 0x2d, 0xab, 0x87, 0xcc, 0x80, 0xac, 0xe1, 0xc8, 0xa6, 0xb3, 0xee, 0xc7,
- 0xba, 0xfb, 0xb4, 0x5e, 0x2d, 0x6c, 0x3f, 0xfa, 0xb2, 0x24, 0x1f, 0x48, 0x0f, 0x54, 0x6a, 0x8c,
- 0xb7, 0x43, 0xd8, 0x7a, 0x98, 0x45, 0xef, 0xa8, 0xc5, 0x64, 0x9a, 0xe0, 0x04, 0x3b, 0x38, 0xa7,
- 0x25, 0x19, 0x22, 0xc6, 0xc1, 0x3a, 0xe6, 0xc4, 0xb6, 0x13, 0x0e, 0x82, 0xd7, 0x8a, 0xfc, 0x10,
- 0xd4, 0x7c, 0x41, 0x04, 0x41, 0x5e, 0x93, 0x85, 0xe7, 0x22, 0x4d, 0xb2, 0xb1, 0x11, 0x37, 0x27,
- 0xb8, 0xc5, 0xfd, 0x4a, 0xbc, 0xc5, 0x9c, 0x14, 0x88, 0x38, 0x30, 0xbd, 0x3c, 0x67, 0xf9, 0x71,
- 0xae, 0x64, 0x18, 0x13, 0xc7, 0xe1, 0xb1, 0x87, 0x17, 0x64, 0xb2, 0x75, 0x9a, 0x1f, 0xe7, 0x11,
- 0x05, 0x21, 0x06, 0xe0, 0x35, 0x89, 0x60, 0xdd, 0x02, 0xdf, 0x05, 0x07, 0xf7, 0x02, 0xbf, 0x21,
- 0xf3, 0x33, 0xf8, 0x90, 0x34, 0xe8, 0xb1, 0x24, 0x80, 0x25, 0xdf, 0x1c, 0xd3, 0xce, 0x6d, 0x08,
- 0xe7, 0xcb, 0x5c, 0x65, 0x14, 0x86, 0x2d, 0xb9, 0x4b, 0xe4, 0x6a, 0x42, 0x65, 0x9f, 0x89, 0x5f,
- 0x22, 0x99, 0x64, 0x1b, 0x82, 0x94, 0xe2, 0x0a, 0xb5, 0x7a, 0x7a, 0x46, 0x31, 0x7d, 0x7d, 0xd6,
- 0x16, 0x3d, 0x15, 0xf2, 0xad, 0xad, 0x6a, 0x88, 0xe8, 0xe4, 0x31, 0xa5, 0x8c, 0x34, 0x64, 0x45,
- 0x3f, 0x56, 0x66, 0xf3, 0xa3, 0x9e, 0xfc, 0x51, 0x35, 0xf9, 0x5d, 0x4a, 0x72, 0x64, 0xa4, 0x55,
- 0xc4, 0x34, 0x5e, 0xae, 0x20, 0x19, 0xf9, 0x1a, 0x57, 0x17, 0xcc, 0xfa, 0x7e, 0x9c, 0xa7, 0x86,
- 0xc4, 0xb4, 0x66, 0xbc, 0x14, 0x91, 0x24, 0xe2, 0x01, 0x31, 0x8d, 0x57, 0x55, 0x67, 0x11, 0x94,
- 0x3e, 0xa5, 0x3c, 0x91, 0xf1, 0x4f, 0xa8, 0xd0, 0xd5, 0x51, 0x6c, 0x8b, 0x4b, 0x25, 0xae, 0x32,
- 0x57, 0x47, 0x98, 0xfb, 0x8d, 0x75, 0x23, 0x8a, 0x39, 0x74, 0x48, 0x91, 0x23, 0x5d, 0x19, 0xe9,
- 0x77, 0x68, 0x0a, 0xa8, 0x38, 0x4a, 0x46, 0x21, 0x7f, 0x64, 0xa9, 0xbd, 0x03, 0xd1, 0x85, 0xee,
- 0x06, 0xfc, 0xc1, 0x60, 0xce, 0x99, 0x57, 0x79, 0x0d, 0x2d, 0x47, 0xed, 0xa6, 0xcc, 0x5e, 0x2a,
- 0x36, 0x51, 0xc8, 0x23, 0x91, 0x87, 0x30, 0x47, 0xd1, 0x59, 0x31, 0x9f, 0xe0, 0x0a, 0x16, 0xee,
- 0x35, 0xe0, 0x7a, 0x34, 0x67, 0x32, 0x2e, 0x24, 0xe8, 0x89, 0xcc, 0x2d, 0x2b, 0x0c, 0x43, 0x1d,
- 0x4f, 0xbe, 0xaf, 0x3d, 0x19, 0xcf, 0x00, 0x76, 0x06, 0x74, 0x6d, 0xc5, 0xcb, 0x2e, 0x1c, 0x42,
- 0xeb, 0x25, 0x1e, 0x38, 0xde, 0xc6, 0x48, 0xab, 0x16, 0xf4, 0x96, 0x79, 0x5a, 0x64, 0x39, 0xf5,
- 0x13, 0x9d, 0xb0, 0x5c, 0x62, 0x79, 0x1e, 0xa4, 0x51, 0x97, 0x42, 0xb6, 0x27, 0x73, 0x4f, 0x11,
- 0x99, 0xc5, 0xae, 0x5a, 0xc4, 0x6c, 0x91, 0x1b, 0x38, 0x4a, 0xed, 0x48, 0x2c, 0x85, 0x0b, 0x58,
- 0xd1, 0x0c, 0x56, 0xc2, 0xb2, 0x98, 0xcc, 0xe5, 0x71, 0x42, 0x26, 0x8f, 0xcb, 0x2d, 0xeb, 0xeb,
- 0x8f, 0x26, 0xc5, 0x1a, 0x4c, 0x54, 0x2c, 0x7f, 0xd4, 0x20, 0xf1, 0x63, 0x9e, 0xcf, 0x0f, 0xf0,
- 0xb1, 0x06, 0xbe, 0xa8, 0x5f, 0x17, 0x51, 0x69, 0x3a, 0x22, 0x02, 0xf6, 0x8b, 0x55, 0x8c, 0x89,
- 0xe7, 0x41, 0x9a, 0x63, 0xcd, 0x32, 0x16, 0x0f, 0x70, 0xa2, 0x64, 0x25, 0xf3, 0x60, 0x5f, 0xd8,
- 0x14, 0xf2, 0xb1, 0x15, 0x5f, 0xac, 0x6a, 0x89, 0x43, 0x97, 0x6c, 0x3f, 0x88, 0x9d, 0xb7, 0x64,
- 0xd1, 0xb7, 0xe9, 0xbb, 0x96, 0x3e, 0x4b, 0x4c, 0x11, 0x6c, 0x72, 0x59, 0x5b, 0xd9, 0x41, 0x7b,
- 0x2c, 0xc8, 0x56, 0x4f, 0x5e, 0x1c, 0xae, 0x9e, 0x0c, 0xc2, 0xbd, 0x2d, 0x05, 0x27, 0xfd, 0x5c,
- 0xac, 0x5f, 0xe2, 0xe9, 0x8b, 0xd6, 0x58, 0xf7, 0x86, 0xa6, 0xdd, 0x54, 0x5b, 0xb8, 0xb3, 0x03,
- 0xf3, 0xa5, 0xa9, 0x86, 0x88, 0x38, 0x5f, 0xac, 0xfb, 0xf1, 0xbd, 0xed, 0xc4, 0x26, 0x72, 0x72,
- 0x33, 0xd8, 0xd7, 0x6d, 0xbf, 0xe0, 0x53, 0xcf, 0x1c, 0x84, 0xc5, 0xde, 0xb0, 0xe0, 0x4f, 0xfa,
- 0x7d, 0xea, 0xfb, 0xf3, 0x95, 0x55, 0xc3, 0x1f, 0x6a, 0x7d, 0x7d, 0x50, 0x57, 0x19, 0x92, 0x69,
- 0x0f, 0x9c, 0x0c, 0x8c, 0x4a, 0x79, 0xbb, 0x31, 0xa8, 0x32, 0x8c, 0xa9, 0xee, 0xd9, 0x19, 0x18,
- 0x83, 0x41, 0xbf, 0xac, 0x6e, 0x32, 0x0c, 0xb6, 0x65, 0x95, 0x89, 0x52, 0xaf, 0xd4, 0x2b, 0x61,
- 0xbc, 0x6e, 0x91, 0x81, 0x52, 0xad, 0x56, 0x43, 0xb1, 0xa4, 0x94, 0x59, 0x5a, 0x0b, 0x8b, 0x46,
- 0xa1, 0x07, 0xf3, 0xee, 0x76, 0x2e, 0x04, 0xd2, 0x64, 0x6f, 0x08, 0xc6, 0x64, 0x32, 0x86, 0xe2,
- 0x0b, 0x02, 0x6d, 0x90, 0x57, 0x0c, 0xc4, 0x97, 0xb0, 0x98, 0x48, 0x56, 0xe7, 0xec, 0x99, 0x27,
- 0x55, 0x20, 0xf2, 0x26, 0x87, 0x0a, 0x14, 0xbe, 0x31, 0x30, 0x8f, 0x9f, 0x9b, 0x65, 0x51, 0x10,
- 0x25, 0xac, 0xf3, 0xc4, 0x1b, 0x88, 0x26, 0x55, 0x58, 0x4e, 0x15, 0x42, 0xcd, 0xa5, 0x84, 0x78,
- 0x1e, 0xbd, 0x37, 0xf9, 0x7b, 0x02, 0x81, 0xa7, 0xa6, 0xf3, 0xc5, 0x7b, 0x13, 0xdf, 0xc3, 0xe2,
- 0x14, 0x13, 0xeb, 0x39, 0x5b, 0x6f, 0x65, 0xea, 0x11, 0x16, 0x59, 0xaa, 0x9d, 0xd4, 0x98, 0x10,
- 0xdc, 0x20, 0xd0, 0x15, 0xe9, 0x0d, 0x7b, 0xad, 0x44, 0xaf, 0x78, 0x86, 0xa6, 0x38, 0x9e, 0xc5,
- 0x80, 0x02, 0x04, 0x84, 0x08, 0x14, 0x6a, 0x56, 0xe0, 0x8b, 0x9e, 0x02, 0xcd, 0xe3, 0x44, 0x88,
- 0x22, 0xb6, 0x38, 0x28, 0xc8, 0x70, 0xb1, 0xc9, 0x48, 0x21, 0x19, 0x32, 0x3a, 0xc7, 0x18, 0x52,
- 0xae, 0x08, 0x50, 0x6d, 0x01, 0x6a, 0x30, 0xd0, 0x6c, 0x81, 0xc5, 0xba, 0x46, 0xcc, 0x48, 0xb3,
- 0xa3, 0xce, 0x79, 0xed, 0xc4, 0xba, 0xe9, 0x9c, 0x3d, 0xb3, 0x55, 0xe2, 0x26, 0x87, 0x88, 0xe2,
- 0xc8, 0x35, 0x2f, 0x33, 0xb2, 0xc5, 0x4a, 0x63, 0x20, 0xb5, 0x2c, 0xd3, 0xf5, 0x4d, 0xbf, 0x35,
- 0x1d, 0x81, 0xb7, 0x2f, 0xb0, 0x2d, 0x3a, 0xd0, 0x83, 0xa9, 0xa7, 0xbb, 0x61, 0x31, 0xb9, 0xf8,
- 0x3c, 0xe7, 0x2f, 0x18, 0x12, 0xf8, 0x71, 0x4f, 0xa9, 0x2d, 0xc5, 0x14, 0x86, 0x80, 0x85, 0xc5,
- 0x68, 0xcd, 0xba, 0x47, 0x83, 0x29, 0x1e, 0xb8, 0x8a, 0xd7, 0xb0, 0xf9, 0xa2, 0x4b, 0x93, 0xf5,
- 0x18, 0x95, 0x2e, 0xd0, 0x45, 0xa7, 0xcb, 0xd8, 0x51, 0xc7, 0x8b, 0xa0, 0x64, 0x8e, 0xa7, 0x38,
- 0x40, 0xf9, 0x5d, 0x08, 0x1e, 0x96, 0x8a, 0x9a, 0x23, 0x1c, 0xe6, 0xea, 0x3c, 0xf1, 0x86, 0x3d,
- 0x9d, 0x1d, 0x12, 0x8b, 0xfe, 0x2b, 0x56, 0xe4, 0xb0, 0x88, 0x97, 0xbf, 0xe3, 0x99, 0x60, 0xda,
- 0x78, 0x1a, 0x8c, 0xcf, 0xa4, 0x16, 0x57, 0xa9, 0x2a, 0x8a, 0x43, 0xe8, 0x12, 0x7b, 0x4e, 0xb4,
- 0xeb, 0x51, 0x17, 0xec, 0x1c, 0xf0, 0x4d, 0x3c, 0x25, 0xcb, 0x5c, 0xc7, 0x37, 0xf9, 0xe4, 0x11,
- 0xb4, 0x63, 0x47, 0x05, 0x8c, 0xaf, 0x92, 0x94, 0xb1, 0x8b, 0xe6, 0x89, 0x93, 0x2d, 0xfc, 0xe2,
- 0xb9, 0x7f, 0x37, 0xcc, 0xdf, 0x8f, 0xad, 0x56, 0x74, 0xe9, 0xfe, 0xea, 0xf2, 0xb0, 0xb0, 0xa5,
- 0xec, 0x00, 0x98, 0x00, 0xd8, 0xc6, 0x0d, 0x90, 0x20, 0x70, 0x9b, 0xa5, 0xd2, 0x74, 0x3a, 0x2d,
- 0x4e, 0xab, 0x45, 0xc7, 0x1b, 0x96, 0x2a, 0x60, 0xf1, 0xb0, 0xa2, 0xc4, 0xb7, 0x1e, 0x34, 0xa9,
- 0xaa, 0x4a, 0x62, 0x71, 0x9e, 0x3f, 0xf3, 0x6b, 0x51, 0xf7, 0x9a, 0xa4, 0x12, 0x95, 0x54, 0xf1,
- 0x7f, 0x52, 0x7b, 0xc7, 0xd5, 0x83, 0x11, 0x81, 0xc8, 0xed, 0x7d, 0x9d, 0x6c, 0x16, 0xeb, 0xa3,
- 0x8a, 0x0a, 0x0f, 0x65, 0xf1, 0x5b, 0xa9, 0x30, 0x08, 0x6e, 0xab, 0x78, 0xce, 0x2d, 0xee, 0xf2,
- 0xa1, 0xae, 0x44, 0xaf, 0x05, 0xd1, 0x4d, 0x2d, 0x06, 0x20, 0xeb, 0xfa, 0xba, 0xab, 0x49, 0x6c,
- 0x68, 0x52, 0x09, 0x57, 0xeb, 0xef, 0x86, 0xed, 0x0d, 0x39, 0x61, 0xda, 0xa2, 0x6d, 0xa8, 0x2a,
- 0x30, 0x32, 0x71, 0x06, 0x6c, 0x2b, 0x7a, 0x9d, 0xf2, 0xf2, 0x4d, 0x55, 0x0d, 0xb3, 0xd6, 0x71,
- 0x8b, 0x51, 0x20, 0x3a, 0xef, 0x39, 0x68, 0x45, 0x74, 0x03, 0x74, 0xd9, 0xb4, 0xd1, 0x73, 0xab,
- 0xa4, 0x50, 0x77, 0xef, 0xe1, 0xe7, 0x87, 0xc6, 0xd6, 0x20, 0x4c, 0xac, 0x6b, 0x46, 0xa6, 0xa1,
- 0x0e, 0x8e, 0x03, 0x1a, 0x8c, 0xde, 0x54, 0x36, 0xc3, 0xef, 0xc5, 0x3b, 0x70, 0x0f, 0x45, 0xbb,
- 0xdc, 0x68, 0xa1, 0xcc, 0x9a, 0x54, 0xf1, 0x74, 0xe6, 0xa0, 0x16, 0x66, 0xaf, 0x96, 0x26, 0x88,
- 0x5a, 0x31, 0xcd, 0x40, 0x4b, 0x2d, 0xa3, 0xd9, 0x7a, 0xd4, 0x2c, 0xa3, 0x95, 0xad, 0x46, 0x8e,
- 0xca, 0xfc, 0x4a, 0x70, 0x6c, 0xa5, 0x5a, 0x8f, 0xb6, 0xc6, 0x8e, 0xe5, 0x45, 0x96, 0x01, 0x5a,
- 0xf2, 0x1d, 0x0b, 0xe2, 0x26, 0x46, 0x62, 0x2b, 0x65, 0x6f, 0x56, 0x4f, 0x38, 0xfd, 0xa9, 0x6e,
- 0x12, 0xb0, 0x7c, 0x49, 0xdc, 0x59, 0x3d, 0x3a, 0xd3, 0x54, 0x45, 0x3c, 0x5f, 0x50, 0xdd, 0x38,
- 0xb3, 0xad, 0x99, 0x56, 0x5e, 0x40, 0x7c, 0xbc, 0x02, 0x6c, 0x68, 0x95, 0x08, 0xd2, 0x75, 0x4d,
- 0xad, 0x1a, 0xbd, 0x1c, 0xd9, 0x77, 0x60, 0xa4, 0x0c, 0x2d, 0xbe, 0x54, 0xd4, 0x12, 0x87, 0x74,
- 0x78, 0xa7, 0x73, 0x16, 0x4b, 0xe1, 0x7d, 0xda, 0xc4, 0x41, 0x1d, 0xca, 0xcf, 0x3e, 0xeb, 0x78,
- 0x3b, 0x27, 0x23, 0xfc, 0x0a, 0xa8, 0x1f, 0xe4, 0x24, 0xfc, 0x2b, 0xc9, 0x0a, 0x2d, 0xda, 0xab,
- 0x97, 0x88, 0xf5, 0xe7, 0x2e, 0x11, 0xeb, 0x99, 0x97, 0x88, 0x8b, 0xb6, 0x3c, 0xd7, 0xf3, 0xda,
- 0xd2, 0x65, 0xab, 0x40, 0x4e, 0xdd, 0x8b, 0x0e, 0x45, 0xcb, 0x80, 0x28, 0xed, 0xb8, 0x1e, 0x6d,
- 0x4b, 0xf9, 0xe5, 0xdb, 0x63, 0x0a, 0xbb, 0xb3, 0x58, 0x91, 0xf3, 0xd2, 0x4e, 0x89, 0x61, 0x28,
- 0x7a, 0xb8, 0x1c, 0x7d, 0x89, 0xa3, 0xe4, 0xcb, 0x63, 0x9b, 0xea, 0xd6, 0xed, 0xe5, 0x08, 0x34,
- 0x6f, 0xc8, 0x6f, 0x59, 0xa7, 0x2f, 0xb7, 0x98, 0x83, 0xdc, 0xd2, 0x4d, 0x1e, 0x71, 0x9b, 0x02,
- 0x2f, 0x20, 0x46, 0x07, 0xbd, 0xf9, 0x2f, 0xde, 0xdc, 0x54, 0xf8, 0x1d, 0x9f, 0x08, 0x69, 0xf9,
- 0x16, 0x19, 0x4d, 0xdf, 0x22, 0x9b, 0x33, 0xac, 0xa6, 0xc0, 0x0e, 0xe5, 0x30, 0x64, 0xdc, 0x95,
- 0x43, 0xc6, 0x6f, 0xa8, 0x1e, 0x2e, 0x2e, 0x27, 0xc2, 0x1b, 0x2d, 0xf2, 0x55, 0x0a, 0x71, 0xb9,
- 0x12, 0xaf, 0x2a, 0x21, 0xe0, 0x75, 0x7c, 0xad, 0xbe, 0x19, 0x5f, 0xb7, 0x8c, 0xcb, 0xa4, 0x2b,
- 0x80, 0x48, 0x4d, 0xa9, 0x3b, 0xf3, 0x61, 0xf2, 0x4a, 0xf1, 0x2d, 0x78, 0x08, 0xc7, 0xdd, 0x89,
- 0x3f, 0xc2, 0xeb, 0xae, 0x19, 0xf9, 0x73, 0x9c, 0xf4, 0x89, 0x8b, 0xf0, 0x0b, 0x69, 0xf0, 0xf7,
- 0x65, 0xd6, 0xca, 0xe1, 0x0a, 0x17, 0x41, 0x25, 0xb4, 0x45, 0x67, 0x89, 0xfb, 0xc8, 0x6c, 0x3b,
- 0x3d, 0x52, 0x37, 0x16, 0x0b, 0x03, 0x8f, 0x75, 0x0d, 0xaf, 0x5f, 0x82, 0x16, 0x45, 0xa2, 0x66,
- 0xb7, 0x98, 0x8b, 0x36, 0x70, 0x59, 0x34, 0x93, 0xd1, 0x01, 0x94, 0x63, 0x95, 0xb8, 0x4e, 0x18,
- 0xa6, 0x2f, 0x61, 0xcf, 0xb3, 0x2b, 0xa6, 0xe4, 0xbb, 0x2a, 0xa0, 0xe5, 0x8b, 0xdc, 0x72, 0x18,
- 0xdd, 0x11, 0x4c, 0x6a, 0xf9, 0x0b, 0x9a, 0x66, 0xf7, 0x81, 0x5d, 0xd3, 0x00, 0x91, 0xe2, 0xad,
- 0xd5, 0x78, 0x6c, 0x14, 0xdb, 0x5c, 0xba, 0xb9, 0x2b, 0x18, 0x12, 0xb4, 0x02, 0x71, 0x33, 0xde,
- 0xaf, 0x80, 0x0c, 0x33, 0x6e, 0x6d, 0xb3, 0x9b, 0xc0, 0xaf, 0x25, 0xb0, 0x2b, 0xae, 0x45, 0x41,
- 0xae, 0x1c, 0xb9, 0xfa, 0x24, 0x32, 0xbb, 0x9c, 0xd2, 0x94, 0x86, 0x1e, 0x5e, 0xaa, 0x61, 0xb7,
- 0xf0, 0x4c, 0x8d, 0xa5, 0xaa, 0x7b, 0xfc, 0xe0, 0x42, 0x4e, 0xaa, 0xe0, 0x8d, 0x2f, 0x4f, 0x7b,
- 0xe2, 0x96, 0xf8, 0x8e, 0x56, 0x53, 0x5f, 0x57, 0x9a, 0x35, 0xc5, 0x7a, 0x0a, 0xab, 0xe4, 0x29,
- 0x3e, 0xbf, 0x44, 0x0e, 0xce, 0x07, 0x46, 0xcf, 0xdc, 0x0d, 0x00, 0x69, 0x91, 0xbb, 0xc2, 0x52,
- 0xce, 0xca, 0x57, 0x64, 0x98, 0x25, 0x5a, 0x59, 0xfd, 0xc9, 0x57, 0x1c, 0xcd, 0x82, 0xbf, 0x06,
- 0xaf, 0x01, 0x91, 0x1a, 0xa8, 0x48, 0x54, 0xa9, 0x60, 0xcb, 0xa5, 0x0a, 0xe8, 0x26, 0x7e, 0x73,
- 0xc2, 0x2c, 0xf6, 0x2d, 0xaa, 0x7b, 0x17, 0x78, 0xc1, 0x4e, 0x55, 0x54, 0x45, 0xa0, 0xc4, 0xad,
- 0x02, 0x5a, 0xf1, 0x5e, 0x33, 0xe0, 0xef, 0x4c, 0xf3, 0x15, 0xb3, 0xd8, 0xa3, 0xe0, 0x52, 0xce,
- 0xa1, 0xcd, 0x9c, 0x0c, 0x6f, 0x78, 0x5c, 0xa3, 0xcb, 0x8e, 0x4a, 0x04, 0xe2, 0x8d, 0x35, 0x04,
- 0x55, 0xb0, 0x82, 0x62, 0x2b, 0x4e, 0x1a, 0x8b, 0x5d, 0xfd, 0xc1, 0x9b, 0x3c, 0x92, 0x52, 0xd1,
- 0x34, 0xef, 0x75, 0xba, 0x4e, 0xbe, 0x5c, 0xac, 0x03, 0xcd, 0xaa, 0xb2, 0x09, 0x7f, 0xab, 0x3f,
- 0xf9, 0x72, 0x73, 0xa9, 0xbc, 0x22, 0xca, 0xeb, 0xa2, 0x3c, 0xdd, 0x36, 0x9e, 0xc8, 0x7f, 0xaa,
- 0x5d, 0xa0, 0x28, 0x0f, 0xb5, 0x58, 0xeb, 0x9b, 0x8f, 0xb6, 0x1e, 0x61, 0xd5, 0xf9, 0x7f, 0xf2,
- 0xea, 0x98, 0x41, 0x44, 0x1a, 0x6b, 0x31, 0x2f, 0xa1, 0xcb, 0xc4, 0xf4, 0x4f, 0x4a, 0x53, 0xd2,
- 0xb3, 0xc0, 0xe1, 0x22, 0x0c, 0x35, 0xa0, 0x83, 0x41, 0xad, 0x26, 0x89, 0x23, 0x17, 0x02, 0x11,
- 0x37, 0xf0, 0x73, 0x8f, 0x69, 0x15, 0xb2, 0x3c, 0x1f, 0xd1, 0xd2, 0x40, 0x1a, 0x70, 0x50, 0x30,
- 0x5d, 0xb3, 0x3b, 0x49, 0x0d, 0xa2, 0x21, 0xaa, 0x95, 0x2b, 0xf0, 0x50, 0x11, 0x63, 0x58, 0x61,
- 0x14, 0x9d, 0xad, 0x54, 0xac, 0xb2, 0xd1, 0x3b, 0x05, 0xc6, 0x59, 0xc6, 0x5d, 0xa6, 0xcd, 0x13,
- 0x4d, 0x5d, 0xfa, 0x36, 0x84, 0xc7, 0x3e, 0x05, 0x91, 0xfe, 0x04, 0x82, 0xc5, 0x3e, 0x74, 0xc0,
- 0xa6, 0x19, 0xf3, 0x7e, 0xfe, 0xd4, 0xc4, 0xab, 0x8c, 0x19, 0x03, 0x8c, 0x3f, 0x1c, 0x31, 0xf9,
- 0x0a, 0x1e, 0x03, 0x4f, 0x57, 0xa8, 0x4d, 0xa8, 0xb2, 0xb9, 0xa5, 0x94, 0x37, 0xab, 0x4a, 0x5d,
- 0xfd, 0xda, 0x62, 0xa7, 0xbe, 0x5a, 0xac, 0xa8, 0x8c, 0x45, 0x95, 0x32, 0x94, 0x55, 0xb7, 0x95,
- 0xda, 0x76, 0xaa, 0xac, 0x82, 0x65, 0xe5, 0x7a, 0x03, 0xea, 0x28, 0x95, 0x5a, 0x23, 0x2a, 0x33,
- 0xb8, 0xe9, 0x64, 0x85, 0xdb, 0x15, 0xa5, 0xb6, 0xa5, 0x54, 0xb7, 0xbe, 0x86, 0xc9, 0xe1, 0xdf,
- 0xb0, 0xe8, 0xfd, 0xc7, 0x39, 0x2e, 0x79, 0x84, 0x0a, 0xfe, 0x96, 0xc5, 0x6f, 0x85, 0xfd, 0xea,
- 0x5f, 0x26, 0xf9, 0xfa, 0xd7, 0x50, 0xbe, 0x61, 0x3a, 0x9f, 0x0b, 0xf2, 0xc5, 0xba, 0x0c, 0xb2,
- 0x5e, 0x56, 0x7e, 0x9c, 0x16, 0x2a, 0xbb, 0x70, 0x8a, 0xc2, 0xf9, 0xed, 0x37, 0xba, 0xa3, 0x95,
- 0xd7, 0xd7, 0x6b, 0xa8, 0x7d, 0x39, 0x2a, 0xea, 0x18, 0xcd, 0x4a, 0xfa, 0x3d, 0xbf, 0xf5, 0x93,
- 0xdf, 0x4c, 0xbc, 0xa2, 0xb4, 0xcc, 0xa2, 0xee, 0xf5, 0xe3, 0x29, 0x53, 0xac, 0x31, 0x0d, 0xaf,
- 0xf0, 0xef, 0x43, 0x9c, 0x1f, 0x45, 0xa2, 0xcb, 0x3d, 0xa2, 0x88, 0x7f, 0x84, 0x1e, 0x4e, 0x14,
- 0xd1, 0x7b, 0xde, 0x2f, 0xd5, 0x64, 0x65, 0x92, 0xcf, 0x87, 0xe1, 0xe2, 0x6a, 0xec, 0x8a, 0x15,
- 0x9f, 0x0b, 0xe9, 0x72, 0x2f, 0xc8, 0xa5, 0xc8, 0x0e, 0xd5, 0x4a, 0x4d, 0x61, 0x85, 0xd9, 0xa7,
- 0x5e, 0x00, 0x00, 0x86, 0xdd, 0xc4, 0x3c, 0x0a, 0x6f, 0xa0, 0x33, 0xac, 0xfe, 0x88, 0xf6, 0x6f,
- 0x21, 0x88, 0x4d, 0x61, 0xee, 0x09, 0xe0, 0x0a, 0xb6, 0x87, 0x87, 0xd8, 0x53, 0xa8, 0x17, 0x08,
- 0x59, 0xc1, 0x13, 0xf7, 0xeb, 0x92, 0x88, 0xbb, 0x0c, 0xb4, 0x82, 0x29, 0x6e, 0x91, 0x25, 0x31,
- 0xf9, 0x21, 0x86, 0x15, 0x4c, 0xd7, 0x73, 0x86, 0x78, 0xed, 0x20, 0x85, 0x7b, 0x2e, 0x80, 0xab,
- 0xe3, 0xd2, 0x21, 0x2e, 0x4c, 0xe3, 0xee, 0x31, 0xd0, 0x2a, 0x26, 0x18, 0x62, 0xa3, 0xba, 0x9f,
- 0x46, 0xe5, 0xb0, 0x15, 0x5c, 0x96, 0x83, 0xa6, 0x99, 0x8a, 0x90, 0x24, 0x5e, 0xa4, 0xee, 0x09,
- 0x9c, 0x44, 0x71, 0x18, 0xf2, 0xe8, 0x34, 0x02, 0xb1, 0xdb, 0x7e, 0x90, 0xd7, 0xb3, 0x93, 0x45,
- 0x54, 0xf8, 0xf0, 0x3b, 0x51, 0xa8, 0x89, 0x78, 0x04, 0xf7, 0xc9, 0xd9, 0xe7, 0x31, 0x52, 0xa5,
- 0xe8, 0x6c, 0xf3, 0x52, 0x51, 0xca, 0xa7, 0xa1, 0xa6, 0x21, 0x87, 0xc9, 0x50, 0x57, 0xbb, 0x11,
- 0x37, 0x1f, 0xf9, 0x22, 0xfe, 0xcb, 0x9a, 0x08, 0x25, 0x12, 0x6f, 0x11, 0xa5, 0x8a, 0xf8, 0x86,
- 0x51, 0xb4, 0xa3, 0xf0, 0x48, 0xa9, 0xb8, 0x55, 0xb9, 0x5c, 0xca, 0xc3, 0xbe, 0xc5, 0x15, 0xc8,
- 0x9b, 0x28, 0x2c, 0xc2, 0x6b, 0xc2, 0xd1, 0x7d, 0x48, 0x71, 0xb4, 0x80, 0xdf, 0x13, 0xfe, 0x71,
- 0x1e, 0x5d, 0xb7, 0x5f, 0x1d, 0x63, 0x74, 0x97, 0x38, 0x5d, 0xf1, 0xc7, 0x39, 0x0d, 0x97, 0x9a,
- 0x72, 0xdb, 0x37, 0x4a, 0xc0, 0x1c, 0x2b, 0xc6, 0x58, 0x8e, 0x7d, 0x75, 0xa4, 0x7d, 0x79, 0x19,
- 0x17, 0xbe, 0x26, 0x83, 0xc5, 0xe4, 0xd7, 0x21, 0x02, 0xf1, 0x59, 0x8a, 0x18, 0x97, 0xc7, 0xf5,
- 0x37, 0xf1, 0x11, 0xb9, 0x17, 0xf3, 0xf9, 0x97, 0xc5, 0x91, 0x65, 0x1b, 0x2a, 0x4b, 0xed, 0x9b,
- 0x85, 0x6d, 0x8f, 0xbf, 0x0a, 0xb2, 0xd4, 0xcd, 0x6a, 0x10, 0x97, 0x4a, 0x1f, 0x58, 0xde, 0xc0,
- 0xb6, 0x62, 0xa4, 0x38, 0x95, 0xc8, 0xf8, 0xb8, 0x44, 0xac, 0x59, 0x22, 0x74, 0x63, 0xdc, 0x8c,
- 0x24, 0x12, 0x17, 0xe2, 0x67, 0x53, 0xc0, 0x3c, 0x9d, 0xe2, 0x63, 0xfa, 0x18, 0x9c, 0xc4, 0x2a,
- 0x48, 0x72, 0x4b, 0x7f, 0xad, 0x2f, 0x8e, 0xc0, 0x69, 0xa2, 0xa1, 0x66, 0x66, 0x0b, 0xf1, 0x76,
- 0x0f, 0xb0, 0x2a, 0x92, 0xb0, 0xa8, 0x10, 0xcb, 0xf3, 0x26, 0xff, 0x74, 0xd5, 0xf0, 0x1f, 0xca,
- 0x51, 0xd6, 0xd7, 0xf9, 0xeb, 0xa2, 0x0f, 0x01, 0xce, 0x2d, 0x41, 0xe2, 0xa4, 0x06, 0xe2, 0x2e,
- 0x71, 0xd1, 0xed, 0x7b, 0x98, 0x23, 0xaa, 0x20, 0x7b, 0x7e, 0xfb, 0x0d, 0x82, 0xfa, 0xfe, 0x41,
- 0x02, 0xa6, 0x64, 0xb6, 0x00, 0x79, 0x0d, 0xb5, 0x8d, 0x3d, 0x3c, 0x8a, 0x9a, 0x83, 0x30, 0x5f,
- 0x49, 0x73, 0x55, 0x54, 0x0e, 0x99, 0xac, 0xf0, 0xf2, 0x90, 0xa0, 0xa6, 0xa5, 0x6b, 0xdf, 0xf1,
- 0x09, 0x31, 0xf1, 0xad, 0x2c, 0xa9, 0x79, 0x23, 0x16, 0x99, 0x32, 0x2e, 0x32, 0x8b, 0x4f, 0x0a,
- 0x85, 0x25, 0xec, 0xa5, 0x74, 0xa3, 0x2c, 0x7f, 0x88, 0x41, 0x57, 0x38, 0x01, 0xe9, 0x29, 0xa0,
- 0x2c, 0xa5, 0xc7, 0x1c, 0x27, 0xf9, 0xe9, 0x1d, 0x5d, 0x16, 0x15, 0x8b, 0x60, 0x13, 0xb5, 0x57,
- 0x6a, 0xea, 0x73, 0x09, 0x52, 0x42, 0x41, 0xf9, 0xdd, 0x28, 0xb1, 0x69, 0x27, 0xb1, 0x7c, 0x42,
- 0xd4, 0x64, 0xf9, 0xc9, 0x52, 0xde, 0x43, 0xb5, 0x0d, 0x89, 0x49, 0x4a, 0x6a, 0x6e, 0xe4, 0x57,
- 0x3f, 0xe3, 0x34, 0x97, 0xc4, 0xcd, 0x65, 0x0a, 0xd3, 0x42, 0x21, 0x92, 0x9c, 0x9e, 0xd3, 0x8b,
- 0x59, 0x91, 0xa0, 0xf4, 0x66, 0xfe, 0x1d, 0x86, 0xb2, 0x39, 0x47, 0x9b, 0x13, 0x0b, 0xb7, 0x09,
- 0x55, 0x53, 0x14, 0x14, 0x03, 0xa7, 0xcb, 0x32, 0xf7, 0x5c, 0xb5, 0x21, 0x17, 0x7d, 0x5c, 0x33,
- 0xc9, 0x55, 0xe4, 0x50, 0x0a, 0xc3, 0x1b, 0x39, 0x76, 0x07, 0x49, 0xd7, 0x4c, 0xe0, 0x19, 0x14,
- 0x21, 0xe1, 0x23, 0x96, 0xf2, 0x3c, 0x7f, 0xe2, 0x02, 0xed, 0x29, 0xe0, 0x4d, 0xc4, 0x82, 0x97,
- 0xf6, 0x7e, 0x13, 0x77, 0xbd, 0xec, 0xeb, 0x57, 0xbb, 0x4f, 0x7d, 0xe9, 0x41, 0x58, 0x14, 0x4e,
- 0x43, 0xa2, 0xe4, 0xff, 0xdd, 0xcb, 0xc4, 0x6e, 0x24, 0x79, 0x94, 0x98, 0x87, 0x33, 0x63, 0xf6,
- 0x35, 0x03, 0x71, 0x9e, 0xf8, 0x46, 0x5e, 0x36, 0x7e, 0x9c, 0xf6, 0x34, 0x70, 0x31, 0x25, 0x23,
- 0x0b, 0x91, 0x65, 0x19, 0x58, 0xeb, 0xd4, 0x88, 0xca, 0x12, 0xf3, 0x18, 0x0f, 0xb0, 0x40, 0x10,
- 0x07, 0x79, 0x20, 0x30, 0x44, 0x2b, 0x94, 0xb5, 0xd8, 0x7e, 0x84, 0xcf, 0x4b, 0x2f, 0xa1, 0xc0,
- 0xe9, 0xcf, 0x9f, 0xed, 0x14, 0xab, 0xd5, 0xd7, 0x85, 0x72, 0x73, 0x09, 0xd8, 0x68, 0xbc, 0x56,
- 0x9b, 0xe5, 0x85, 0xf6, 0xa4, 0x62, 0xb0, 0x7f, 0x22, 0xf9, 0x01, 0x37, 0x34, 0x49, 0x85, 0x5f,
- 0xfd, 0x5e, 0x93, 0x2a, 0xf5, 0xfa, 0xf7, 0x49, 0xf4, 0xfb, 0xfc, 0xa8, 0x77, 0x17, 0x1f, 0x97,
- 0x5c, 0x0a, 0x38, 0xbe, 0x4b, 0x0f, 0x5a, 0xdc, 0xc4, 0xbf, 0x3c, 0xd8, 0xca, 0x4b, 0xd8, 0x35,
- 0x98, 0xf9, 0x55, 0xbd, 0x49, 0x1b, 0xf0, 0xdf, 0xa3, 0x0d, 0xa9, 0x0f, 0xd4, 0xd5, 0x97, 0x2c,
- 0x5b, 0x2c, 0xfe, 0x74, 0x64, 0xfd, 0x67, 0x99, 0xbf, 0x8b, 0x28, 0xf1, 0xf1, 0x18, 0x2f, 0x19,
- 0x2b, 0xbe, 0x80, 0x73, 0xf8, 0xb5, 0x0d, 0xc1, 0x93, 0x74, 0x0e, 0xf1, 0xbb, 0x79, 0x22, 0x3e,
- 0x50, 0xf3, 0x9d, 0x4c, 0x11, 0xe3, 0x16, 0xa9, 0x4d, 0x3b, 0xfe, 0x24, 0xc9, 0xaa, 0x0a, 0xe2,
- 0xc7, 0xb7, 0x5e, 0x68, 0x8d, 0xf8, 0x77, 0x4e, 0x7c, 0x91, 0x22, 0xd8, 0xe9, 0x70, 0x4a, 0x7c,
- 0x6e, 0x4a, 0x4f, 0x2c, 0x0d, 0x88, 0x15, 0xe7, 0xa8, 0x5a, 0x46, 0x2d, 0x0c, 0x58, 0x53, 0xdf,
- 0x55, 0x81, 0x4c, 0x1b, 0x12, 0x4d, 0x9c, 0x46, 0x61, 0xfc, 0x5d, 0x95, 0x9b, 0xd6, 0x72, 0x60,
- 0x94, 0x35, 0xc7, 0x32, 0x97, 0x22, 0x39, 0xfd, 0xf8, 0x95, 0xbf, 0x84, 0x01, 0x85, 0xe8, 0xe6,
- 0x94, 0x1d, 0xfb, 0xe5, 0xc7, 0x23, 0xd6, 0xd7, 0x33, 0x67, 0x80, 0xa0, 0x5a, 0x6a, 0x7e, 0x91,
- 0xa8, 0x69, 0x4b, 0x8a, 0xf4, 0x30, 0xa5, 0xf8, 0x39, 0x15, 0xc3, 0x83, 0x9f, 0xaf, 0x1b, 0xb2,
- 0xf2, 0xdd, 0x56, 0x54, 0xcd, 0x30, 0xa2, 0xe5, 0x66, 0x65, 0x31, 0x8b, 0x96, 0x33, 0xc9, 0xdf,
- 0xad, 0x33, 0x51, 0x9e, 0xca, 0xcd, 0xde, 0xb2, 0xda, 0x00, 0x30, 0x94, 0x7e, 0xa7, 0x42, 0xc5,
- 0x19, 0x70, 0x1b, 0x97, 0xfd, 0xf9, 0x73, 0x3b, 0xe1, 0xc9, 0x53, 0xf9, 0xed, 0xcb, 0xe8, 0x4f,
- 0x77, 0x86, 0x31, 0x56, 0xe4, 0xf0, 0x52, 0x40, 0x11, 0xb2, 0x45, 0x7c, 0x4f, 0x8d, 0x97, 0x67,
- 0xda, 0xbf, 0x73, 0x48, 0x8f, 0x7a, 0x02, 0xde, 0xea, 0x0b, 0xad, 0xf6, 0x13, 0xea, 0x87, 0xd3,
- 0x47, 0xd3, 0xb2, 0x86, 0x99, 0xa9, 0x42, 0x58, 0x04, 0x51, 0xd4, 0xe1, 0x2f, 0xe0, 0x32, 0xa8,
- 0x55, 0xb9, 0xaf, 0x14, 0xca, 0x8d, 0xfb, 0x72, 0x83, 0x7f, 0x57, 0xf6, 0x19, 0xbd, 0x93, 0xec,
- 0x92, 0x0e, 0x38, 0x71, 0x4c, 0x97, 0x5c, 0x19, 0xf8, 0xdd, 0xda, 0xc4, 0x4f, 0xe9, 0xfd, 0xc1,
- 0xcc, 0x65, 0x8d, 0xbe, 0xcc, 0xa6, 0x3e, 0x36, 0xba, 0xa5, 0x15, 0x92, 0xdf, 0x6f, 0x61, 0xbf,
- 0xdb, 0xd5, 0x3f, 0x3b, 0xbc, 0xe4, 0x87, 0x9e, 0xec, 0xc9, 0xb8, 0x87, 0x77, 0xd5, 0xd8, 0x77,
- 0x99, 0x46, 0x8e, 0x65, 0x50, 0x4f, 0x93, 0xee, 0x71, 0xff, 0xfa, 0x59, 0xac, 0xd9, 0x8b, 0xb0,
- 0x1e, 0xf8, 0x5e, 0xf8, 0x1f, 0x1f, 0x69, 0x46, 0x86, 0x12, 0x72, 0xd8, 0x74, 0x46, 0x5a, 0xbc,
- 0x57, 0x32, 0xf1, 0xca, 0xcb, 0x78, 0xb3, 0x6c, 0xbc, 0xca, 0x32, 0xde, 0xc3, 0x4b, 0xf4, 0x20,
- 0xce, 0x30, 0xe6, 0xc0, 0xbe, 0xe6, 0x8f, 0xf3, 0x6a, 0x43, 0x4d, 0xc7, 0x23, 0x21, 0x24, 0x57,
- 0xb3, 0x47, 0x4b, 0x1e, 0xb2, 0x4b, 0xc2, 0x9b, 0xec, 0xaf, 0x46, 0xb1, 0xa5, 0x80, 0xf4, 0x49,
- 0x9c, 0x86, 0x7b, 0x2f, 0x0e, 0x7d, 0x81, 0xc0, 0x73, 0xa9, 0x6f, 0xd2, 0xc8, 0xa1, 0xc8, 0xbe,
- 0xe6, 0xfc, 0xd8, 0x01, 0xb6, 0xd1, 0x34, 0x03, 0x1d, 0xb2, 0x9d, 0xe8, 0xa0, 0x8f, 0x45, 0x07,
- 0xab, 0x4d, 0xa4, 0x3e, 0x60, 0x23, 0x87, 0x4c, 0xd6, 0xc9, 0x83, 0x66, 0x2a, 0x51, 0x53, 0xf8,
- 0x8b, 0xaf, 0x97, 0xc8, 0x89, 0x03, 0x0e, 0xec, 0x3c, 0x10, 0x2e, 0xde, 0xcc, 0x93, 0x7d, 0x55,
- 0xd4, 0xec, 0x3d, 0xfa, 0x78, 0x11, 0x37, 0xde, 0xc6, 0x14, 0x93, 0x43, 0xda, 0xa7, 0x63, 0x47,
- 0x5a, 0x2c, 0xf2, 0xa6, 0xbf, 0x8e, 0x3d, 0x5f, 0x29, 0xc8, 0xd9, 0xf1, 0xb4, 0x82, 0x6c, 0x03,
- 0x3f, 0xe8, 0x99, 0xf1, 0x75, 0x41, 0xa1, 0xb9, 0xe6, 0x18, 0xff, 0x9f, 0x15, 0xc6, 0xba, 0x2b,
- 0x2d, 0x4e, 0x2c, 0x0b, 0x20, 0xf8, 0xd8, 0xc4, 0x31, 0x77, 0x29, 0xc0, 0x5b, 0xc9, 0x00, 0x92,
- 0xa2, 0x6f, 0x8e, 0x4c, 0x6c, 0xf7, 0x76, 0xc8, 0x3e, 0x39, 0xc2, 0x8a, 0xfe, 0xaa, 0x16, 0xcb,
- 0xf5, 0x46, 0xb1, 0x5c, 0xea, 0x4d, 0x40, 0xa1, 0x38, 0x4c, 0xec, 0x2d, 0x83, 0x8d, 0x94, 0x94,
- 0xa5, 0x96, 0xf0, 0xc2, 0x23, 0xf8, 0xf1, 0xd2, 0x4b, 0x5a, 0x14, 0xf7, 0x8f, 0xfd, 0xd2, 0x37,
- 0x7f, 0x5c, 0x92, 0xd2, 0x17, 0xbd, 0x48, 0x62, 0x64, 0x25, 0xf1, 0x7f, 0x5d, 0xc1, 0xbe, 0xb0,
- 0xc1, 0x3e, 0xd7, 0x86, 0x9f, 0xd7, 0x20, 0x8e, 0x6d, 0x39, 0xba, 0x91, 0x3a, 0x1f, 0x1d, 0x7d,
- 0x98, 0x1d, 0x4d, 0x1e, 0x22, 0xb5, 0x09, 0x70, 0x88, 0xfd, 0xff, 0x5f, 0xfc, 0x1f, 0xb3, 0xcb,
- 0x14, 0xd5, 0x17, 0x63, 0x00, 0x00
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xed, 0x7d, 0xd9, 0x76, 0xdb, 0x48,
+ 0xd3, 0xd8, 0xbd, 0x9e, 0x02, 0xc6, 0xcc, 0x67, 0x11, 0x43, 0x10, 0x04, 0x57, 0x49, 0xa4, 0x20,
+ 0x7f, 0x94, 0x2c, 0xdb, 0xf2, 0x22, 0x6b, 0xb4, 0xd8, 0x1e, 0x3b, 0x3e, 0x23, 0x90, 0x68, 0x92,
+ 0xb0, 0x40, 0x00, 0x03, 0x80, 0xa2, 0x28, 0x0e, 0xde, 0x20, 0x57, 0x39, 0xb9, 0xc8, 0xdd, 0x7f,
+ 0x9d, 0x93, 0x77, 0xc8, 0x45, 0x1e, 0x25, 0x4f, 0xf0, 0x3f, 0x42, 0xaa, 0x7a, 0xc1, 0x46, 0x68,
+ 0xb1, 0x67, 0xfe, 0x93, 0x7c, 0xe7, 0xc4, 0x0b, 0x09, 0x74, 0x57, 0x77, 0x57, 0x57, 0x55, 0xd7,
+ 0xd2, 0x1b, 0xa5, 0xdd, 0x27, 0xcf, 0xdf, 0x1f, 0x9c, 0xff, 0x76, 0x72, 0x28, 0x4d, 0xa3, 0x99,
+ 0xb3, 0x27, 0xed, 0x8a, 0x2f, 0x62, 0x5a, 0xf0, 0x35, 0x23, 0x91, 0x29, 0x8d, 0xa6, 0x66, 0x10,
+ 0x92, 0xc8, 0x90, 0xe7, 0xd1, 0xb8, 0xb6, 0x2d, 0x27, 0xc9, 0x9e, 0x1b, 0x11, 0x17, 0x92, 0x97,
+ 0x24, 0x94, 0xa5, 0x0d, 0xd7, 0x9c, 0x11, 0x43, 0x36, 0x7d, 0xdf, 0x21, 0xb5, 0x99, 0x37, 0xb4,
+ 0xe1, 0x6b, 0x41, 0x86, 0x35, 0x48, 0xa8, 0x8d, 0x4c, 0xdf, 0x1c, 0x3a, 0x24, 0x29, 0xb9, 0x91,
+ 0x14, 0x5d, 0xd8, 0x56, 0x34, 0x35, 0x2c, 0x72, 0x6d, 0x8f, 0x00, 0x1c, 0x5f, 0x54, 0xdb, 0xb5,
+ 0x23, 0xdb, 0x74, 0x6a, 0xe1, 0xc8, 0x74, 0x88, 0xd1, 0x90, 0x25, 0x56, 0xf1, 0xb5, 0x4d, 0x16,
+ 0xbe, 0x17, 0x44, 0x69, 0x25, 0xbc, 0xc1, 0x79, 0x34, 0xf5, 0x02, 0x39, 0xc5, 0xe6, 0x9d, 0xe7,
+ 0xb9, 0xef, 0x3c, 0x6b, 0xee, 0x90, 0x50, 0x32, 0x5d, 0x4b, 0xb2, 0xa3, 0x90, 0x66, 0x06, 0xf6,
+ 0x70, 0x1e, 0x79, 0x41, 0x88, 0x15, 0x38, 0xb6, 0x7b, 0x25, 0x05, 0xc4, 0x31, 0x64, 0x1b, 0xb2,
+ 0x00, 0xf9, 0x69, 0x40, 0xc6, 0x86, 0x6c, 0x99, 0x91, 0xd9, 0xb3, 0x67, 0xe6, 0x84, 0xd4, 0x7d,
+ 0x77, 0xd2, 0x1f, 0x9a, 0x21, 0xe9, 0xb6, 0x55, 0xfb, 0xc3, 0xfe, 0xfb, 0xd3, 0x85, 0xfe, 0xe6,
+ 0xe5, 0xc4, 0x1b, 0xc0, 0x9f, 0xe3, 0xb3, 0x8b, 0xe9, 0xe1, 0xc5, 0x04, 0x9e, 0xf6, 0xf1, 0x75,
+ 0xf0, 0xeb, 0xc1, 0xe0, 0x37, 0xfc, 0x1e, 0x6f, 0xd7, 0x77, 0xa6, 0x34, 0xe5, 0xd3, 0xf1, 0xd9,
+ 0xa9, 0x7e, 0x34, 0x08, 0xc2, 0xf6, 0xa8, 0xfb, 0x2b, 0xbc, 0x1f, 0x9e, 0x3a, 0x1f, 0x0f, 0x9d,
+ 0xd9, 0xf9, 0x85, 0x3e, 0x78, 0x83, 0xe5, 0x06, 0xf0, 0xf1, 0x9b, 0xe5, 0x43, 0xd1, 0x81, 0xa8,
+ 0xe5, 0x25, 0x4d, 0x87, 0x3f, 0x5d, 0x7c, 0x7f, 0xc7, 0xd3, 0x0f, 0x07, 0x83, 0x37, 0x83, 0x83,
+ 0x2c, 0xdc, 0xe1, 0x9b, 0xc1, 0xf3, 0xdc, 0x3b, 0x2b, 0xa5, 0x7f, 0xf8, 0xf4, 0x6a, 0x89, 0x69,
+ 0xcd, 0x43, 0xe7, 0xf0, 0xd7, 0x0f, 0xbf, 0xb6, 0x0f, 0x7f, 0xfb, 0x70, 0x76, 0x7e, 0x11, 0x0d,
+ 0x2f, 0x4e, 0x07, 0x3b, 0xdb, 0x37, 0x6f, 0xce, 0x9d, 0x97, 0xfb, 0x17, 0xb7, 0x87, 0x9f, 0xdf,
+ 0xbc, 0xb8, 0x78, 0xb5, 0xef, 0x8c, 0x3e, 0xd8, 0x2f, 0xf6, 0xad, 0xb3, 0x03, 0xe7, 0xb5, 0x79,
+ 0x76, 0xf5, 0xba, 0xf5, 0x89, 0x04, 0x07, 0xd1, 0xf9, 0xf5, 0xa7, 0xd3, 0x0f, 0xcb, 0xd7, 0xed,
+ 0xc1, 0xb6, 0xf7, 0x36, 0xba, 0x69, 0xb8, 0xcb, 0x41, 0x34, 0xbc, 0xf2, 0x3e, 0x05, 0x1f, 0x0f,
+ 0x1c, 0xcf, 0xd2, 0xff, 0x78, 0x71, 0xf4, 0xc9, 0x9c, 0x9e, 0xbe, 0x1c, 0x7e, 0x7c, 0x79, 0x4c,
+ 0xce, 0x8e, 0x3b, 0x7a, 0x27, 0xe8, 0x9c, 0x9c, 0xb4, 0x8f, 0x9e, 0x6f, 0xed, 0x34, 0x6e, 0x3b,
+ 0x9d, 0xc5, 0xad, 0xb5, 0x35, 0x6d, 0x1d, 0xec, 0x37, 0x0f, 0x96, 0xf5, 0xab, 0x51, 0xf3, 0xfa,
+ 0xfc, 0x40, 0x7f, 0xfe, 0xaa, 0x7a, 0xb6, 0xff, 0xde, 0x19, 0xb6, 0xac, 0xd7, 0xdd, 0x8f, 0xe6,
+ 0xd9, 0xf8, 0xf6, 0xe6, 0xc4, 0xeb, 0x38, 0xdd, 0x83, 0x76, 0xf8, 0x69, 0x41, 0x26, 0xb7, 0x27,
+ 0xef, 0x0f, 0x47, 0xcf, 0x67, 0xba, 0xad, 0x7f, 0xb0, 0xa7, 0x37, 0xb7, 0xf3, 0x4f, 0x17, 0xa3,
+ 0x6a, 0x63, 0xe0, 0xde, 0x2e, 0xde, 0x79, 0xef, 0xeb, 0xdb, 0x17, 0xdb, 0x93, 0x93, 0xa3, 0xd9,
+ 0x9b, 0x41, 0x78, 0xdb, 0xfe, 0x16, 0x6d, 0x7d, 0x7c, 0x77, 0x13, 0xec, 0x5c, 0x9c, 0x1c, 0xdf,
+ 0x3a, 0x93, 0xfa, 0xbb, 0x8f, 0x5e, 0xe3, 0xda, 0x7a, 0x7e, 0x16, 0xfc, 0x3a, 0x98, 0x07, 0xaf,
+ 0xa7, 0xaf, 0xf7, 0xf7, 0xb7, 0x96, 0xe3, 0x5b, 0x3d, 0x78, 0x3b, 0x6e, 0xb5, 0xad, 0x4f, 0xe1,
+ 0xf9, 0xc9, 0x9b, 0x6f, 0xbf, 0xcd, 0x3e, 0x6f, 0xbd, 0x19, 0xb4, 0xb7, 0xa6, 0x67, 0xcb, 0xed,
+ 0xb7, 0xd5, 0xe1, 0xe4, 0xd3, 0x4e, 0xf3, 0xec, 0xec, 0xe5, 0xe9, 0x96, 0x3f, 0xbc, 0x98, 0xd9,
+ 0x83, 0xd7, 0x57, 0xe1, 0x87, 0xd7, 0xa3, 0x77, 0xef, 0x5f, 0x3e, 0xbf, 0x9a, 0x7e, 0x3b, 0x71,
+ 0xaf, 0xe6, 0x83, 0xce, 0xfc, 0xf8, 0xc5, 0xf3, 0x71, 0xb5, 0x79, 0x54, 0xbd, 0xf9, 0x1c, 0x9c,
+ 0x2f, 0xfe, 0xf8, 0xe3, 0x74, 0xd2, 0x7a, 0x5d, 0x3d, 0x6c, 0x1d, 0x8e, 0x0f, 0x4e, 0xde, 0x1d,
+ 0x2d, 0x7c, 0xfb, 0xfc, 0x73, 0xf5, 0x7c, 0xf1, 0x71, 0xfa, 0x69, 0x34, 0x9c, 0xce, 0xcc, 0xd9,
+ 0xed, 0x6f, 0x6f, 0x86, 0x8b, 0xcf, 0xcf, 0xff, 0xb0, 0x5e, 0x76, 0x9b, 0x5b, 0x83, 0xc1, 0xf6,
+ 0x87, 0x9b, 0xc3, 0xc1, 0xd9, 0xf5, 0xf9, 0xa4, 0x7e, 0xae, 0x07, 0x6f, 0x46, 0x6f, 0x3e, 0x9f,
+ 0x0d, 0xa7, 0x66, 0xb4, 0xed, 0x1f, 0xbb, 0xe3, 0xc1, 0x49, 0xa3, 0xde, 0x58, 0x0c, 0x3f, 0x57,
+ 0x97, 0xd5, 0xee, 0x7e, 0x77, 0xeb, 0x9b, 0x7b, 0xbb, 0x35, 0x3d, 0xd0, 0x5d, 0xe7, 0xa8, 0xbd,
+ 0x73, 0xed, 0x02, 0xb9, 0x7e, 0x8b, 0xde, 0x9f, 0x7d, 0xae, 0x9e, 0x76, 0x03, 0x7d, 0xb6, 0xd4,
+ 0xbb, 0xfe, 0xe1, 0xe4, 0x6d, 0x50, 0x9f, 0x9f, 0x0e, 0xa3, 0x1d, 0xff, 0x60, 0x7b, 0xf2, 0x69,
+ 0xff, 0xc5, 0xe1, 0x52, 0xf7, 0xf5, 0xe7, 0xef, 0x3f, 0x37, 0xc2, 0xd3, 0x8f, 0x57, 0xcb, 0xc1,
+ 0xbe, 0x1d, 0x9e, 0xbd, 0x6c, 0x0d, 0xb6, 0x5f, 0x6f, 0xbd, 0x7e, 0xe1, 0xdf, 0x8e, 0xde, 0x06,
+ 0x1f, 0x6f, 0x5e, 0x7d, 0x33, 0x75, 0x73, 0x09, 0xc3, 0xe4, 0x2c, 0x78, 0xe5, 0x39, 0x93, 0xe7,
+ 0xee, 0xe2, 0x7c, 0xab, 0xfa, 0x71, 0xbc, 0x9c, 0xbf, 0xfb, 0xf8, 0xf9, 0x73, 0xfd, 0x66, 0xb4,
+ 0xd3, 0x31, 0x27, 0xed, 0x77, 0x07, 0xe7, 0x9f, 0x2f, 0xaa, 0xa7, 0xf5, 0xf7, 0xad, 0x03, 0x7b,
+ 0xe2, 0xff, 0x7a, 0xfb, 0xf1, 0x68, 0x1a, 0x34, 0x5f, 0x9c, 0xbe, 0x79, 0xfb, 0xca, 0x7e, 0x7d,
+ 0x7d, 0xfc, 0xc6, 0x79, 0xfb, 0x7a, 0xff, 0x74, 0x46, 0xda, 0xdd, 0xe9, 0xe7, 0xed, 0xdf, 0x5a,
+ 0xad, 0x6d, 0x62, 0x7f, 0xbb, 0x6a, 0x7c, 0xec, 0x5c, 0xdd, 0xbe, 0xf2, 0x87, 0xdb, 0xd1, 0xd5,
+ 0xcb, 0xc1, 0xfc, 0xe0, 0xc3, 0xe2, 0xd3, 0x09, 0x69, 0xfb, 0x93, 0x83, 0xb3, 0xd1, 0xcd, 0xd9,
+ 0xc0, 0x59, 0x90, 0x17, 0x27, 0xdd, 0xea, 0xc1, 0x38, 0xf8, 0x50, 0x7f, 0xdf, 0xf9, 0xf8, 0xea,
+ 0x4d, 0xab, 0x7d, 0x5b, 0xef, 0xe8, 0xe6, 0xd1, 0x68, 0xfa, 0xeb, 0xab, 0xfd, 0x0e, 0x13, 0xcd,
+ 0xd7, 0xa7, 0x17, 0x9d, 0xc3, 0xe0, 0xea, 0xf5, 0x64, 0x32, 0x31, 0x0c, 0x79, 0x6f, 0x43, 0xda,
+ 0x0d, 0x47, 0x81, 0xed, 0x47, 0x7b, 0xf5, 0xba, 0xf4, 0x4f, 0x07, 0xc6, 0xba, 0x1b, 0x12, 0x49,
+ 0x92, 0x5e, 0x1e, 0x5f, 0x48, 0x2f, 0x0f, 0x8f, 0x0f, 0x4f, 0x07, 0x6f, 0xa5, 0x93, 0x8b, 0xfd,
+ 0xb7, 0x47, 0x07, 0x12, 0xfc, 0x3f, 0x3c, 0x3e, 0x3b, 0x94, 0x3e, 0x90, 0x20, 0xb4, 0x3d, 0x57,
+ 0x6a, 0xa9, 0x52, 0x73, 0x47, 0x7a, 0x3d, 0x77, 0x89, 0xd4, 0xd4, 0xf5, 0xad, 0x8d, 0x7c, 0x05,
+ 0x2f, 0xbc, 0x40, 0x72, 0x01, 0xea, 0xe5, 0xc9, 0xdb, 0xda, 0x75, 0x4b, 0x9a, 0x87, 0x30, 0x74,
+ 0x55, 0x18, 0xed, 0xb3, 0x19, 0x09, 0x46, 0xa0, 0x44, 0x24, 0x0e, 0x1a, 0x4a, 0xb3, 0x79, 0x18,
+ 0x49, 0x43, 0x22, 0xf9, 0xf3, 0x00, 0xd4, 0x59, 0x48, 0x2c, 0x4d, 0x3a, 0x00, 0xa5, 0x60, 0x8e,
+ 0x22, 0x69, 0x06, 0x0a, 0x63, 0xc6, 0x14, 0xc6, 0x3f, 0xed, 0x91, 0xe3, 0xcd, 0x2d, 0x0d, 0x6a,
+ 0xd8, 0x18, 0x39, 0x66, 0x18, 0x52, 0xa0, 0xc0, 0x73, 0x1c, 0x12, 0xac, 0x16, 0xa1, 0xe1, 0xce,
+ 0x1d, 0xa7, 0x1f, 0x2e, 0xc3, 0x23, 0x77, 0xec, 0x19, 0xab, 0xb8, 0xcf, 0x8b, 0xb1, 0xf4, 0x68,
+ 0x4a, 0x40, 0x21, 0xd1, 0xc7, 0x99, 0x69, 0xbb, 0xc7, 0xe6, 0x35, 0x7b, 0xf1, 0xdc, 0xb7, 0x9e,
+ 0x69, 0x55, 0x94, 0x95, 0xe5, 0x8d, 0xe6, 0x33, 0xd0, 0x51, 0x5a, 0x64, 0x47, 0xa0, 0xda, 0x40,
+ 0x33, 0x1e, 0x83, 0x0a, 0xab, 0x28, 0x55, 0xf9, 0xdf, 0xff, 0xed, 0xbf, 0xfc, 0x0f, 0x69, 0xb8,
+ 0x94, 0xb2, 0xba, 0xeb, 0xdf, 0xff, 0xed, 0x3f, 0xff, 0x57, 0x59, 0x5d, 0xd8, 0xae, 0xe5, 0x2d,
+ 0x34, 0xc7, 0x1b, 0x99, 0x11, 0xd0, 0x43, 0x43, 0x45, 0xa5, 0xd9, 0xee, 0xc8, 0x99, 0x5b, 0x24,
+ 0xac, 0xc8, 0x8d, 0xe6, 0x96, 0xa6, 0xc3, 0xdf, 0x86, 0xac, 0x3c, 0x8b, 0xa6, 0x76, 0xa8, 0x8d,
+ 0x49, 0x34, 0x9a, 0x42, 0x15, 0xc4, 0x01, 0xda, 0xbc, 0xb5, 0xaf, 0xc9, 0x19, 0x09, 0xae, 0x49,
+ 0x50, 0x51, 0x7a, 0x34, 0x7b, 0x66, 0x5e, 0x91, 0x8f, 0x67, 0x15, 0x45, 0x65, 0x6f, 0x02, 0x7d,
+ 0xb2, 0x90, 0x78, 0xb3, 0x7d, 0x87, 0x44, 0x12, 0x31, 0x26, 0x47, 0x56, 0x45, 0x1e, 0x7a, 0xd6,
+ 0x52, 0x56, 0xfa, 0x04, 0xda, 0x73, 0x49, 0xf0, 0xea, 0xfc, 0xdd, 0xdb, 0xaa, 0x21, 0xef, 0x4e,
+ 0x1b, 0x7b, 0x67, 0x91, 0x09, 0x75, 0x4f, 0xa6, 0x91, 0x84, 0x88, 0xef, 0xd6, 0x21, 0x49, 0x66,
+ 0x35, 0x72, 0x1a, 0x40, 0x7d, 0xe7, 0xf8, 0x94, 0x49, 0xd4, 0x46, 0x01, 0x31, 0x23, 0x82, 0xb5,
+ 0x88, 0xe6, 0x59, 0xfa, 0x84, 0x44, 0x14, 0x16, 0x52, 0x1f, 0xdf, 0xd9, 0xa7, 0x4f, 0x2b, 0x39,
+ 0xb4, 0x36, 0x77, 0x6d, 0xd7, 0x9f, 0x47, 0x92, 0x6d, 0x19, 0x32, 0xf6, 0x5a, 0x43, 0xad, 0x1e,
+ 0x2d, 0x7d, 0x30, 0x10, 0xa3, 0x29, 0x19, 0x5d, 0x0d, 0xbd, 0x1b, 0x30, 0x11, 0xc8, 0xd1, 0x5c,
+ 0x02, 0x3e, 0x11, 0x6b, 0x6f, 0x53, 0xd0, 0x43, 0xb0, 0x0d, 0xe9, 0xc1, 0x9e, 0x2b, 0x59, 0x42,
+ 0xe1, 0x37, 0x71, 0xf2, 0xc0, 0xf9, 0x7e, 0xcd, 0x43, 0x12, 0xbc, 0x98, 0xbb, 0x67, 0x24, 0x9a,
+ 0xfb, 0x15, 0x25, 0x36, 0xc3, 0xa5, 0x3b, 0x92, 0xee, 0xe4, 0xc9, 0x8a, 0x11, 0xdb, 0x5c, 0x98,
+ 0x76, 0x54, 0xa1, 0x9f, 0x0c, 0xb6, 0x22, 0xd7, 0x67, 0x76, 0x38, 0xaa, 0xd3, 0xe6, 0xb4, 0x6f,
+ 0x21, 0x74, 0x46, 0x51, 0xe8, 0x77, 0x05, 0xd9, 0x11, 0x82, 0x19, 0xac, 0x54, 0xc6, 0x73, 0x77,
+ 0x84, 0x54, 0xaa, 0x00, 0x95, 0x95, 0x55, 0x00, 0x2d, 0x06, 0x2e, 0x60, 0x1d, 0x4d, 0x35, 0x73,
+ 0x18, 0x02, 0x75, 0x3c, 0xa5, 0x96, 0xbc, 0x45, 0xf0, 0x16, 0x2b, 0x4a, 0x7f, 0xec, 0x05, 0x15,
+ 0x6c, 0x33, 0x92, 0xbc, 0xb1, 0x44, 0x94, 0x5c, 0xdf, 0x4c, 0xcb, 0x62, 0x32, 0x50, 0x89, 0x14,
+ 0x2a, 0x05, 0x91, 0xb1, 0xe2, 0xa2, 0xde, 0x5b, 0xc5, 0x71, 0x3f, 0xd2, 0xf8, 0x9b, 0x36, 0xf4,
+ 0xcc, 0x00, 0xe8, 0x4c, 0x42, 0xbf, 0xd5, 0x04, 0xbe, 0x27, 0xe9, 0x6e, 0xf0, 0x7e, 0x7c, 0x62,
+ 0xbb, 0xa1, 0xd1, 0xd6, 0x33, 0xa9, 0xbe, 0xed, 0x9e, 0x03, 0x23, 0x42, 0xe3, 0xcb, 0xd7, 0xa4,
+ 0x7d, 0x62, 0xe8, 0x7d, 0xb2, 0xbb, 0x5e, 0xb2, 0x4f, 0xaa, 0x55, 0x65, 0xbd, 0xe8, 0x17, 0xf2,
+ 0xd5, 0xa0, 0x7d, 0x09, 0xbc, 0xb9, 0x6b, 0x55, 0x5a, 0xbf, 0xb0, 0x17, 0xb0, 0xee, 0xde, 0xac,
+ 0x02, 0xdd, 0xa2, 0xfd, 0x08, 0xc8, 0x88, 0x00, 0x6d, 0x9f, 0x83, 0x0d, 0x87, 0x1e, 0x08, 0x59,
+ 0x02, 0xbf, 0xe5, 0x08, 0x1c, 0x83, 0xe0, 0xda, 0x74, 0x32, 0x24, 0x53, 0x56, 0x54, 0xc0, 0x85,
+ 0xa4, 0x28, 0x1a, 0x97, 0x84, 0xa7, 0x4f, 0x47, 0xc9, 0x78, 0x4f, 0x08, 0x33, 0x21, 0x20, 0x66,
+ 0xc0, 0x62, 0x5a, 0x33, 0x90, 0x51, 0x6d, 0x90, 0xd6, 0x83, 0xf5, 0xb3, 0x5e, 0x7e, 0xd1, 0xd5,
+ 0x86, 0xda, 0x54, 0x5b, 0x6a, 0xfb, 0x6b, 0xdf, 0x1e, 0x57, 0xc8, 0x17, 0x3d, 0xd7, 0x91, 0x7c,
+ 0x37, 0x54, 0xdd, 0x30, 0x10, 0x82, 0x15, 0x8e, 0xd8, 0x18, 0x44, 0xaa, 0x30, 0x82, 0xc3, 0x48,
+ 0x84, 0x2a, 0x80, 0xd5, 0x09, 0x13, 0x81, 0x88, 0xd1, 0x6e, 0x06, 0xe1, 0x35, 0x6a, 0x46, 0x40,
+ 0x4d, 0xf2, 0x25, 0xaa, 0x76, 0x72, 0xad, 0x36, 0x3b, 0xdd, 0x22, 0x01, 0x4b, 0x7a, 0xed, 0x07,
+ 0x04, 0x5d, 0xae, 0x7d, 0x6c, 0xba, 0x12, 0xa9, 0x44, 0x89, 0x63, 0xe2, 0x80, 0xd2, 0xe5, 0x12,
+ 0x5e, 0x21, 0x94, 0x12, 0xba, 0xae, 0xc4, 0x42, 0xa7, 0xac, 0x10, 0x3d, 0xe4, 0xc4, 0x22, 0x54,
+ 0x98, 0x38, 0x72, 0x65, 0x52, 0x91, 0xa7, 0x51, 0xe4, 0x87, 0x3d, 0xd9, 0x30, 0x8a, 0x23, 0xdc,
+ 0x0f, 0xbc, 0xc8, 0x1b, 0x79, 0xce, 0x33, 0x79, 0x11, 0x86, 0x72, 0x0f, 0x3e, 0x65, 0x50, 0x87,
+ 0xbd, 0x7a, 0x5d, 0xae, 0xae, 0x29, 0x03, 0x2f, 0x8c, 0xd0, 0xe5, 0xab, 0xca, 0x75, 0x80, 0x42,
+ 0x94, 0x43, 0xcf, 0x21, 0x90, 0x3f, 0xa9, 0xc8, 0x0c, 0x05, 0x69, 0x1e, 0x38, 0x32, 0x60, 0xaa,
+ 0x72, 0x2c, 0xe8, 0x38, 0xfe, 0x48, 0x86, 0x67, 0x1e, 0xf0, 0x36, 0xaa, 0xa4, 0x19, 0xda, 0xd0,
+ 0x76, 0xcd, 0x60, 0x79, 0x4e, 0xf5, 0x83, 0x19, 0x04, 0xe6, 0x72, 0x38, 0x1f, 0x8f, 0x49, 0x20,
+ 0x27, 0x00, 0x60, 0x11, 0x48, 0x88, 0xd6, 0xc4, 0x20, 0xc6, 0x1e, 0x76, 0x8c, 0x68, 0xe8, 0x1c,
+ 0x4a, 0x40, 0xd5, 0xc8, 0x74, 0x47, 0x04, 0x86, 0xcf, 0x00, 0xcb, 0xed, 0xd3, 0x72, 0x82, 0x63,
+ 0xd8, 0xde, 0x85, 0xed, 0x46, 0xdb, 0x34, 0x8f, 0x97, 0xa1, 0x6c, 0x03, 0xd6, 0x46, 0x09, 0x6b,
+ 0x49, 0x09, 0x6b, 0xc9, 0xd3, 0xa7, 0xb9, 0xd1, 0x98, 0x23, 0x3f, 0x8e, 0xf0, 0x3c, 0xf5, 0xf9,
+ 0xbb, 0x68, 0x97, 0x9a, 0x9f, 0x60, 0xb9, 0x8a, 0x8c, 0xd7, 0x67, 0xef, 0x8f, 0x35, 0x1f, 0xfd,
+ 0x75, 0xd1, 0x7c, 0x0c, 0xf4, 0x03, 0x95, 0xe2, 0x29, 0x2b, 0x06, 0xa8, 0x0a, 0xca, 0x91, 0x20,
+ 0x00, 0x49, 0x12, 0xb4, 0x43, 0xed, 0x22, 0xd1, 0x24, 0x59, 0xf5, 0x54, 0x51, 0x96, 0x4a, 0x1c,
+ 0x7e, 0x68, 0xa8, 0x4c, 0x9f, 0x3e, 0xfd, 0x82, 0x0e, 0x3e, 0xe0, 0x28, 0xab, 0x32, 0xa2, 0xc2,
+ 0x9e, 0x40, 0xee, 0xf0, 0xe1, 0x6b, 0xaa, 0xaa, 0x19, 0xb8, 0x22, 0xba, 0xfb, 0xa4, 0x91, 0x8c,
+ 0x7c, 0x0f, 0x35, 0x4f, 0x89, 0x4e, 0xf5, 0x34, 0x50, 0xdd, 0x46, 0x04, 0x9f, 0xa8, 0xda, 0x8d,
+ 0x27, 0x3a, 0x90, 0xe4, 0x59, 0x8e, 0xc7, 0x18, 0x98, 0x60, 0x61, 0x56, 0x4e, 0x32, 0x1d, 0xd0,
+ 0xbb, 0xd6, 0x52, 0x12, 0xa3, 0x13, 0x10, 0x89, 0x84, 0x91, 0x2b, 0xd1, 0x68, 0x8c, 0x7c, 0x94,
+ 0x2f, 0x9a, 0x1d, 0x32, 0xfe, 0x44, 0x4a, 0xbe, 0x05, 0x08, 0x43, 0x24, 0x2a, 0x0d, 0xe0, 0x53,
+ 0x00, 0xda, 0x37, 0x3e, 0x19, 0xe5, 0xea, 0xcd, 0x6b, 0x98, 0x38, 0xce, 0x48, 0x0b, 0xb8, 0x0d,
+ 0x21, 0x93, 0x95, 0x5c, 0x8d, 0x40, 0x57, 0x9a, 0x43, 0x03, 0x11, 0x18, 0x13, 0xc1, 0x92, 0xca,
+ 0x27, 0x28, 0x8d, 0x73, 0x7b, 0x46, 0xbc, 0x79, 0x54, 0x61, 0xd4, 0x57, 0x1b, 0x1d, 0x18, 0x49,
+ 0xa9, 0xdc, 0x02, 0x9b, 0xb2, 0xb5, 0x7b, 0x3e, 0x71, 0x4b, 0x2b, 0xc7, 0x0c, 0xac, 0x31, 0x0b,
+ 0x4c, 0x79, 0x58, 0x0a, 0xcd, 0xb9, 0x8b, 0x43, 0x39, 0x20, 0x7f, 0xcc, 0x49, 0x18, 0xbd, 0x46,
+ 0x93, 0x42, 0xe8, 0xc8, 0x7d, 0xbc, 0xed, 0x05, 0xce, 0xa0, 0xe8, 0x41, 0x99, 0x27, 0x25, 0xc3,
+ 0x9d, 0x8b, 0x60, 0x08, 0xf1, 0x96, 0x3b, 0xb1, 0xc7, 0x30, 0x0a, 0xb8, 0x7e, 0x06, 0xe4, 0x42,
+ 0x02, 0xea, 0x27, 0xa2, 0xcd, 0xa7, 0x94, 0x64, 0xcd, 0xdb, 0xe1, 0xfb, 0xe1, 0x37, 0xa0, 0x37,
+ 0xbc, 0x2a, 0x39, 0x2b, 0xc5, 0x92, 0xb5, 0x2b, 0xb2, 0x0c, 0x2b, 0x42, 0xa2, 0x3c, 0xd0, 0x93,
+ 0xd1, 0x57, 0xd5, 0x05, 0x79, 0x09, 0x7d, 0x07, 0x6c, 0xa7, 0xac, 0xc9, 0x40, 0x55, 0x23, 0xc7,
+ 0xfd, 0x31, 0x74, 0xe8, 0x83, 0x19, 0x54, 0x5c, 0x18, 0x77, 0xaa, 0xfb, 0xa5, 0xf1, 0x95, 0x0e,
+ 0xc4, 0x50, 0x59, 0x5d, 0x9b, 0x01, 0xf6, 0xfb, 0xdc, 0x3b, 0x40, 0x7f, 0x00, 0x52, 0x72, 0x8c,
+ 0xf5, 0x98, 0xa8, 0xc8, 0x5c, 0x99, 0x82, 0xce, 0x8a, 0x40, 0x22, 0x69, 0xcd, 0xc2, 0xf1, 0x03,
+ 0x90, 0x38, 0xe6, 0xf4, 0x4a, 0x35, 0x27, 0x1d, 0xfd, 0xa9, 0xbb, 0x48, 0x15, 0x54, 0x24, 0x5d,
+ 0x1c, 0x1d, 0x9f, 0x6f, 0xff, 0xfe, 0x6e, 0xf0, 0xc9, 0x68, 0x76, 0x3a, 0x2a, 0xbe, 0x35, 0xba,
+ 0xf4, 0xb5, 0xdb, 0xe9, 0xb4, 0x3a, 0x7d, 0x61, 0x31, 0x24, 0xd4, 0x08, 0x24, 0x31, 0xe3, 0x89,
+ 0xa7, 0x08, 0xce, 0xd1, 0xa1, 0x43, 0xf0, 0x71, 0x7f, 0x49, 0x21, 0xe2, 0xa4, 0xc4, 0xe8, 0xb0,
+ 0xac, 0x00, 0xf3, 0x46, 0x78, 0x99, 0x3c, 0xfc, 0xc1, 0x21, 0x73, 0x15, 0x18, 0x05, 0xef, 0x28,
+ 0x01, 0xb6, 0x9f, 0x57, 0x49, 0x34, 0x18, 0xea, 0xc0, 0xb0, 0x83, 0xa9, 0xed, 0x58, 0x40, 0x16,
+ 0xd5, 0x4b, 0xeb, 0xb2, 0xc3, 0xb7, 0xde, 0x02, 0xc2, 0x46, 0x13, 0xd5, 0x4c, 0x82, 0x04, 0xd1,
+ 0x22, 0x2f, 0x4d, 0x57, 0xc0, 0x9a, 0x65, 0x4a, 0x40, 0x54, 0x7f, 0x60, 0xfa, 0x9c, 0xdb, 0x32,
+ 0x13, 0x0f, 0xf9, 0x89, 0x81, 0x7a, 0x82, 0xfa, 0x22, 0xac, 0x0e, 0x59, 0xe6, 0x42, 0x04, 0x0f,
+ 0x89, 0xca, 0x00, 0x3b, 0xe7, 0xed, 0x82, 0x18, 0x13, 0x77, 0x12, 0x4d, 0xfb, 0x1e, 0x18, 0x35,
+ 0x50, 0xa7, 0xde, 0xb3, 0xa8, 0x6a, 0x80, 0x57, 0x39, 0x35, 0x83, 0x41, 0x04, 0xe8, 0x41, 0xdb,
+ 0x17, 0x80, 0x2f, 0x6f, 0xbb, 0xf7, 0x24, 0x87, 0x62, 0x0a, 0x06, 0x9e, 0x63, 0x79, 0x4e, 0xad,
+ 0xa1, 0x28, 0x58, 0xa5, 0x2c, 0xc9, 0xd5, 0x0c, 0x7c, 0x4f, 0xae, 0x81, 0x08, 0x64, 0x12, 0xfe,
+ 0xfc, 0x53, 0xfe, 0x3d, 0x9f, 0xc2, 0x4b, 0xf5, 0xf2, 0xf8, 0x08, 0x32, 0x46, 0x59, 0xaa, 0x25,
+ 0x32, 0xce, 0x49, 0xf6, 0x24, 0xaf, 0x90, 0x08, 0xfa, 0xb5, 0x38, 0xf8, 0x9f, 0x40, 0x03, 0xf0,
+ 0x28, 0x8b, 0xa2, 0x28, 0x85, 0x9c, 0x50, 0xd0, 0xbe, 0x47, 0x6b, 0xc9, 0xa4, 0x29, 0x19, 0x36,
+ 0x53, 0x07, 0x72, 0xe0, 0x5a, 0x87, 0x37, 0x64, 0x34, 0x8f, 0x08, 0xb2, 0x1c, 0xf4, 0xb9, 0xab,
+ 0x32, 0xad, 0x02, 0xde, 0x03, 0x75, 0x30, 0x49, 0x35, 0x52, 0x57, 0x33, 0x12, 0x4d, 0x3d, 0xab,
+ 0x27, 0x83, 0x90, 0xc9, 0xb1, 0x82, 0xee, 0x38, 0x28, 0x03, 0x63, 0x0f, 0x5c, 0xa2, 0xab, 0x67,
+ 0xc0, 0x4b, 0x72, 0x13, 0x01, 0x21, 0x2b, 0xe1, 0xd3, 0xa7, 0x30, 0xfe, 0x5f, 0xd8, 0xa0, 0x73,
+ 0xe5, 0x6a, 0x54, 0x95, 0xa9, 0x72, 0x1c, 0xa3, 0x27, 0x01, 0x63, 0x4e, 0x46, 0xc7, 0x54, 0x14,
+ 0x5c, 0xb9, 0x15, 0x0f, 0xb5, 0x0b, 0xb8, 0x53, 0xd4, 0xe4, 0x64, 0x5c, 0x54, 0x65, 0x45, 0xab,
+ 0xf1, 0x54, 0xf9, 0x10, 0x95, 0x10, 0x68, 0xed, 0x28, 0x02, 0x01, 0xc0, 0x1a, 0x15, 0x35, 0xab,
+ 0xa7, 0xb0, 0xb8, 0x82, 0x63, 0xd7, 0x74, 0x9c, 0x65, 0x05, 0x84, 0x68, 0x6f, 0x15, 0x2b, 0xf1,
+ 0xc6, 0x6e, 0x9d, 0x07, 0x90, 0x49, 0x24, 0xb9, 0xf1, 0x2f, 0x17, 0x4a, 0xd2, 0x28, 0x67, 0x95,
+ 0x0d, 0x17, 0x56, 0x99, 0x30, 0x2b, 0x1b, 0xcd, 0x5c, 0xee, 0xfa, 0x7b, 0xbb, 0x8e, 0x39, 0x24,
+ 0xce, 0x1e, 0x2d, 0xb4, 0x5b, 0x67, 0x2f, 0xd2, 0x7f, 0x72, 0x01, 0x53, 0x20, 0x01, 0x71, 0x40,
+ 0x00, 0xf8, 0xc4, 0x18, 0x8d, 0xa2, 0x6a, 0x2c, 0x49, 0xa6, 0x01, 0x50, 0x3e, 0x05, 0x8c, 0xd3,
+ 0xd4, 0x74, 0x27, 0x18, 0x09, 0xa5, 0x5e, 0x1e, 0x0b, 0xbd, 0x42, 0x11, 0x7a, 0x51, 0xf5, 0x06,
+ 0x2e, 0xec, 0x9c, 0x28, 0xf2, 0x1e, 0x6b, 0x04, 0x9a, 0xf1, 0x7c, 0x2a, 0x51, 0x34, 0xdd, 0x80,
+ 0x21, 0x6b, 0x06, 0x38, 0x23, 0x26, 0xd3, 0xf0, 0x6f, 0x1f, 0x9e, 0x76, 0xeb, 0x0c, 0xe2, 0xbe,
+ 0x12, 0x0e, 0x86, 0x89, 0x72, 0x1a, 0x31, 0x3e, 0x54, 0x66, 0xe1, 0x80, 0xc5, 0xdd, 0xfb, 0xf8,
+ 0xf6, 0xf0, 0xf9, 0x43, 0x90, 0x13, 0x18, 0x31, 0x04, 0xcc, 0xdf, 0xde, 0x4b, 0xf6, 0xf0, 0x10,
+ 0x3c, 0x58, 0x77, 0x79, 0xef, 0x39, 0xb9, 0x7e, 0x08, 0x8e, 0x63, 0xfc, 0x28, 0x6c, 0x2d, 0x33,
+ 0xb8, 0xc2, 0x4a, 0xc1, 0x9b, 0xc6, 0x1e, 0x3e, 0x04, 0x3e, 0x84, 0x4f, 0x79, 0x6f, 0x1f, 0x3e,
+ 0x1f, 0x82, 0x84, 0xc8, 0x07, 0x2a, 0x06, 0x0f, 0xf1, 0xea, 0x41, 0x22, 0xfb, 0xe6, 0x08, 0x79,
+ 0x82, 0x5f, 0x0f, 0xc1, 0xba, 0x4b, 0x13, 0xe8, 0x75, 0x0c, 0x9f, 0xeb, 0x90, 0x75, 0x26, 0x2f,
+ 0x7b, 0xbb, 0x50, 0xa1, 0xbb, 0x27, 0xfd, 0x89, 0x29, 0xf8, 0xc4, 0x03, 0x6b, 0x16, 0x4b, 0x0f,
+ 0xe7, 0x51, 0x84, 0x91, 0x35, 0xaf, 0x8f, 0x1a, 0x50, 0x7b, 0x74, 0x71, 0xc4, 0xe4, 0x6e, 0x98,
+ 0x79, 0x47, 0x97, 0xc8, 0x1e, 0x5d, 0xe1, 0x0c, 0x2f, 0xb5, 0x93, 0xe8, 0xa9, 0x54, 0x36, 0x7f,
+ 0x5e, 0x95, 0xba, 0x19, 0x01, 0xf1, 0x1d, 0x40, 0x1f, 0xc2, 0x5e, 0xb0, 0xa1, 0x73, 0x5b, 0x46,
+ 0xb5, 0x12, 0x6f, 0x4a, 0xea, 0xe6, 0xef, 0x80, 0xd4, 0x78, 0x53, 0xe9, 0xcb, 0x7b, 0xbb, 0x75,
+ 0x8a, 0x47, 0x06, 0x5f, 0x7f, 0xef, 0x32, 0x4e, 0x04, 0x18, 0x14, 0x4c, 0xce, 0xdb, 0x11, 0x19,
+ 0xd4, 0xdd, 0xc2, 0xc6, 0x9c, 0xb3, 0xc8, 0x0b, 0x60, 0x48, 0xd3, 0x80, 0x2d, 0x22, 0xb3, 0x0a,
+ 0x1b, 0x25, 0x34, 0x3f, 0x31, 0x85, 0xe2, 0x81, 0x1b, 0x43, 0x8d, 0x8e, 0x5b, 0x9c, 0xa3, 0x01,
+ 0x4b, 0x96, 0x4e, 0x53, 0x70, 0xa7, 0x36, 0x57, 0xeb, 0x24, 0x5f, 0x2b, 0xf5, 0xe7, 0x65, 0x54,
+ 0xb8, 0x60, 0xe2, 0x50, 0x93, 0xd3, 0x81, 0x9e, 0x1b, 0x97, 0x0a, 0x1b, 0x6f, 0x06, 0x7a, 0x63,
+ 0x39, 0xf5, 0x16, 0x2d, 0x1d, 0xb2, 0xb7, 0xd1, 0x0b, 0x3c, 0x2f, 0x52, 0xe9, 0xa7, 0x26, 0x46,
+ 0xde, 0xaa, 0x56, 0x1b, 0x4e, 0x6a, 0x10, 0x2d, 0x79, 0x41, 0xef, 0xa7, 0x46, 0x13, 0xff, 0xf6,
+ 0x6b, 0x35, 0xd4, 0xd3, 0x22, 0x71, 0x34, 0xb6, 0xf4, 0x9d, 0x2e, 0x26, 0x4e, 0x93, 0xa4, 0xe6,
+ 0x16, 0xe9, 0x62, 0xd2, 0x7a, 0xca, 0xd0, 0x0b, 0x2c, 0x12, 0x24, 0xc9, 0x96, 0x69, 0x75, 0x4d,
+ 0x48, 0x66, 0x08, 0x26, 0xed, 0x98, 0xdb, 0xe6, 0x78, 0x0c, 0xc9, 0x54, 0x05, 0x89, 0xd4, 0xed,
+ 0xd6, 0xa8, 0x43, 0x86, 0x90, 0x4a, 0x15, 0xa4, 0x9b, 0x40, 0x77, 0x76, 0xb6, 0xcd, 0x76, 0x0b,
+ 0xd2, 0xc7, 0xa0, 0x6b, 0x6a, 0xa1, 0x7d, 0x4b, 0x7a, 0x8d, 0xb6, 0x7f, 0x13, 0xa7, 0x1d, 0xa1,
+ 0xc3, 0x2b, 0xdb, 0x13, 0xc7, 0x76, 0x89, 0x19, 0xd4, 0x60, 0x38, 0x5b, 0x36, 0xf5, 0x40, 0x3c,
+ 0x69, 0xe8, 0x81, 0x98, 0xcd, 0x54, 0xe9, 0xa7, 0xf1, 0x78, 0x48, 0x5a, 0x2d, 0x49, 0xff, 0x07,
+ 0x3c, 0x0f, 0xbb, 0xfa, 0xb8, 0xdb, 0x94, 0x20, 0xe4, 0xfc, 0x87, 0x52, 0xe8, 0xb6, 0xde, 0xc2,
+ 0xbf, 0xb9, 0x6e, 0x33, 0xe8, 0xed, 0x46, 0xb6, 0xe3, 0x2c, 0x6d, 0xad, 0xe3, 0x5d, 0x4a, 0x8c,
+ 0x7c, 0xaf, 0x5f, 0xd0, 0x3f, 0x6b, 0xbd, 0xee, 0x92, 0xe1, 0x76, 0xa1, 0x77, 0x7a, 0xd2, 0x3b,
+ 0x54, 0x5d, 0x0f, 0xb3, 0x68, 0x4c, 0x89, 0x99, 0x20, 0x1a, 0x4c, 0x86, 0x15, 0xf4, 0x0c, 0xa5,
+ 0x46, 0x57, 0x57, 0x25, 0x5d, 0xc9, 0xe0, 0x5b, 0x92, 0x95, 0x43, 0xbc, 0x24, 0x3f, 0xd7, 0x89,
+ 0x92, 0xfc, 0x52, 0xbc, 0xb9, 0x22, 0x7d, 0x2c, 0x4f, 0x76, 0xb6, 0x76, 0x9a, 0x3b, 0x6d, 0xc6,
+ 0x93, 0xf6, 0x56, 0xbb, 0xd3, 0x2e, 0xe7, 0xc9, 0x78, 0x38, 0x6e, 0x8f, 0xdb, 0x39, 0x9e, 0x34,
+ 0x1b, 0xed, 0xed, 0xe6, 0x30, 0xcb, 0x91, 0x24, 0x25, 0xcf, 0x91, 0x24, 0x39, 0xcf, 0x94, 0x24,
+ 0x39, 0xdf, 0x8d, 0x6c, 0x42, 0x2d, 0xec, 0x6d, 0x27, 0x1d, 0x03, 0x8d, 0xff, 0x2f, 0x3a, 0x64,
+ 0x52, 0xe6, 0xac, 0x0d, 0x17, 0x21, 0x40, 0x99, 0x2e, 0x34, 0x9a, 0xad, 0x2c, 0xb2, 0x3a, 0xfd,
+ 0x93, 0xeb, 0x51, 0xd7, 0xea, 0x6e, 0x77, 0x4d, 0x3a, 0x1a, 0xf2, 0xa8, 0x8a, 0x0c, 0x41, 0x31,
+ 0xb0, 0x67, 0x0f, 0x93, 0xac, 0xbb, 0xd3, 0xb5, 0xb6, 0x2c, 0x5e, 0x04, 0x6d, 0x5a, 0xae, 0x88,
+ 0xde, 0x69, 0xed, 0x74, 0xf7, 0x0b, 0x45, 0x0e, 0xb7, 0x5e, 0x34, 0x5e, 0x1c, 0x3e, 0x7e, 0x84,
+ 0xe6, 0xb1, 0x14, 0xa0, 0xbc, 0x49, 0x34, 0x8e, 0x05, 0x92, 0x8c, 0x4c, 0xab, 0x5d, 0x68, 0x92,
+ 0x6c, 0x75, 0xda, 0xdb, 0xfa, 0x5a, 0x5d, 0x2c, 0x59, 0x28, 0x24, 0xb4, 0x9a, 0x79, 0xec, 0x19,
+ 0xe5, 0xb2, 0x82, 0xdc, 0x1c, 0x5a, 0x0d, 0xca, 0xfb, 0x49, 0x6d, 0x1e, 0x38, 0x3d, 0xf8, 0x5f,
+ 0xd9, 0xa4, 0x2b, 0x85, 0xb8, 0xd6, 0x69, 0x33, 0x3b, 0x56, 0xf7, 0x46, 0x11, 0x01, 0xee, 0x45,
+ 0xe0, 0xdd, 0xcd, 0xc4, 0xc2, 0xe1, 0x66, 0x32, 0xe4, 0xc6, 0xe6, 0xcc, 0x76, 0x96, 0xbd, 0xcd,
+ 0x93, 0x80, 0x80, 0x23, 0x88, 0xae, 0x42, 0x24, 0x35, 0x4f, 0x36, 0xd5, 0xd1, 0x1c, 0x5c, 0xd3,
+ 0x6b, 0xc2, 0xb1, 0x41, 0xf3, 0x9c, 0x47, 0xa6, 0xd1, 0x6a, 0x75, 0xb7, 0x4a, 0x15, 0xc8, 0xdf,
+ 0x80, 0xcc, 0x81, 0x37, 0xb3, 0x47, 0xd2, 0x31, 0x99, 0x93, 0x14, 0x11, 0xb4, 0x44, 0xd4, 0x00,
+ 0xe5, 0x56, 0x6c, 0xe8, 0x7a, 0x05, 0x35, 0xbb, 0xc2, 0xf5, 0xa3, 0xce, 0xf3, 0xd8, 0xe6, 0xa9,
+ 0x12, 0xce, 0x85, 0xbb, 0xe6, 0xb5, 0xf6, 0x2d, 0xa4, 0x19, 0x80, 0x10, 0xcf, 0x68, 0xea, 0xcd,
+ 0x76, 0xa3, 0xa1, 0x77, 0x68, 0x32, 0x98, 0x79, 0x8f, 0x25, 0xb3, 0xf9, 0xc0, 0x7a, 0x7d, 0x62,
+ 0x47, 0xd3, 0xf9, 0x10, 0x7d, 0xe4, 0x3a, 0x59, 0x78, 0x0b, 0xbb, 0x2e, 0xea, 0x57, 0xa5, 0x70,
+ 0x3e, 0x9c, 0xd9, 0x91, 0xc4, 0x7c, 0xd7, 0x50, 0x02, 0x0d, 0x84, 0x4e, 0xaa, 0x44, 0xdb, 0x34,
+ 0x43, 0xe9, 0xe4, 0x94, 0xa6, 0xe5, 0x4b, 0xd1, 0x56, 0x06, 0x74, 0x41, 0x38, 0x7c, 0x4c, 0x2b,
+ 0x75, 0x1c, 0x8a, 0x76, 0x14, 0xd6, 0x11, 0x7f, 0x5a, 0xf8, 0xc0, 0xf3, 0x97, 0x01, 0x5d, 0xd9,
+ 0xf8, 0x5f, 0xff, 0x9d, 0x22, 0x2f, 0xbd, 0xa4, 0x85, 0x93, 0x8e, 0x83, 0xab, 0x8f, 0x45, 0x24,
+ 0xde, 0xca, 0xbf, 0x52, 0x14, 0xb2, 0x51, 0xff, 0xe5, 0x97, 0x0d, 0xe9, 0x17, 0x8c, 0x43, 0x28,
+ 0xc3, 0xa4, 0x8c, 0xc8, 0xb0, 0xb5, 0x11, 0xcc, 0x3d, 0x09, 0xec, 0x6b, 0x64, 0x9f, 0x4f, 0x83,
+ 0xc3, 0x50, 0x32, 0x03, 0x78, 0x06, 0x27, 0xcd, 0xbe, 0x21, 0x96, 0xb4, 0x00, 0x62, 0x48, 0xa6,
+ 0xb4, 0xf9, 0xd3, 0xa6, 0x14, 0x22, 0x43, 0xc8, 0x12, 0x92, 0x1c, 0x07, 0xf1, 0x98, 0x41, 0x84,
+ 0x3f, 0x03, 0xe5, 0x65, 0xe1, 0x3a, 0x16, 0xe4, 0x48, 0x43, 0x88, 0x10, 0x21, 0xd4, 0x80, 0x3a,
+ 0xeb, 0x3c, 0x00, 0xe2, 0x4b, 0x2a, 0xd2, 0x6a, 0x63, 0x43, 0x92, 0xb2, 0x71, 0x10, 0xa4, 0xa0,
+ 0x54, 0xa0, 0x5f, 0x85, 0xc1, 0x90, 0x64, 0x48, 0xd9, 0xf5, 0xa7, 0x0d, 0x9a, 0x89, 0x2f, 0xcc,
+ 0x21, 0x7b, 0x6b, 0x43, 0xcf, 0xab, 0x86, 0x24, 0x5b, 0xb5, 0xb1, 0x43, 0x6e, 0x24, 0xfc, 0xc0,
+ 0xc1, 0x31, 0x9f, 0xb9, 0x72, 0x16, 0x38, 0x09, 0xa8, 0x10, 0xf8, 0x72, 0xf7, 0x49, 0xad, 0x26,
+ 0x0d, 0x00, 0xa1, 0x88, 0xf6, 0xc9, 0x94, 0x42, 0xdc, 0x18, 0x60, 0x46, 0x14, 0xd7, 0xc8, 0xf3,
+ 0x25, 0x73, 0xe8, 0x5d, 0x13, 0xfa, 0x46, 0x89, 0x03, 0xe2, 0x6c, 0x4f, 0x98, 0x8f, 0x0a, 0xc5,
+ 0x1c, 0x6f, 0x41, 0xb3, 0xa6, 0x84, 0x0a, 0x07, 0x4a, 0xde, 0x8d, 0x8f, 0x93, 0x7a, 0xd7, 0x50,
+ 0x21, 0xd0, 0x10, 0x82, 0x55, 0x4c, 0x1c, 0x83, 0x64, 0x98, 0xee, 0x52, 0x6c, 0x46, 0x90, 0x36,
+ 0x98, 0xb8, 0x4b, 0xc0, 0xd5, 0x70, 0x1a, 0xe0, 0xa6, 0x03, 0x1b, 0x67, 0x3f, 0x09, 0xd0, 0x14,
+ 0x64, 0x19, 0x02, 0xe9, 0x29, 0x06, 0xc1, 0x50, 0x30, 0x9c, 0x42, 0x03, 0xd0, 0x2a, 0xb6, 0x61,
+ 0x66, 0x90, 0xac, 0xd5, 0xf6, 0xa0, 0x8e, 0x5d, 0xcb, 0xbe, 0xa6, 0x1e, 0x36, 0xcb, 0x4a, 0x56,
+ 0xb2, 0x98, 0x5a, 0x20, 0xb8, 0xfe, 0x20, 0x81, 0x42, 0x60, 0xf3, 0x7b, 0x7b, 0xb4, 0x51, 0xda,
+ 0xdd, 0x13, 0xf4, 0xaa, 0xd3, 0x3a, 0x25, 0x84, 0xc7, 0x56, 0x4c, 0xc9, 0x37, 0x2d, 0x0b, 0x58,
+ 0x85, 0xf5, 0x52, 0x46, 0x02, 0x1d, 0x16, 0x10, 0xc5, 0x4b, 0x76, 0xb4, 0x49, 0xf1, 0x42, 0x96,
+ 0x87, 0xd8, 0x83, 0xb4, 0x30, 0xc5, 0x47, 0x70, 0x7b, 0x6a, 0x43, 0x79, 0x97, 0x61, 0xc7, 0x1b,
+ 0xa3, 0x48, 0x72, 0xc4, 0x7c, 0xb3, 0xd6, 0x92, 0x32, 0xd8, 0xc9, 0x7b, 0xa1, 0x37, 0xcb, 0x62,
+ 0xb1, 0x5b, 0x07, 0xe8, 0x3d, 0xde, 0x3b, 0xfa, 0x0c, 0x0f, 0x1b, 0xbc, 0xa6, 0x77, 0x79, 0xfa,
+ 0x4b, 0x43, 0x33, 0x90, 0x40, 0xc4, 0x01, 0x6d, 0x26, 0x85, 0x9c, 0x09, 0x48, 0x7e, 0x40, 0x1e,
+ 0x48, 0x0e, 0xb4, 0x34, 0x9d, 0x85, 0xb9, 0x0c, 0xa5, 0x6b, 0x3b, 0xb4, 0x87, 0xa0, 0x21, 0x0a,
+ 0x74, 0x43, 0x8e, 0xd6, 0xa0, 0xc6, 0x84, 0x72, 0x5c, 0x74, 0x4c, 0x30, 0xaf, 0x2e, 0x55, 0x94,
+ 0xd1, 0x68, 0xca, 0x04, 0x89, 0xf1, 0xa9, 0xa6, 0x63, 0xc8, 0x41, 0xf1, 0xca, 0x61, 0x45, 0x89,
+ 0x80, 0xdc, 0x85, 0x97, 0x90, 0x12, 0xc7, 0x87, 0x11, 0x9a, 0xf0, 0x1b, 0x51, 0x02, 0x0d, 0xe5,
+ 0x00, 0x22, 0xa4, 0x20, 0x16, 0x94, 0x90, 0xd7, 0xa6, 0xed, 0xe0, 0x4e, 0x18, 0x69, 0x18, 0x78,
+ 0xe1, 0x02, 0xb8, 0x46, 0x0d, 0x90, 0x26, 0xbd, 0x07, 0x31, 0x1a, 0xa3, 0x8c, 0x41, 0x4f, 0x20,
+ 0x40, 0x49, 0xe4, 0x06, 0xca, 0x32, 0x4a, 0x63, 0x47, 0xcd, 0x44, 0xd8, 0x24, 0xd0, 0xcd, 0x10,
+ 0xc7, 0x23, 0x5d, 0x5c, 0x72, 0x8d, 0xd5, 0x80, 0xf8, 0x84, 0x2a, 0x74, 0x07, 0xea, 0xa0, 0x12,
+ 0x05, 0x8d, 0x8d, 0xc1, 0xa4, 0x40, 0x16, 0xba, 0x6e, 0x84, 0x13, 0x8e, 0x4b, 0x3b, 0x73, 0xe5,
+ 0xca, 0x68, 0x94, 0xd0, 0x87, 0x92, 0x62, 0x12, 0x78, 0x8b, 0x5a, 0x43, 0xf2, 0x38, 0x72, 0x35,
+ 0x86, 0x4a, 0x56, 0xc0, 0x28, 0x4d, 0x92, 0xce, 0x23, 0x6d, 0x18, 0x9f, 0x42, 0x02, 0x89, 0xe0,
+ 0x4c, 0x2c, 0x61, 0x94, 0x59, 0x24, 0xcb, 0x4b, 0xa4, 0x90, 0xc9, 0xe9, 0x38, 0x86, 0x61, 0x41,
+ 0xc9, 0x32, 0x8a, 0xc0, 0xf6, 0x30, 0x4a, 0x26, 0x22, 0x95, 0x63, 0x1d, 0x6f, 0xa2, 0xc8, 0xbe,
+ 0x69, 0x0d, 0x3c, 0x4f, 0x8e, 0x4f, 0xa6, 0x08, 0x6b, 0x3d, 0xc7, 0xef, 0x1c, 0x6b, 0xd3, 0x1e,
+ 0x2d, 0x6b, 0xe6, 0x3c, 0xf2, 0xd2, 0x1a, 0x84, 0x24, 0xe6, 0xaa, 0x43, 0xbc, 0x4a, 0x09, 0x93,
+ 0xad, 0xb4, 0xb1, 0x56, 0xa9, 0x44, 0x0d, 0x29, 0x04, 0xc0, 0xe0, 0x32, 0xd6, 0x86, 0xd0, 0xdf,
+ 0xab, 0x9e, 0x44, 0xbf, 0x6a, 0x98, 0x22, 0xef, 0x6d, 0xac, 0x37, 0x9a, 0x4a, 0x1c, 0xa7, 0xef,
+ 0x39, 0x9a, 0x3c, 0x94, 0x6e, 0x17, 0xf4, 0x8d, 0x39, 0xf3, 0x41, 0x72, 0xbc, 0x31, 0x1d, 0xbe,
+ 0x13, 0xc2, 0x46, 0xad, 0x68, 0x95, 0x5a, 0x43, 0x26, 0x16, 0x19, 0x9d, 0xa4, 0xa2, 0xbe, 0x59,
+ 0x7a, 0x73, 0x10, 0x13, 0x60, 0x3f, 0x2d, 0x90, 0x1d, 0xb3, 0x8f, 0xa0, 0x34, 0x25, 0xf1, 0xdd,
+ 0x04, 0x9b, 0x36, 0x44, 0x37, 0xd9, 0xa0, 0xec, 0x75, 0xc8, 0x4c, 0xde, 0x7b, 0x45, 0x20, 0x6e,
+ 0x00, 0x31, 0x7c, 0xef, 0x12, 0xba, 0x39, 0xe0, 0x71, 0xd0, 0xe7, 0x0b, 0xef, 0x7b, 0xa0, 0xa7,
+ 0x01, 0xf9, 0x9e, 0xda, 0x5f, 0x78, 0xf3, 0xe0, 0x7b, 0xc0, 0x41, 0x22, 0x53, 0xf0, 0x0c, 0x8f,
+ 0x90, 0x7e, 0xdf, 0xc3, 0x20, 0xa6, 0x0e, 0x50, 0xcc, 0x81, 0xac, 0x76, 0xc0, 0x75, 0xc5, 0x4d,
+ 0xa2, 0x4f, 0xc1, 0xca, 0xce, 0x23, 0xce, 0x39, 0x68, 0xf8, 0x6f, 0xe7, 0x18, 0x1f, 0xb4, 0xa2,
+ 0xaf, 0x43, 0x73, 0x74, 0x35, 0xa1, 0xeb, 0xc0, 0xdc, 0x9f, 0x94, 0x26, 0x01, 0x59, 0xca, 0x69,
+ 0xdf, 0x38, 0x75, 0xa8, 0xf9, 0x00, 0xc4, 0x4c, 0x2a, 0xe5, 0x12, 0x61, 0x33, 0x22, 0x68, 0x3c,
+ 0xa8, 0xf5, 0xa2, 0x8e, 0x00, 0xd3, 0xed, 0x80, 0xe6, 0x08, 0x97, 0x08, 0x02, 0xd0, 0x52, 0xc2,
+ 0x92, 0x51, 0xbc, 0x99, 0x62, 0x8e, 0xcc, 0x2b, 0xa4, 0xe7, 0xdc, 0x67, 0x4a, 0x69, 0x0e, 0xf2,
+ 0x49, 0xf7, 0xf9, 0x51, 0x4d, 0xc0, 0x35, 0x79, 0xbe, 0xdd, 0xec, 0xf8, 0x2b, 0x19, 0xef, 0x5c,
+ 0x69, 0x73, 0xb3, 0xf7, 0x0d, 0xdc, 0x20, 0x7b, 0xbc, 0x4c, 0xec, 0x8c, 0xd0, 0x9c, 0xc8, 0xdf,
+ 0xbd, 0x73, 0x02, 0x9e, 0xc2, 0x01, 0x57, 0x4f, 0x2f, 0xb0, 0xe9, 0x8f, 0xb4, 0xe9, 0xaa, 0xf4,
+ 0x8a, 0xb0, 0xe9, 0xbd, 0x8c, 0x3c, 0x24, 0x2c, 0x5e, 0x67, 0xf6, 0x9a, 0x85, 0x7a, 0xc1, 0x74,
+ 0x6b, 0xd6, 0x85, 0xe0, 0x4a, 0x95, 0x7b, 0x48, 0x39, 0x43, 0x55, 0x50, 0xb4, 0x4c, 0x31, 0xdf,
+ 0xa1, 0x9a, 0xb2, 0x26, 0x9d, 0x3e, 0x47, 0xc1, 0xdc, 0x1d, 0x51, 0x87, 0x0c, 0x6c, 0xaa, 0xbc,
+ 0xf7, 0x74, 0x04, 0x1e, 0x6a, 0x5f, 0xa2, 0xb3, 0x74, 0xbc, 0x86, 0x4d, 0x4c, 0xda, 0xdc, 0xe3,
+ 0xf3, 0x75, 0xb9, 0x3d, 0x44, 0xff, 0xfb, 0xbf, 0xfd, 0x4f, 0xa9, 0x46, 0x7d, 0x57, 0x48, 0x51,
+ 0x53, 0x27, 0x16, 0x69, 0x9f, 0x6e, 0xe2, 0x01, 0x2e, 0x71, 0xb7, 0xd2, 0x92, 0x40, 0x30, 0xa0,
+ 0x65, 0xe6, 0x7e, 0xf2, 0x6e, 0x5f, 0x32, 0x79, 0x07, 0x47, 0xf5, 0xc2, 0xa7, 0x9e, 0x3d, 0x76,
+ 0x77, 0x94, 0x38, 0xca, 0xe0, 0x2d, 0x40, 0x61, 0xe1, 0xbc, 0xb0, 0xce, 0xd1, 0x02, 0xc9, 0xb4,
+ 0xda, 0x1f, 0x73, 0x12, 0x2c, 0xcf, 0x68, 0x14, 0xe6, 0x05, 0x95, 0xcd, 0x9f, 0xb8, 0x65, 0xd2,
+ 0x28, 0xde, 0x7c, 0xe2, 0xfb, 0x1c, 0x87, 0x84, 0x21, 0xe1, 0x1a, 0xda, 0x73, 0x68, 0xa3, 0xa2,
+ 0xe0, 0x94, 0x1a, 0xb2, 0xec, 0x37, 0x62, 0x06, 0x15, 0x05, 0x2a, 0x8c, 0x01, 0x03, 0xf0, 0x5a,
+ 0xf6, 0xc1, 0xb5, 0xdb, 0x40, 0x8c, 0xa8, 0x37, 0x2b, 0x81, 0xc7, 0x7a, 0x46, 0xa2, 0xac, 0x19,
+ 0x61, 0x9e, 0x2f, 0xcb, 0xfa, 0xa7, 0x6f, 0x06, 0xe6, 0x4c, 0x5a, 0xb1, 0x15, 0x93, 0x58, 0xac,
+ 0x1d, 0x83, 0x23, 0x98, 0x05, 0xab, 0xc3, 0x27, 0x5a, 0x5d, 0x56, 0x01, 0xa3, 0x1d, 0x5d, 0x19,
+ 0x9d, 0x25, 0x8f, 0xc2, 0x45, 0x85, 0xc1, 0x59, 0x79, 0x92, 0x4d, 0x66, 0xeb, 0x38, 0x8c, 0x42,
+ 0x74, 0x16, 0xfd, 0xa7, 0x62, 0x2d, 0xd0, 0xab, 0xb4, 0x00, 0x03, 0x2c, 0x9d, 0x90, 0xdc, 0xcc,
+ 0x16, 0x3c, 0xb2, 0x36, 0xd5, 0x4c, 0x31, 0xcd, 0xb6, 0x84, 0x1f, 0x9c, 0x67, 0x43, 0xc1, 0x55,
+ 0xbd, 0x87, 0xee, 0xe0, 0xc3, 0x02, 0xe9, 0x85, 0x23, 0x24, 0x69, 0x00, 0x31, 0xaf, 0xd9, 0xd0,
+ 0x30, 0x70, 0x00, 0x0c, 0xf1, 0xa1, 0x39, 0x9a, 0x56, 0x30, 0x0d, 0x71, 0x91, 0x8c, 0x3d, 0xde,
+ 0x5f, 0xd6, 0x63, 0x91, 0x4e, 0x37, 0x05, 0x00, 0xbe, 0x74, 0x75, 0x5f, 0x32, 0x8c, 0x3b, 0x7a,
+ 0xcc, 0x16, 0xff, 0x93, 0x1a, 0x20, 0x3c, 0x14, 0xe5, 0x13, 0xff, 0x1d, 0xd7, 0xe6, 0x2b, 0x9b,
+ 0x2c, 0x32, 0x27, 0xd6, 0xa6, 0xc2, 0x41, 0x63, 0x89, 0x2e, 0xd3, 0xdf, 0x5b, 0x32, 0x20, 0x33,
+ 0x50, 0x6e, 0x65, 0x85, 0xe9, 0x77, 0xac, 0x94, 0xd1, 0x29, 0x75, 0x48, 0xbe, 0x83, 0x58, 0xa9,
+ 0x1f, 0xf1, 0x17, 0xc9, 0x65, 0x5b, 0xf7, 0x10, 0x0b, 0x58, 0xfb, 0xff, 0x14, 0xa9, 0xb2, 0x0e,
+ 0x6d, 0x22, 0xf3, 0x0c, 0xf7, 0x34, 0x66, 0x7b, 0x31, 0x77, 0x53, 0xac, 0x31, 0x58, 0xdb, 0xc4,
+ 0x62, 0x9b, 0x99, 0x55, 0x2c, 0x10, 0x7b, 0x9e, 0x7d, 0x59, 0xa2, 0xc9, 0x33, 0x31, 0x9b, 0x54,
+ 0x6e, 0xb0, 0x32, 0x9a, 0x3c, 0x53, 0xbc, 0xe0, 0xa2, 0x27, 0x30, 0xcc, 0x9e, 0x8b, 0xb0, 0x08,
+ 0xa7, 0x2b, 0xe4, 0xbd, 0x9f, 0x57, 0x77, 0x52, 0x3c, 0xce, 0x6a, 0xfe, 0x82, 0xdf, 0x97, 0xd1,
+ 0xd4, 0xac, 0x8c, 0x96, 0xf3, 0x8c, 0xd7, 0x5c, 0xa1, 0xbc, 0xd3, 0x48, 0x5f, 0x2e, 0xf9, 0x5b,
+ 0x09, 0xd5, 0x2a, 0xe5, 0x38, 0xa9, 0x2c, 0xe2, 0xcd, 0x36, 0xa8, 0x30, 0x66, 0xc5, 0x9c, 0x45,
+ 0x96, 0xe7, 0x82, 0x8a, 0x1b, 0xa3, 0xe2, 0x4c, 0x69, 0x0c, 0xce, 0x36, 0x58, 0x59, 0x74, 0x15,
+ 0x42, 0x16, 0x67, 0xb8, 0x16, 0xe5, 0xa1, 0xeb, 0x59, 0x24, 0xd4, 0xa4, 0x68, 0x68, 0xf5, 0xa4,
+ 0x5c, 0xf3, 0x12, 0x08, 0x13, 0x05, 0xb5, 0xc0, 0x56, 0x59, 0xe0, 0x8e, 0x8c, 0x22, 0x67, 0x59,
+ 0xe0, 0x32, 0x48, 0xec, 0x73, 0x32, 0x36, 0xe7, 0x4e, 0xf4, 0x01, 0x57, 0x28, 0xc2, 0x1c, 0xaf,
+ 0xef, 0x04, 0xb9, 0xa3, 0x63, 0x69, 0x27, 0x50, 0x7f, 0x3f, 0xa4, 0x65, 0x1f, 0xd6, 0xeb, 0x6c,
+ 0x22, 0x08, 0x03, 0x9a, 0x00, 0x6c, 0x3b, 0xd2, 0x84, 0x1b, 0x1e, 0x9e, 0xed, 0xe0, 0xe4, 0xc0,
+ 0x62, 0x8a, 0x7b, 0x6e, 0xa8, 0x92, 0x9a, 0xe1, 0x4a, 0x34, 0x09, 0xf3, 0xe6, 0x80, 0xed, 0x3e,
+ 0x10, 0xe6, 0x00, 0xb7, 0x81, 0x49, 0x35, 0x36, 0x2d, 0xc2, 0xdb, 0x80, 0x14, 0x56, 0x02, 0x00,
+ 0x27, 0x13, 0xea, 0xe3, 0x0c, 0x97, 0x74, 0x84, 0x89, 0x85, 0xad, 0x3b, 0x0d, 0x07, 0xd6, 0x56,
+ 0x49, 0x2b, 0x16, 0x94, 0xa3, 0xd4, 0x29, 0x31, 0x0d, 0x25, 0x3b, 0xef, 0xd8, 0xae, 0x4f, 0xe4,
+ 0x65, 0x86, 0x34, 0xa8, 0x63, 0x66, 0x79, 0x0d, 0x8b, 0x3a, 0x25, 0xd3, 0x50, 0xc6, 0x04, 0xcd,
+ 0xe9, 0x68, 0x3e, 0x13, 0x3a, 0xef, 0x1d, 0xe0, 0x5d, 0x01, 0xfb, 0x81, 0x7c, 0x78, 0x34, 0x81,
+ 0xf9, 0x5b, 0xe8, 0x93, 0x91, 0x3d, 0xb6, 0xd3, 0x69, 0x1d, 0xdb, 0x2a, 0xa7, 0x25, 0xe8, 0xb8,
+ 0x1c, 0x0d, 0x05, 0xdc, 0xf7, 0x53, 0x10, 0x06, 0x42, 0xaa, 0x13, 0xff, 0x66, 0xba, 0x31, 0x4d,
+ 0x0c, 0xd5, 0x27, 0xc4, 0xa8, 0x4b, 0x2f, 0x39, 0x19, 0xe6, 0xae, 0x0d, 0x46, 0x80, 0x49, 0x50,
+ 0xba, 0xcf, 0x0c, 0x29, 0x8d, 0xe2, 0xc3, 0x89, 0x8a, 0x11, 0x2f, 0xa3, 0x27, 0x47, 0x90, 0x6d,
+ 0xf3, 0x61, 0x65, 0xe9, 0x66, 0xd5, 0x7b, 0x90, 0xa3, 0x05, 0x00, 0x43, 0x07, 0x46, 0x71, 0x25,
+ 0x83, 0x24, 0x38, 0xfd, 0xe0, 0x76, 0xdd, 0x08, 0x8b, 0x1f, 0x2a, 0x59, 0x8b, 0xc2, 0xf7, 0x91,
+ 0x64, 0xb7, 0x35, 0x1d, 0x21, 0x74, 0x85, 0xda, 0x9d, 0x99, 0x10, 0x05, 0xa3, 0x28, 0x1e, 0x0a,
+ 0x4d, 0xa4, 0x15, 0x0b, 0x6d, 0x4f, 0x9b, 0x9f, 0x99, 0xfe, 0xfd, 0x72, 0x95, 0x5a, 0x05, 0xb4,
+ 0x72, 0x59, 0x3a, 0x48, 0x43, 0x10, 0xa9, 0x19, 0x9e, 0xab, 0xa1, 0x33, 0x66, 0x0e, 0xb9, 0x26,
+ 0x0e, 0xe5, 0x69, 0x86, 0x12, 0x74, 0x9b, 0x9e, 0x91, 0x25, 0x08, 0xef, 0x07, 0x6d, 0x98, 0x21,
+ 0xbb, 0x97, 0x31, 0x5b, 0xac, 0x94, 0xb0, 0x50, 0x50, 0xf2, 0x11, 0xbe, 0x85, 0xf4, 0x4c, 0x4a,
+ 0x6d, 0x9a, 0xd4, 0x93, 0x36, 0x37, 0x93, 0xea, 0x38, 0xb5, 0x98, 0xcd, 0x49, 0x16, 0xa1, 0xb3,
+ 0x0c, 0xe1, 0xdb, 0xb6, 0x8b, 0x63, 0x96, 0x6d, 0x1e, 0xcb, 0x3a, 0x38, 0x89, 0xca, 0x4f, 0x6c,
+ 0x3f, 0x47, 0x93, 0xce, 0xe0, 0xfc, 0xbc, 0x12, 0x18, 0xc4, 0xe8, 0x9a, 0xb7, 0x65, 0x09, 0xcb,
+ 0xd6, 0xd8, 0x3a, 0x39, 0x98, 0x1e, 0xf8, 0x8e, 0xa9, 0x0d, 0xc2, 0x87, 0xbc, 0x59, 0x88, 0x85,
+ 0x19, 0xd6, 0xbe, 0x79, 0xb6, 0x5b, 0xd9, 0xe4, 0x66, 0x99, 0x9a, 0x51, 0xe1, 0xa0, 0x15, 0x4c,
+ 0x29, 0x52, 0x35, 0x23, 0xb2, 0x0f, 0x78, 0x36, 0x82, 0x27, 0xe5, 0x8a, 0x20, 0x27, 0xb8, 0x5c,
+ 0xac, 0xee, 0x1f, 0x51, 0x54, 0x5e, 0x1f, 0xd4, 0x45, 0xf7, 0x39, 0x83, 0x1b, 0xeb, 0x12, 0xc2,
+ 0x1b, 0xb9, 0x4b, 0x28, 0x85, 0x84, 0xac, 0xc9, 0xc7, 0xda, 0x68, 0xbe, 0xd3, 0xca, 0xdf, 0x29,
+ 0x26, 0x3f, 0x24, 0x24, 0x47, 0x56, 0x5e, 0x44, 0x6c, 0xeb, 0xf1, 0x02, 0x52, 0x12, 0xc9, 0x31,
+ 0x71, 0x41, 0x2f, 0xe3, 0xe7, 0x55, 0xae, 0x4b, 0x54, 0x6a, 0x66, 0x05, 0x6f, 0x25, 0x15, 0x1f,
+ 0x31, 0x8c, 0xd7, 0x45, 0x27, 0x75, 0x57, 0xef, 0x13, 0x1e, 0xa1, 0xfc, 0x33, 0x22, 0x74, 0x71,
+ 0x94, 0xe8, 0xe2, 0x7a, 0x9d, 0x89, 0xcc, 0xc5, 0x11, 0x46, 0x85, 0x33, 0xd3, 0x12, 0x3e, 0x87,
+ 0x09, 0xc1, 0xb3, 0x90, 0x95, 0xa9, 0x79, 0x8d, 0xaa, 0x80, 0xf0, 0xcd, 0x66, 0x04, 0x22, 0x4b,
+ 0x1a, 0xf4, 0x7b, 0xe0, 0x5d, 0x98, 0x7e, 0xc4, 0x1e, 0x2c, 0x6a, 0x9c, 0x59, 0x91, 0x67, 0x50,
+ 0xb3, 0xa8, 0x37, 0xa7, 0xf6, 0x72, 0xbe, 0x89, 0x2a, 0xdd, 0xe1, 0x79, 0x70, 0x75, 0x24, 0x76,
+ 0x93, 0x85, 0x12, 0xce, 0x6d, 0xe1, 0x6a, 0x04, 0xce, 0x58, 0x33, 0x22, 0xe3, 0x14, 0x83, 0x99,
+ 0x89, 0xe9, 0xca, 0x5c, 0x2f, 0x94, 0xf1, 0xec, 0xfb, 0xc6, 0xbd, 0xfe, 0x0c, 0x40, 0x97, 0xa4,
+ 0x6e, 0xac, 0x59, 0xd9, 0xd4, 0x20, 0xf4, 0x1f, 0x63, 0x81, 0x93, 0x85, 0x8e, 0xbc, 0x68, 0x41,
+ 0x6b, 0xa5, 0xfb, 0x49, 0x8a, 0x41, 0x21, 0x6f, 0x84, 0x46, 0x19, 0xc5, 0x71, 0x90, 0x07, 0x2d,
+ 0xb8, 0x6c, 0xf7, 0x46, 0xa5, 0xdc, 0x33, 0x4b, 0x4c, 0x35, 0xf7, 0xd9, 0x84, 0x19, 0x38, 0xca,
+ 0xad, 0x59, 0x14, 0xdc, 0x05, 0x2c, 0x68, 0x47, 0x6b, 0x6e, 0x59, 0x82, 0x66, 0xb1, 0x9f, 0x10,
+ 0xe3, 0xe3, 0x44, 0xcc, 0xd3, 0xa7, 0x77, 0x86, 0xcb, 0x06, 0x0c, 0x54, 0xcc, 0xbf, 0x53, 0x21,
+ 0xb1, 0x8d, 0xa0, 0x0f, 0x77, 0xf0, 0xae, 0x0a, 0xbe, 0xe8, 0x5f, 0x53, 0xaf, 0x34, 0xef, 0x11,
+ 0x01, 0xf9, 0xf9, 0xfc, 0xc6, 0x3c, 0x08, 0x20, 0x00, 0x72, 0x96, 0x25, 0xd3, 0x0a, 0x38, 0x50,
+ 0xca, 0xc2, 0x7c, 0xd0, 0x2f, 0x74, 0x08, 0x85, 0x58, 0x4b, 0xc8, 0xe7, 0xbb, 0xf8, 0xb6, 0x4c,
+ 0xba, 0x62, 0x44, 0x77, 0x64, 0x52, 0xef, 0xdb, 0x0e, 0x7d, 0xc7, 0x5c, 0x66, 0x86, 0x08, 0x56,
+ 0x59, 0x94, 0x56, 0xba, 0xad, 0x1f, 0x33, 0xca, 0xc5, 0x93, 0x65, 0xc7, 0xeb, 0x7b, 0x87, 0x70,
+ 0xf5, 0x4b, 0xc5, 0x41, 0xbf, 0xe2, 0x33, 0x9b, 0xb8, 0x3f, 0xa3, 0x3f, 0x33, 0x83, 0x89, 0xed,
+ 0xf6, 0xf4, 0x3e, 0xae, 0xfd, 0xc0, 0x78, 0xe9, 0xe9, 0x31, 0x02, 0xae, 0xd2, 0x19, 0x41, 0xb6,
+ 0xfa, 0x9d, 0x59, 0x66, 0xce, 0x2e, 0x17, 0x87, 0xa6, 0x1b, 0xd6, 0x42, 0x12, 0xd8, 0xe3, 0x58,
+ 0x1b, 0x4e, 0x6a, 0xe1, 0x7c, 0x34, 0x22, 0x61, 0xb8, 0x5a, 0x9b, 0x4f, 0xfc, 0xa9, 0x3d, 0x32,
+ 0xc7, 0x1d, 0x9d, 0x02, 0xd9, 0xee, 0xd8, 0x2b, 0x81, 0x68, 0x36, 0x76, 0xba, 0xe3, 0x16, 0x85,
+ 0x58, 0x98, 0x81, 0x5b, 0x02, 0x31, 0x1e, 0x8f, 0x1a, 0xfa, 0x16, 0x85, 0xa0, 0x8b, 0x5a, 0xa5,
+ 0x20, 0x9d, 0x66, 0xa7, 0x19, 0x27, 0x33, 0x1a, 0x25, 0x20, 0xad, 0x56, 0x2b, 0xe6, 0x93, 0x4d,
+ 0xa5, 0xb9, 0xed, 0x58, 0xb3, 0x6a, 0x43, 0x18, 0x77, 0x57, 0x2b, 0xce, 0x90, 0x1e, 0x7d, 0xc3,
+ 0x64, 0x0c, 0x34, 0x93, 0x54, 0x7c, 0xc1, 0x44, 0x17, 0xf8, 0x95, 0x24, 0xe2, 0x4b, 0xac, 0x65,
+ 0x02, 0xd9, 0x15, 0x7d, 0x66, 0x41, 0x15, 0xb0, 0xbc, 0xc7, 0x52, 0x39, 0x08, 0x5b, 0x32, 0x58,
+ 0x25, 0xcf, 0xbd, 0x06, 0xcf, 0x10, 0xc1, 0xec, 0x2a, 0xf3, 0x06, 0xac, 0xc9, 0x65, 0x36, 0x72,
+ 0x99, 0x50, 0xb2, 0x10, 0x2c, 0xaf, 0xc4, 0x7b, 0x8f, 0xbd, 0x67, 0x00, 0x58, 0x94, 0xba, 0x4a,
+ 0xdf, 0x7b, 0xf8, 0x1e, 0x6b, 0x0b, 0x0c, 0xba, 0x57, 0x74, 0x26, 0x96, 0x8a, 0x47, 0xac, 0xd1,
+ 0x30, 0x3c, 0x2b, 0x31, 0x31, 0x98, 0x41, 0xc0, 0x4b, 0xc8, 0x0d, 0x7d, 0x6d, 0x8a, 0x57, 0xdc,
+ 0x65, 0xa3, 0xcd, 0x96, 0x49, 0x42, 0x0d, 0x1c, 0x42, 0x4c, 0xe4, 0x62, 0x56, 0x63, 0xd3, 0xa1,
+ 0x1c, 0x2c, 0x60, 0x48, 0xf0, 0x2c, 0x3a, 0x6d, 0xc8, 0xd1, 0xf0, 0xb1, 0x4a, 0x21, 0x90, 0x14,
+ 0x18, 0x8d, 0x63, 0x92, 0xd2, 0x68, 0xf2, 0xa4, 0x76, 0x9a, 0xd4, 0xa5, 0x49, 0xcb, 0x14, 0x8a,
+ 0x36, 0x8d, 0x90, 0x42, 0xb2, 0x45, 0xe3, 0xac, 0x74, 0x66, 0x46, 0x75, 0x45, 0x9f, 0xe9, 0xfc,
+ 0x71, 0x8f, 0xa5, 0xf0, 0x6c, 0x61, 0x9a, 0x8b, 0x84, 0xec, 0xd3, 0xdc, 0x24, 0x91, 0x38, 0x8e,
+ 0xed, 0x87, 0x76, 0xd8, 0x5f, 0x4c, 0xc1, 0xda, 0xd7, 0xe8, 0xe2, 0x1d, 0xc8, 0xc1, 0x22, 0x30,
+ 0xfd, 0x58, 0xcb, 0x4e, 0x4b, 0xaf, 0xd8, 0x0b, 0xba, 0x04, 0x61, 0xd2, 0x52, 0x6e, 0xb1, 0x31,
+ 0x07, 0xc1, 0xd3, 0x62, 0x4d, 0xcc, 0x66, 0x0f, 0x49, 0xb4, 0xc0, 0x2d, 0x59, 0xc9, 0xec, 0x36,
+ 0x9b, 0x8e, 0xe9, 0xd1, 0x16, 0x45, 0x6e, 0x0a, 0xce, 0x1b, 0x2d, 0x42, 0x8b, 0x86, 0x53, 0xa7,
+ 0x64, 0x85, 0xfb, 0x3c, 0x40, 0xf8, 0x7d, 0x70, 0x1e, 0x0a, 0x59, 0xbd, 0x29, 0x76, 0x73, 0x7d,
+ 0x9c, 0x04, 0x93, 0xa1, 0x49, 0xb7, 0x91, 0x89, 0xff, 0x5a, 0x53, 0x89, 0x35, 0x3c, 0x36, 0x9f,
+ 0x8c, 0x04, 0xdb, 0xc5, 0xfd, 0x62, 0x6c, 0x24, 0xf5, 0x99, 0x48, 0xb5, 0x90, 0x1d, 0x5c, 0x96,
+ 0xe8, 0x73, 0xa6, 0xde, 0x80, 0xf8, 0xa0, 0xe7, 0x80, 0x6e, 0xfc, 0x29, 0x9b, 0xe7, 0x7b, 0xa1,
+ 0xcd, 0x06, 0x0f, 0xc7, 0x1d, 0x1b, 0xaa, 0xa1, 0x7f, 0x95, 0xc5, 0x8c, 0x1e, 0xd1, 0xcf, 0xec,
+ 0x7d, 0x61, 0x47, 0xf6, 0xc3, 0xeb, 0x49, 0xf5, 0x66, 0xe6, 0xf4, 0xc5, 0x75, 0x05, 0x17, 0xe7,
+ 0x2f, 0x6a, 0xdb, 0xea, 0x2e, 0x24, 0x4b, 0x90, 0xec, 0xe2, 0xd2, 0x48, 0x14, 0xf9, 0xbd, 0x7a,
+ 0x7d, 0xb1, 0x58, 0x68, 0x8b, 0x96, 0xe6, 0x05, 0x93, 0x7a, 0x13, 0x34, 0x1e, 0x16, 0x94, 0xd9,
+ 0xa2, 0x84, 0x21, 0xb7, 0x74, 0x99, 0x4f, 0xdb, 0xb3, 0x67, 0x76, 0x08, 0xeb, 0xc6, 0x90, 0x75,
+ 0x49, 0x97, 0x5a, 0xf8, 0x4f, 0xde, 0xdb, 0xf5, 0xcd, 0x68, 0x2a, 0xe1, 0xfc, 0x50, 0x47, 0xda,
+ 0xd2, 0x3a, 0xd3, 0xa6, 0x0e, 0x0f, 0x0d, 0xfe, 0xdd, 0x6c, 0xd2, 0x14, 0x5c, 0x70, 0x09, 0xbc,
+ 0x2b, 0x5c, 0xff, 0x43, 0x59, 0x11, 0xaf, 0x35, 0xde, 0x4c, 0x3b, 0x49, 0x40, 0xd2, 0x8d, 0x4c,
+ 0xdf, 0x90, 0x69, 0xd7, 0xe4, 0x3a, 0xce, 0xe3, 0x5f, 0x4f, 0xf6, 0x36, 0x95, 0x8c, 0x6a, 0x13,
+ 0x0b, 0x54, 0x2d, 0x20, 0x64, 0x66, 0x97, 0xd8, 0xb6, 0x78, 0x5d, 0xb0, 0xfc, 0x2d, 0x5d, 0x8f,
+ 0xcb, 0x66, 0x78, 0x35, 0xe1, 0x88, 0xae, 0x86, 0x1e, 0x6a, 0x11, 0xd3, 0x02, 0x59, 0xb6, 0x5d,
+ 0xb4, 0xdc, 0xba, 0x54, 0xeb, 0xf8, 0x37, 0xf0, 0xf5, 0x53, 0x77, 0x7b, 0x1c, 0x67, 0x66, 0x3c,
+ 0x85, 0x6a, 0xe8, 0x80, 0xe1, 0x80, 0x0a, 0xc5, 0x9b, 0x4e, 0x47, 0xf8, 0x0d, 0x7f, 0x07, 0xea,
+ 0x21, 0x6b, 0x8b, 0x95, 0xd6, 0x1a, 0xb4, 0x4a, 0x1d, 0xf7, 0x6f, 0x8e, 0xdb, 0x71, 0xf9, 0x3c,
+ 0x6a, 0x06, 0xa9, 0x35, 0xd5, 0x0c, 0xb8, 0xb4, 0x4b, 0xaa, 0xed, 0x88, 0x6a, 0x29, 0xae, 0x74,
+ 0x9e, 0x72, 0xda, 0x60, 0x87, 0xa9, 0x13, 0x2d, 0xd5, 0xbf, 0xb3, 0x36, 0xba, 0x71, 0x4f, 0x68,
+ 0x06, 0xa8, 0x29, 0xf4, 0x1c, 0xf0, 0x9b, 0x28, 0x8a, 0xfd, 0x9c, 0xbe, 0x59, 0xdf, 0x03, 0xf5,
+ 0x2f, 0x75, 0xd6, 0x80, 0xc6, 0x4b, 0xfc, 0xe4, 0xec, 0xd1, 0x7b, 0x43, 0x57, 0xf9, 0xf3, 0x29,
+ 0x31, 0xad, 0xf7, 0xae, 0xb3, 0x34, 0x1a, 0x69, 0x4a, 0x88, 0x07, 0x91, 0x2d, 0xa3, 0x29, 0x52,
+ 0xce, 0x7c, 0xdb, 0x68, 0x89, 0x97, 0x23, 0xf7, 0x1a, 0x94, 0x94, 0x65, 0x24, 0x47, 0x98, 0xfa,
+ 0x7c, 0x1b, 0x0f, 0x6b, 0x74, 0x45, 0x7d, 0x29, 0x3c, 0xd5, 0x9b, 0xd9, 0xca, 0x43, 0x54, 0x53,
+ 0x59, 0x99, 0x69, 0xf4, 0x61, 0x5c, 0xa6, 0x8b, 0x95, 0xda, 0xcf, 0x2b, 0xc2, 0xe2, 0x1b, 0x1e,
+ 0xcf, 0xa8, 0x25, 0x0e, 0x5a, 0x44, 0xc2, 0xa8, 0x22, 0xe3, 0xa7, 0xac, 0xa8, 0x44, 0x73, 0xd7,
+ 0x0f, 0x3b, 0x9b, 0x0f, 0x1d, 0x76, 0x36, 0x0b, 0x87, 0x9d, 0x4d, 0x7a, 0xd8, 0x59, 0x73, 0xd7,
+ 0x4e, 0x7e, 0x99, 0x4a, 0xf6, 0xf0, 0x36, 0x9d, 0x80, 0x9d, 0x69, 0x78, 0xfa, 0xc7, 0xb6, 0x14,
+ 0x25, 0xce, 0xbf, 0xe7, 0xcf, 0xc0, 0xfb, 0x01, 0xd9, 0x93, 0xab, 0xc5, 0x83, 0x6e, 0x2a, 0x3d,
+ 0x5e, 0xd9, 0x54, 0xaa, 0xf2, 0x6e, 0x9d, 0x42, 0xc4, 0x45, 0xc7, 0x0d, 0xf7, 0xa9, 0xc7, 0xb4,
+ 0x8b, 0xf8, 0x90, 0x9e, 0x4f, 0x84, 0x37, 0xa2, 0xb1, 0xa9, 0x03, 0x7e, 0xbe, 0x12, 0x4f, 0x18,
+ 0x61, 0xc2, 0xb3, 0xe4, 0x96, 0x80, 0x5e, 0x72, 0xe2, 0x32, 0xc9, 0x93, 0x2f, 0x20, 0x45, 0xee,
+ 0xc9, 0x67, 0xcb, 0x10, 0x46, 0x94, 0x9c, 0x1c, 0xea, 0x07, 0x1f, 0xd9, 0x9f, 0x87, 0x53, 0x3c,
+ 0xf1, 0x5a, 0x12, 0xd4, 0x26, 0x91, 0x18, 0x3f, 0x9e, 0x9f, 0xd2, 0x80, 0xbd, 0x17, 0x91, 0x56,
+ 0xe2, 0x85, 0xe9, 0x5c, 0x9d, 0x4f, 0x61, 0x50, 0x4d, 0xd8, 0x31, 0x76, 0xe4, 0x82, 0x38, 0x4e,
+ 0xc4, 0x89, 0x6c, 0xd3, 0x75, 0xef, 0x67, 0xa6, 0xe6, 0xf6, 0x52, 0x2c, 0xc4, 0xb9, 0x58, 0x52,
+ 0x31, 0x55, 0x9b, 0x1f, 0x5f, 0x16, 0xc7, 0xa2, 0xf0, 0xcd, 0xd6, 0x5c, 0x3c, 0x5b, 0xc7, 0xe2,
+ 0xea, 0x92, 0x46, 0x6c, 0x45, 0x8d, 0x94, 0xa4, 0x44, 0x1c, 0xe7, 0x4f, 0x62, 0xaf, 0xca, 0x8b,
+ 0x15, 0x64, 0x05, 0xcf, 0xee, 0x96, 0x71, 0xbe, 0x70, 0xaa, 0x3b, 0xc6, 0x33, 0x54, 0xfc, 0xc4,
+ 0x60, 0x56, 0xc6, 0x1e, 0x6a, 0xc3, 0xc6, 0x13, 0x75, 0xf4, 0x80, 0xac, 0x8f, 0x07, 0x58, 0xf1,
+ 0x18, 0x2f, 0x3d, 0xc9, 0x6a, 0xa6, 0x68, 0xf3, 0x9a, 0x4f, 0x4c, 0x0c, 0x28, 0x7e, 0xb4, 0x7e,
+ 0xfb, 0xe9, 0x53, 0x5b, 0x2b, 0x6f, 0xc1, 0xc6, 0x16, 0x0a, 0xe7, 0x85, 0x4d, 0x46, 0x7a, 0xbb,
+ 0x6f, 0xf3, 0x73, 0xfa, 0x61, 0x13, 0xc4, 0xa6, 0xe4, 0xac, 0x38, 0x3d, 0x7f, 0xfc, 0x4c, 0x06,
+ 0xfd, 0xe2, 0x3b, 0x04, 0x44, 0x89, 0x01, 0xb7, 0xee, 0x05, 0xa6, 0xc7, 0x58, 0x7a, 0xf2, 0x24,
+ 0xc0, 0xe3, 0x37, 0xfc, 0xbc, 0x1e, 0x0d, 0x59, 0x0f, 0xd8, 0xd6, 0x86, 0x8a, 0xdc, 0xc4, 0xb3,
+ 0x61, 0x8e, 0x71, 0xcf, 0xd9, 0xf4, 0x5d, 0xa3, 0xad, 0x3f, 0x6b, 0xf6, 0xda, 0x6a, 0x70, 0x1f,
+ 0x54, 0xdd, 0x51, 0x5d, 0x76, 0x74, 0x1d, 0x8c, 0x10, 0x0c, 0x73, 0x6a, 0x76, 0x20, 0x91, 0x68,
+ 0xcc, 0x24, 0xd6, 0x2b, 0x41, 0xb5, 0xa9, 0xe0, 0xd1, 0xcf, 0x86, 0xfe, 0x8b, 0xab, 0x5a, 0x46,
+ 0x00, 0x9f, 0x1e, 0x2b, 0x01, 0x1e, 0x1b, 0xc8, 0xa6, 0x28, 0x54, 0x0b, 0x95, 0x7a, 0x53, 0x51,
+ 0xa7, 0x78, 0x6b, 0x07, 0x1e, 0xec, 0x20, 0x66, 0x70, 0x8a, 0x47, 0xf1, 0x74, 0x55, 0x57, 0x39,
+ 0x48, 0x52, 0x2b, 0x80, 0x69, 0x37, 0x86, 0x07, 0x9f, 0x4b, 0xc3, 0x55, 0x23, 0x6d, 0x48, 0xc0,
+ 0xb4, 0x9c, 0x40, 0x9d, 0x78, 0x71, 0x05, 0x4e, 0x87, 0x41, 0x98, 0x8e, 0x9b, 0x29, 0x6c, 0xfe,
+ 0x46, 0x2b, 0x82, 0x22, 0x58, 0x40, 0x0d, 0x55, 0x2b, 0x0f, 0x45, 0x0f, 0x09, 0xe1, 0x99, 0x1f,
+ 0x59, 0x6d, 0x1a, 0x86, 0xf3, 0x2c, 0x5f, 0xa6, 0xda, 0xd0, 0x3a, 0x80, 0xb3, 0xae, 0x6e, 0xc1,
+ 0x67, 0xeb, 0x17, 0x57, 0xe9, 0x15, 0xf2, 0x9b, 0x3c, 0xbf, 0xc3, 0xf3, 0xf3, 0x75, 0xe3, 0xde,
+ 0xfd, 0xfb, 0xea, 0x05, 0x8c, 0xaa, 0x50, 0x8a, 0xd6, 0xbe, 0x75, 0x67, 0xed, 0x02, 0xaa, 0xc3,
+ 0xfe, 0x2b, 0xeb, 0x7d, 0x06, 0x16, 0x19, 0xb4, 0xc6, 0xaa, 0x8c, 0xa6, 0x13, 0xc3, 0x40, 0x39,
+ 0x8f, 0xc9, 0xd0, 0x01, 0xc3, 0x8b, 0x69, 0x28, 0x01, 0x03, 0x74, 0x6e, 0x0d, 0x99, 0x6f, 0xca,
+ 0xe0, 0x80, 0xb8, 0xc4, 0x5f, 0xb9, 0x4b, 0xaa, 0x90, 0xe4, 0x55, 0x81, 0x4b, 0x17, 0x71, 0xc0,
+ 0x4e, 0xa1, 0x76, 0x28, 0x6d, 0x24, 0xd7, 0x89, 0x2e, 0x2f, 0xd6, 0x68, 0xc2, 0x43, 0x93, 0xf7,
+ 0x61, 0x8d, 0x50, 0x64, 0xb9, 0x56, 0xb0, 0x45, 0x7b, 0x0f, 0x9e, 0x09, 0x52, 0x96, 0x52, 0x97,
+ 0x4a, 0xf3, 0xc8, 0xd0, 0x0b, 0x37, 0x55, 0x38, 0xf4, 0x62, 0x8a, 0x44, 0xd7, 0x41, 0x9a, 0xbd,
+ 0x1b, 0xf4, 0x6d, 0x48, 0xa3, 0xc3, 0x2c, 0x40, 0x2b, 0x18, 0x2e, 0x6c, 0x3c, 0xf4, 0x58, 0xd2,
+ 0xc1, 0xe4, 0x1a, 0x8b, 0xd1, 0x57, 0x65, 0x35, 0xc2, 0xfd, 0x17, 0x7a, 0x0f, 0x8a, 0x6c, 0x6d,
+ 0xab, 0x8d, 0xad, 0x96, 0xda, 0xd1, 0xbf, 0xf6, 0xe9, 0xbe, 0xb0, 0x3e, 0xcd, 0x6a, 0x60, 0x56,
+ 0xb3, 0x01, 0x79, 0xad, 0x1d, 0xb5, 0xbd, 0x93, 0xcb, 0x6b, 0x62, 0x5e, 0xa3, 0xd3, 0x85, 0x32,
+ 0x6a, 0xb3, 0xdd, 0x15, 0x79, 0x16, 0xd3, 0xd6, 0x34, 0x73, 0xa7, 0xa9, 0xb6, 0xb7, 0xd5, 0xd6,
+ 0xf6, 0xd7, 0x38, 0xdb, 0xfd, 0x4b, 0xea, 0xc5, 0xff, 0xbc, 0x0a, 0xbe, 0xe8, 0x5f, 0x63, 0x15,
+ 0xbf, 0x1b, 0xfc, 0xbb, 0x49, 0xbf, 0xcd, 0x2f, 0xa3, 0x6a, 0xe7, 0x6b, 0xac, 0x5c, 0x52, 0x99,
+ 0xaf, 0xd8, 0x55, 0xad, 0xa3, 0x00, 0xaf, 0x8b, 0xc2, 0x8f, 0xc3, 0x42, 0xa7, 0x2a, 0x08, 0x99,
+ 0xf3, 0xe7, 0x9f, 0x64, 0xd7, 0x68, 0x3c, 0x7d, 0xda, 0x46, 0xe9, 0xab, 0x10, 0x5e, 0xc6, 0xeb,
+ 0x35, 0xf3, 0xef, 0xd5, 0xed, 0x5f, 0xdc, 0x5e, 0xe6, 0x15, 0xb9, 0x15, 0x69, 0x66, 0x30, 0x4a,
+ 0x86, 0x8c, 0xd6, 0xa6, 0x12, 0xde, 0x64, 0xb7, 0x52, 0x9c, 0x1c, 0x09, 0xd6, 0x55, 0xee, 0x10,
+ 0xc4, 0xbf, 0x45, 0x0e, 0x55, 0xde, 0x7a, 0xd5, 0xad, 0xb7, 0xc1, 0x4c, 0x56, 0xab, 0x71, 0x9c,
+ 0x1e, 0xa2, 0x2d, 0x98, 0x0b, 0x3c, 0xbe, 0xca, 0xb8, 0xcb, 0x0c, 0x2f, 0xe3, 0x22, 0xdd, 0x7e,
+ 0x2b, 0xf7, 0xb8, 0x16, 0xa6, 0x77, 0xde, 0x40, 0x02, 0x28, 0x78, 0x1b, 0xe3, 0x29, 0x3c, 0xf7,
+ 0x4e, 0xa1, 0xdc, 0xf9, 0x6c, 0x88, 0x56, 0x3a, 0x03, 0x77, 0x4c, 0x93, 0xd6, 0x20, 0x93, 0x8b,
+ 0x69, 0xb2, 0xb0, 0x07, 0x3c, 0x71, 0x0d, 0x3a, 0xc0, 0x8d, 0xf1, 0x39, 0xd0, 0x53, 0x4c, 0x59,
+ 0x83, 0xe3, 0x67, 0xf6, 0xb2, 0x80, 0xfb, 0x34, 0x69, 0x0d, 0x92, 0x9f, 0x4c, 0xcb, 0x42, 0xb2,
+ 0x0d, 0x11, 0x6b, 0x90, 0x7e, 0xe0, 0x4d, 0xf0, 0x28, 0x43, 0x0e, 0xf6, 0x84, 0x27, 0xae, 0xf7,
+ 0xcb, 0x04, 0x4f, 0x32, 0x0f, 0x7b, 0x40, 0x93, 0xd6, 0x21, 0x41, 0x65, 0x5b, 0xad, 0xe7, 0x79,
+ 0x50, 0x96, 0xb6, 0x06, 0x4b, 0xa3, 0xd6, 0x3c, 0xf9, 0x31, 0x25, 0x0b, 0x97, 0x0c, 0x8c, 0x14,
+ 0x26, 0x93, 0x1d, 0xc7, 0xcc, 0x9f, 0x15, 0x49, 0xf4, 0x04, 0x61, 0x14, 0xcc, 0xe9, 0x2e, 0x25,
+ 0xc2, 0xdd, 0x8b, 0x6b, 0x9e, 0x69, 0x70, 0x67, 0x09, 0x57, 0xd6, 0xe9, 0xf5, 0x1d, 0xf4, 0x0d,
+ 0x6c, 0xbe, 0x6d, 0x55, 0xd0, 0xfc, 0xd2, 0x07, 0x92, 0xfa, 0xca, 0xe9, 0xa1, 0x78, 0x23, 0x4d,
+ 0x7c, 0x96, 0xab, 0x12, 0x4b, 0x57, 0x65, 0x70, 0x30, 0xf3, 0xa9, 0xb6, 0xd5, 0x7b, 0x1c, 0x58,
+ 0x55, 0xfe, 0x09, 0x9c, 0xd3, 0x98, 0xb9, 0x6f, 0xc7, 0x80, 0x17, 0x75, 0xcb, 0x32, 0x18, 0x08,
+ 0x0f, 0x20, 0x5f, 0x30, 0xf0, 0x9e, 0x5d, 0xb2, 0xed, 0x63, 0x6c, 0xf1, 0x21, 0xd3, 0x11, 0x53,
+ 0x89, 0x93, 0x35, 0x8d, 0x9f, 0xf3, 0xfd, 0xd7, 0xd2, 0x05, 0xad, 0x5c, 0x32, 0x3d, 0xc4, 0x18,
+ 0xf3, 0xbd, 0x67, 0x97, 0xbd, 0xcb, 0xcc, 0x3d, 0x4c, 0xeb, 0x55, 0x27, 0x8b, 0x63, 0x25, 0x35,
+ 0xdf, 0xdf, 0xae, 0x38, 0x71, 0x5a, 0xde, 0x7c, 0x7a, 0x3c, 0xf4, 0x52, 0xcd, 0x5d, 0x0b, 0x65,
+ 0xc7, 0xf9, 0xd8, 0x24, 0x4b, 0x1d, 0x92, 0x3f, 0x71, 0xcd, 0xc2, 0x14, 0xc9, 0x90, 0xd6, 0xf0,
+ 0xfe, 0xdd, 0x4a, 0x22, 0x96, 0x3e, 0x53, 0xff, 0x05, 0xfe, 0x9b, 0xe0, 0xf1, 0xff, 0xce, 0xef,
+ 0xe7, 0x91, 0xcf, 0x9f, 0xe3, 0x91, 0x4f, 0x2a, 0x27, 0xe8, 0xb7, 0x83, 0x05, 0xb3, 0xf3, 0x0d,
+ 0xb1, 0xa3, 0xdc, 0x3f, 0xaf, 0xc4, 0x8d, 0x08, 0x45, 0xb6, 0x2a, 0xb1, 0x38, 0xee, 0x7d, 0xa9,
+ 0x64, 0x1d, 0x74, 0xca, 0x61, 0x1b, 0x3c, 0x3b, 0xb5, 0x84, 0x04, 0xd0, 0x4c, 0xee, 0xfc, 0x2b,
+ 0x56, 0xce, 0x68, 0xc6, 0xa3, 0x02, 0x81, 0x69, 0x59, 0x61, 0x05, 0x08, 0x53, 0x14, 0x52, 0x7e,
+ 0x25, 0x06, 0x8d, 0x00, 0x2a, 0x65, 0x65, 0x7a, 0x8f, 0x02, 0xfb, 0x62, 0x7e, 0x05, 0x8c, 0x8b,
+ 0xad, 0x82, 0xd7, 0xcf, 0x87, 0xef, 0x13, 0x63, 0x9d, 0xdb, 0xe0, 0xef, 0x96, 0xb1, 0x66, 0x5d,
+ 0xa0, 0x7e, 0x4f, 0x77, 0xe5, 0xb8, 0x00, 0x93, 0x72, 0x29, 0x31, 0xde, 0xc9, 0x65, 0x33, 0x69,
+ 0xd3, 0x6b, 0xb1, 0x00, 0x59, 0x8b, 0x02, 0x8b, 0xac, 0x75, 0xc1, 0x99, 0x85, 0xe6, 0xf0, 0x32,
+ 0x9c, 0x2c, 0xa1, 0xc4, 0x41, 0x60, 0xf0, 0x28, 0xf1, 0x16, 0xa9, 0x8b, 0x23, 0xe3, 0x4b, 0x56,
+ 0x29, 0x7c, 0xcd, 0xc6, 0x5e, 0xf9, 0xfb, 0x56, 0x92, 0x0b, 0x50, 0x18, 0xdd, 0xca, 0x86, 0xed,
+ 0xba, 0x8c, 0x81, 0x78, 0xe1, 0x95, 0x10, 0x67, 0x27, 0x83, 0x63, 0xf0, 0xce, 0xed, 0x44, 0xc2,
+ 0x9e, 0xb1, 0x0b, 0x23, 0x32, 0x34, 0xcb, 0xcb, 0x9c, 0x01, 0xbc, 0x12, 0x20, 0x42, 0x56, 0xec,
+ 0xe4, 0xf0, 0xb1, 0x22, 0x50, 0x39, 0x60, 0xa7, 0x12, 0xf9, 0x05, 0x1d, 0x84, 0xa1, 0x61, 0x1a,
+ 0x89, 0xd2, 0xc3, 0x4b, 0x85, 0x20, 0x1f, 0xa5, 0xb0, 0xb0, 0xa1, 0x53, 0xe6, 0x07, 0x1a, 0x61,
+ 0x00, 0x98, 0x7f, 0xfe, 0x09, 0x24, 0xc2, 0x9b, 0x46, 0xca, 0xca, 0xa9, 0x29, 0x24, 0x10, 0x34,
+ 0xdd, 0xf7, 0x69, 0x90, 0xb2, 0x1b, 0x61, 0x92, 0x1a, 0x04, 0x2a, 0x05, 0xbe, 0x95, 0x4c, 0x1e,
+ 0xe4, 0xc3, 0xac, 0x35, 0x2d, 0xaa, 0xae, 0x0d, 0x35, 0x3a, 0x64, 0x61, 0xc8, 0xe0, 0x70, 0xfb,
+ 0x9e, 0x1e, 0xd3, 0x02, 0xd8, 0xdf, 0x67, 0xb9, 0x6e, 0xb0, 0x8a, 0x7a, 0xa5, 0x35, 0x64, 0xa7,
+ 0x44, 0x84, 0x0a, 0xe0, 0x05, 0xd2, 0x01, 0x5f, 0xbd, 0xbf, 0x28, 0x4a, 0x20, 0x63, 0xa5, 0x18,
+ 0x85, 0xf5, 0xfa, 0x13, 0x43, 0xd2, 0x71, 0x49, 0x89, 0x5f, 0xd5, 0x23, 0xe9, 0x1b, 0x00, 0x54,
+ 0xb8, 0x56, 0x84, 0x03, 0xe3, 0xcc, 0x4c, 0x5e, 0xf0, 0x78, 0x46, 0x3a, 0x55, 0x02, 0x9e, 0xad,
+ 0xb9, 0xcb, 0x93, 0xc5, 0x85, 0x2b, 0x26, 0xde, 0xc9, 0xb6, 0x36, 0xd8, 0x73, 0x03, 0x9c, 0xdd,
+ 0xae, 0x74, 0x27, 0x10, 0x5e, 0x5a, 0xc7, 0x59, 0x5f, 0x54, 0x54, 0x1c, 0x5c, 0xe2, 0xd9, 0x78,
+ 0x26, 0x24, 0xa7, 0xb1, 0x70, 0x12, 0x88, 0xe7, 0x29, 0x6a, 0xa2, 0x34, 0xcc, 0xbc, 0xc6, 0xe0,
+ 0x77, 0x67, 0x15, 0x25, 0x39, 0x29, 0x88, 0x95, 0xe0, 0xc1, 0xc1, 0x3c, 0x1c, 0x5e, 0x69, 0x52,
+ 0x61, 0x19, 0x4a, 0x3a, 0xb7, 0xc0, 0x10, 0x17, 0xe6, 0x5b, 0x96, 0xab, 0xb9, 0x9b, 0xd3, 0x3a,
+ 0x85, 0x9b, 0xd3, 0xf2, 0x53, 0x12, 0x60, 0xa0, 0x64, 0x21, 0x46, 0xb2, 0xac, 0xda, 0x78, 0x8b,
+ 0x8d, 0x90, 0xe4, 0x42, 0xfd, 0xc0, 0x0b, 0x23, 0xe9, 0xce, 0xdf, 0x21, 0xca, 0x6c, 0x46, 0xe8,
+ 0x12, 0xec, 0x4a, 0x2c, 0xc9, 0x4c, 0xf3, 0xf7, 0xb8, 0xc2, 0x2c, 0x34, 0x1d, 0x83, 0x99, 0xce,
+ 0x81, 0x7d, 0xb9, 0x03, 0x4e, 0x95, 0xbe, 0x37, 0xe3, 0xeb, 0x25, 0x76, 0x5a, 0x95, 0x63, 0x42,
+ 0x6f, 0xf1, 0x02, 0xea, 0xd9, 0x55, 0xc2, 0x92, 0xc4, 0x9d, 0x82, 0xbc, 0x69, 0xa1, 0x09, 0x7a,
+ 0xd2, 0x9a, 0x4d, 0x47, 0xcf, 0x46, 0x12, 0x74, 0xe7, 0x84, 0xd6, 0x22, 0xef, 0x8c, 0x4e, 0xb4,
+ 0x55, 0x5a, 0x5d, 0x45, 0x0b, 0x71, 0x7e, 0xb4, 0xd2, 0x04, 0x97, 0xe2, 0xb2, 0x9f, 0x53, 0xb2,
+ 0xa9, 0x0e, 0xc9, 0xdc, 0x83, 0x76, 0xb9, 0xca, 0x5b, 0x0e, 0x28, 0xd6, 0x5b, 0x41, 0xcc, 0x13,
+ 0x43, 0x2f, 0x08, 0x7e, 0x44, 0xe0, 0xfa, 0x5f, 0x2a, 0x89, 0x3f, 0x98, 0xf5, 0xe2, 0x25, 0x78,
+ 0x26, 0xae, 0x95, 0x71, 0x12, 0xcb, 0xe5, 0xe4, 0x12, 0x9a, 0x78, 0x1c, 0xc2, 0xa2, 0x95, 0x7c,
+ 0x0c, 0xb0, 0xde, 0xce, 0xff, 0x77, 0xeb, 0x20, 0x7b, 0x66, 0xbb, 0xeb, 0x99, 0x90, 0x88, 0x59,
+ 0xe6, 0x4d, 0x49, 0x96, 0x79, 0x13, 0xcb, 0xf7, 0x78, 0x83, 0x3f, 0x38, 0xc8, 0x39, 0xcb, 0x8a,
+ 0xa1, 0xd8, 0xf7, 0x30, 0xad, 0xe0, 0x6d, 0xde, 0x47, 0xce, 0xea, 0x5f, 0x20, 0x68, 0xd2, 0xf5,
+ 0xec, 0x01, 0x11, 0x16, 0x58, 0xce, 0xe8, 0x5d, 0x35, 0x82, 0xa5, 0x3f, 0xec, 0x81, 0x70, 0xfb,
+ 0xb3, 0xa6, 0xc7, 0xaf, 0x9b, 0x45, 0x4f, 0x13, 0xfc, 0x4a, 0x5b, 0x5c, 0xac, 0x09, 0xe1, 0x13,
+ 0xba, 0x24, 0x16, 0x81, 0x38, 0x1c, 0xf8, 0x07, 0x44, 0x32, 0x6a, 0x0d, 0x43, 0x04, 0x55, 0x19,
+ 0x21, 0xa6, 0xce, 0x89, 0x65, 0x87, 0xf8, 0x6a, 0xe1, 0x35, 0x80, 0xca, 0xdd, 0x4c, 0xcb, 0xdf,
+ 0x9f, 0xb9, 0xab, 0xb5, 0x5a, 0xcf, 0x6a, 0x8d, 0x5e, 0x21, 0xb1, 0xdb, 0x7d, 0xa6, 0xf7, 0x1a,
+ 0x09, 0x0f, 0x73, 0x31, 0xf2, 0x7f, 0x10, 0x03, 0xef, 0x65, 0x1f, 0x15, 0x69, 0x9d, 0xcb, 0x2f,
+ 0xc8, 0xda, 0xf7, 0x31, 0xb4, 0xd4, 0x0d, 0x0e, 0xae, 0x1f, 0x1a, 0xc0, 0xf7, 0x72, 0x3b, 0x9c,
+ 0xfb, 0xa9, 0xf2, 0x4c, 0x20, 0x94, 0x7b, 0x62, 0x1d, 0x68, 0xb0, 0x20, 0x0b, 0x76, 0xd6, 0x0d,
+ 0x52, 0xfe, 0xe2, 0x38, 0xcb, 0x4f, 0x4f, 0xfc, 0xdf, 0x60, 0xd2, 0x23, 0x95, 0xd6, 0xdd, 0x21,
+ 0x5c, 0x46, 0x07, 0xdd, 0x41, 0x0c, 0xba, 0x7d, 0x47, 0xf4, 0x38, 0x3f, 0xcd, 0xf2, 0x3d, 0x3d,
+ 0x5e, 0x33, 0x02, 0x05, 0x12, 0xfc, 0x47, 0x59, 0x84, 0x62, 0x33, 0xec, 0x46, 0xb2, 0x1f, 0x68,
+ 0xe8, 0xe1, 0xc8, 0x9e, 0x5f, 0x4c, 0xf5, 0xa3, 0x2a, 0x6b, 0x5c, 0xb1, 0x85, 0x4f, 0x66, 0xe3,
+ 0x22, 0xc5, 0x20, 0x62, 0x3f, 0x05, 0x40, 0x2a, 0x32, 0xbb, 0x03, 0x2b, 0x64, 0x91, 0xbb, 0xa9,
+ 0xd0, 0xf8, 0xce, 0x14, 0x57, 0x4a, 0x82, 0xcb, 0xb2, 0xa6, 0x9d, 0x68, 0x60, 0x62, 0x8a, 0x65,
+ 0xad, 0x74, 0x96, 0x98, 0x5e, 0x4c, 0x6a, 0x2a, 0x91, 0xb1, 0x36, 0x18, 0xf0, 0xb6, 0x68, 0x9c,
+ 0x5b, 0x4c, 0xae, 0xcc, 0xcc, 0x44, 0x66, 0xb9, 0x40, 0xd7, 0xe0, 0x57, 0x1f, 0x92, 0x4c, 0xb5,
+ 0x11, 0xab, 0xb6, 0x10, 0x0e, 0xe7, 0xee, 0xf4, 0x02, 0x17, 0x06, 0xaa, 0x47, 0x6e, 0xc5, 0xc9,
+ 0x9d, 0x5e, 0x97, 0x71, 0x3e, 0xc6, 0x8b, 0xef, 0x0d, 0xaf, 0x92, 0x61, 0xac, 0x71, 0x72, 0x28,
+ 0x77, 0x07, 0x10, 0x0f, 0xc6, 0x09, 0xf7, 0x9a, 0x0e, 0x1b, 0x97, 0x16, 0x4b, 0xc8, 0xaf, 0xa6,
+ 0x4d, 0x67, 0x02, 0x09, 0x1a, 0x05, 0x3d, 0x58, 0xa0, 0x9f, 0xd3, 0x5e, 0xbc, 0x7f, 0xdf, 0x65,
+ 0x32, 0xf4, 0x12, 0x8b, 0xd1, 0xe8, 0x35, 0x95, 0xe2, 0x6a, 0x23, 0x6b, 0x28, 0x97, 0xb8, 0x99,
+ 0x60, 0xd4, 0xfb, 0x22, 0x13, 0x1b, 0x31, 0x93, 0x6f, 0x17, 0x04, 0x2f, 0x30, 0xb3, 0x02, 0xf8,
+ 0xfa, 0xba, 0x99, 0xe8, 0xb4, 0xe2, 0xe4, 0xe8, 0x5f, 0xd0, 0x6a, 0x62, 0xf2, 0xf5, 0x1e, 0x17,
+ 0xe8, 0xfe, 0x81, 0x98, 0xcc, 0xde, 0xee, 0xe1, 0x3a, 0x35, 0x7b, 0xde, 0x4b, 0x1c, 0xd3, 0xfc,
+ 0xd4, 0xec, 0x5f, 0xc0, 0x93, 0x4d, 0xfb, 0xfe, 0x90, 0xf2, 0xd9, 0xad, 0xb3, 0xc2, 0x80, 0xd5,
+ 0xdd, 0x13, 0x78, 0xf9, 0x92, 0x2c, 0xbe, 0xab, 0xac, 0x27, 0x6a, 0x2e, 0x59, 0xa0, 0x23, 0xa1,
+ 0x32, 0x06, 0x16, 0x36, 0x2b, 0x3c, 0x46, 0x3b, 0xe7, 0xe6, 0x95, 0xbf, 0xdb, 0x53, 0x37, 0xd8,
+ 0xc5, 0xab, 0x3c, 0xd8, 0x63, 0x0a, 0x09, 0x17, 0x70, 0x73, 0x41, 0xae, 0x9d, 0xb9, 0x6b, 0x6e,
+ 0x9d, 0x22, 0x2a, 0x56, 0x61, 0x43, 0x15, 0xec, 0x46, 0x14, 0x75, 0x6d, 0x4a, 0x8b, 0x29, 0x0e,
+ 0x84, 0x12, 0x90, 0xf8, 0xfb, 0x2d, 0x78, 0x3f, 0x67, 0x14, 0xc8, 0x69, 0x78, 0x6f, 0x97, 0xce,
+ 0x87, 0x31, 0x65, 0x26, 0xb0, 0x9c, 0x02, 0x3c, 0x5d, 0x60, 0xb6, 0x93, 0x89, 0x67, 0x44, 0x57,
+ 0xcd, 0xde, 0x86, 0x67, 0x33, 0xac, 0xa2, 0x8c, 0xf6, 0x12, 0xa6, 0xd0, 0xa6, 0x47, 0x55, 0xa9,
+ 0x4e, 0x2c, 0x4e, 0xd8, 0xe0, 0x0e, 0x80, 0xf2, 0xd9, 0x4a, 0x7a, 0x7e, 0x9c, 0xd1, 0x3a, 0x3b,
+ 0x71, 0xe9, 0xa4, 0xbe, 0xa4, 0x9d, 0xcc, 0x54, 0x3e, 0xf9, 0xde, 0x99, 0x4a, 0x36, 0x43, 0xd1,
+ 0x73, 0x72, 0x3a, 0x62, 0x45, 0xb3, 0x7a, 0xbc, 0x5a, 0x5c, 0x40, 0xbf, 0x7f, 0x4e, 0x6e, 0x5d,
+ 0x25, 0x2a, 0xeb, 0xf3, 0x45, 0x85, 0x49, 0x22, 0xce, 0xad, 0x94, 0xfa, 0x60, 0x5b, 0xd6, 0x4e,
+ 0x99, 0x52, 0x06, 0x09, 0x0d, 0x6a, 0xa7, 0xb7, 0xdc, 0x26, 0x6b, 0x8b, 0x8c, 0xad, 0x66, 0x81,
+ 0x93, 0xe6, 0x23, 0x38, 0x89, 0x33, 0xd2, 0xf7, 0xee, 0x78, 0x89, 0x54, 0x5b, 0x85, 0x81, 0x01,
+ 0x5d, 0x2f, 0xea, 0xba, 0x44, 0x17, 0xe4, 0xd7, 0x5e, 0xfe, 0x82, 0x32, 0xf8, 0x61, 0x3f, 0x24,
+ 0x77, 0xff, 0x24, 0x5f, 0x4b, 0xcb, 0x3b, 0xd1, 0x78, 0x93, 0x72, 0x57, 0x96, 0xe8, 0x15, 0x92,
+ 0x53, 0xcf, 0xb1, 0x48, 0x60, 0xc8, 0x37, 0xb8, 0x91, 0xee, 0x87, 0x4a, 0x2e, 0x7f, 0xb8, 0xe4,
+ 0x2d, 0xdb, 0xbc, 0xf7, 0x37, 0x85, 0x57, 0x18, 0x3a, 0xc1, 0xa8, 0x40, 0xd2, 0x86, 0xf4, 0xd7,
+ 0x2e, 0x6e, 0xf2, 0x69, 0x5f, 0xf4, 0xaf, 0xd4, 0xc8, 0xe7, 0x52, 0x84, 0xc9, 0xd7, 0x6e, 0x70,
+ 0xca, 0x6b, 0x59, 0x28, 0xd1, 0x58, 0x2b, 0xd1, 0x48, 0x4b, 0x2c, 0xb1, 0xc4, 0x6d, 0xa1, 0x44,
+ 0x73, 0xad, 0x44, 0x33, 0x2d, 0x71, 0x7b, 0x67, 0x6c, 0x76, 0xb9, 0x02, 0x06, 0xf4, 0xc4, 0x8c,
+ 0x08, 0xfb, 0xcd, 0x86, 0xae, 0x5e, 0xf4, 0xf6, 0x55, 0x09, 0x88, 0xfd, 0x18, 0xa8, 0xdb, 0x87,
+ 0xa1, 0xe2, 0xcb, 0xd2, 0x5b, 0x34, 0xe9, 0x06, 0xf7, 0xec, 0x2e, 0xf6, 0x01, 0x08, 0x97, 0xa3,
+ 0xbe, 0x22, 0x0e, 0xbb, 0x9f, 0x47, 0x4d, 0x77, 0xb5, 0xf7, 0xcb, 0xf7, 0xc1, 0x83, 0x38, 0x56,
+ 0xb2, 0xf7, 0xaf, 0x29, 0x99, 0x0d, 0x98, 0x2c, 0x2f, 0x79, 0x57, 0xe2, 0x69, 0x43, 0x9d, 0x36,
+ 0x57, 0xd9, 0x82, 0x53, 0x51, 0x8a, 0xee, 0x90, 0x15, 0xfb, 0x38, 0xfd, 0x9b, 0xd8, 0xb2, 0xaf,
+ 0x57, 0xd9, 0xb4, 0x66, 0x4c, 0xa7, 0x80, 0xf3, 0x7b, 0xa4, 0xbb, 0xfe, 0x4d, 0x0e, 0x8d, 0xcc,
+ 0x7d, 0x82, 0x4a, 0xcc, 0x67, 0xd0, 0x58, 0xf7, 0x68, 0x7f, 0x7b, 0x76, 0x64, 0x3a, 0xf6, 0x48,
+ 0x6c, 0xc1, 0x76, 0xc8, 0x78, 0xbd, 0x8a, 0xdc, 0xe5, 0x83, 0x4a, 0x4c, 0x05, 0x3d, 0x7b, 0x04,
+ 0x00, 0xf7, 0x49, 0x3c, 0xa2, 0xeb, 0x74, 0xa3, 0x24, 0x73, 0xcc, 0xb3, 0xa5, 0x75, 0x49, 0x7f,
+ 0x6c, 0x61, 0xe6, 0x39, 0xad, 0xee, 0x82, 0xce, 0x54, 0xca, 0x32, 0xc5, 0xad, 0x78, 0x4a, 0x6c,
+ 0x96, 0x53, 0x98, 0x96, 0xb6, 0xc8, 0xc8, 0x0b, 0xe8, 0x19, 0x38, 0xb6, 0x3f, 0x1f, 0x13, 0xf1,
+ 0xa2, 0x95, 0xcc, 0x4e, 0xf7, 0x7e, 0xf6, 0x50, 0x04, 0xdf, 0x16, 0x8a, 0xf7, 0x5c, 0xce, 0x43,
+ 0xb6, 0x89, 0xfc, 0x71, 0xdd, 0x89, 0x99, 0x83, 0xf2, 0x3d, 0xf5, 0xd2, 0xa4, 0xec, 0xd6, 0x53,
+ 0x94, 0xb2, 0x62, 0x6b, 0x6c, 0x7f, 0x36, 0x5f, 0xb8, 0x8e, 0x35, 0x5c, 0xd7, 0x5a, 0x65, 0xf9,
+ 0xd9, 0xd4, 0xe9, 0x9e, 0x76, 0xaa, 0x7c, 0x1f, 0x2b, 0xd8, 0xc9, 0x9d, 0x95, 0x8e, 0xe9, 0x87,
+ 0xa4, 0x27, 0x1e, 0xf8, 0x56, 0x6d, 0xbd, 0x88, 0xac, 0x9e, 0x20, 0xcb, 0xc5, 0x8a, 0xef, 0x85,
+ 0xcf, 0x6c, 0xc8, 0xd5, 0xe9, 0x3e, 0x5c, 0xec, 0x0a, 0xde, 0x9e, 0xca, 0xf1, 0x91, 0x22, 0x4b,
+ 0x15, 0x4f, 0xd3, 0x55, 0x79, 0x77, 0xc5, 0x46, 0x5b, 0x14, 0x4b, 0x71, 0x4d, 0x11, 0xdf, 0x90,
+ 0x1f, 0x79, 0x7e, 0x9c, 0x16, 0xcf, 0xec, 0xd4, 0xc7, 0x7e, 0xaf, 0x6f, 0xeb, 0xe5, 0x1c, 0x49,
+ 0xd8, 0x7f, 0xe7, 0x38, 0xd1, 0xd8, 0x8e, 0x4a, 0x95, 0x4f, 0xad, 0xab, 0x1a, 0xfb, 0xb9, 0x0a,
+ 0x55, 0xe3, 0xdb, 0x29, 0x05, 0xa6, 0xcd, 0x04, 0x53, 0x2e, 0x70, 0x99, 0xab, 0x3e, 0xef, 0x93,
+ 0xc7, 0x32, 0xf2, 0x89, 0x6e, 0x76, 0x92, 0x03, 0x11, 0xf4, 0x91, 0x73, 0x17, 0x2f, 0x65, 0x80,
+ 0xae, 0x7a, 0x9e, 0x13, 0xd9, 0xfe, 0x2a, 0xd9, 0xf2, 0x1e, 0x10, 0xc7, 0xc4, 0x33, 0x45, 0xfd,
+ 0xd2, 0x7d, 0xf5, 0xeb, 0x1b, 0x98, 0x2d, 0x78, 0x24, 0x8c, 0xae, 0x49, 0x6d, 0x92, 0x78, 0x40,
+ 0xfa, 0xad, 0xe8, 0x6d, 0x68, 0x36, 0x44, 0xb3, 0x4b, 0xc1, 0x43, 0x2e, 0xae, 0x4d, 0x3d, 0xbf,
+ 0x25, 0x3f, 0x4b, 0xbc, 0xb4, 0x63, 0xeb, 0x9a, 0xe5, 0x6e, 0x4d, 0xd2, 0x5f, 0x3b, 0x5a, 0x91,
+ 0x25, 0x82, 0x54, 0x14, 0x32, 0xe4, 0x7f, 0xd2, 0x71, 0x73, 0x08, 0x74, 0x87, 0x00, 0xaf, 0x7f,
+ 0x5b, 0xa3, 0xc7, 0x95, 0x7b, 0x8d, 0x7e, 0x72, 0x82, 0xa3, 0xf3, 0x8f, 0x3e, 0x95, 0xfb, 0x4e,
+ 0x72, 0x82, 0x89, 0x8d, 0x83, 0x5a, 0x17, 0xbb, 0xe0, 0xf9, 0xe6, 0x08, 0x7b, 0xa7, 0xf7, 0x23,
+ 0xb0, 0x05, 0xbc, 0x3a, 0x9e, 0x28, 0x69, 0xad, 0xb0, 0x9c, 0x2e, 0xbd, 0x1e, 0x3d, 0xd3, 0xb8,
+ 0x12, 0xe7, 0x24, 0x20, 0xf2, 0x5e, 0xc7, 0x85, 0x1e, 0x2a, 0xc1, 0xa1, 0x5c, 0xde, 0x7c, 0x27,
+ 0x1d, 0x24, 0x8c, 0xa6, 0x9d, 0xe2, 0xa8, 0xa1, 0xb2, 0xd4, 0xcf, 0x5f, 0x18, 0xdb, 0xe9, 0x74,
+ 0x24, 0x8a, 0x29, 0x5b, 0xdd, 0xbb, 0xeb, 0x39, 0x41, 0x9b, 0x1d, 0xca, 0xb8, 0x93, 0xa9, 0xfc,
+ 0xb6, 0xbb, 0x84, 0x0c, 0x8d, 0xb8, 0x6c, 0x57, 0x3d, 0xe7, 0x57, 0xf6, 0x1a, 0x54, 0xa5, 0x6c,
+ 0x93, 0x7b, 0xb2, 0xfb, 0x29, 0xd9, 0x72, 0x2c, 0xe2, 0xe6, 0xe7, 0x64, 0xe6, 0xc9, 0xe9, 0xee,
+ 0xa8, 0xfc, 0x8f, 0x5c, 0xad, 0xd6, 0x32, 0x2a, 0x6e, 0x12, 0x46, 0x35, 0x0c, 0x03, 0x7f, 0x7f,
+ 0xa3, 0xe4, 0x02, 0x7f, 0xee, 0x5d, 0xd9, 0x33, 0xfc, 0x51, 0xc7, 0x99, 0xe9, 0xcb, 0xe9, 0x91,
+ 0x5f, 0x9e, 0x08, 0x51, 0x75, 0xe6, 0x9c, 0x38, 0x44, 0x26, 0x01, 0x21, 0xb8, 0x5e, 0x24, 0xae,
+ 0xf5, 0x9c, 0xbb, 0xfe, 0xd5, 0x84, 0xde, 0xea, 0x49, 0xb3, 0xfe, 0xa9, 0x6b, 0x8d, 0x4e, 0x57,
+ 0x6b, 0xd4, 0x87, 0x73, 0xf0, 0x56, 0x58, 0x1a, 0x1f, 0xf3, 0xda, 0x37, 0x88, 0xcc, 0x0b, 0x35,
+ 0xe1, 0x5d, 0x42, 0x10, 0x83, 0xd4, 0x1f, 0x53, 0x23, 0xbf, 0xda, 0x2b, 0xac, 0x7f, 0x0b, 0x67,
+ 0x75, 0x39, 0x7f, 0x87, 0x8a, 0x94, 0xe9, 0x59, 0x9d, 0xff, 0x6a, 0x26, 0xbd, 0xc4, 0x92, 0xde,
+ 0x88, 0x8e, 0x11, 0x80, 0xe4, 0xb9, 0x8e, 0x67, 0x5a, 0xb9, 0x03, 0xc6, 0xe2, 0x37, 0xe1, 0x30,
+ 0xd4, 0x45, 0xa0, 0x3d, 0x09, 0x28, 0x44, 0x7f, 0x7a, 0xf3, 0xff, 0x00, 0x02, 0x19, 0x7a, 0xdc,
+ 0x92, 0x73, 0x00, 0x00
};