Skip to content
Snippets Groups Projects
Commit b276e5ff authored by Anton Klarén's avatar Anton Klarén
Browse files

Code clean up

parent 6d87ad27
No related branches found
No related tags found
No related merge requests found
......@@ -3,10 +3,25 @@
<head>
<meta charset="utf-8">
<title>title</title>
<link rel="stylesheet" href="style.css">
<script src="lc.js"></script>
</head>
<body>
<!-- page content -->
<script>
var oReq = new XMLHttpRequest();
oReq.open("GET", "http://fair-2014-4.lab1.cs.lth.se:8080/logdata/clamping/experiments/bc4b3d5e-509a-40d1-81ec-1799c2ee167b/data", true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response; // Note: not oReq.responseText
if (arrayBuffer) {
var buff = new LabComm.Buffer(new DataView(arrayBuffer));
console.log(buff);
new LabComm.Parser(buff);
}
};
oReq.send(null);
</script>
</body>
</html>
'use strict';
function LabComm() {
var samples = {};
var LabComm = LabComm || {};
}
function LcSample(buffer) {
this.varint = function() {
var nextByte, result = 0, bytesRead = 0;
do {
nextByte = this._data.getUint8(offset+bytesRead);
result += (nextByte & 0x7F) << (7 * bytesRead);
bytesRead++;
} while (nextByte >= 0x80)
offset += bytesRead;
return result;
}
this.str = function() {
var l = this.varint();
var ret = String.fromCharCode.apply(null, new Uint8Array(this._buffer, offset, l));
offset += l;
return ret;
}
var consts = {
/**
* Constants used during parsing
* @enum {number}
*/
LabComm.Constants = {
VERSION: 0x01,
SAMPLE_DEF: 0x02,
SAMPLE_REF: 0x03,
......@@ -40,6 +24,142 @@ function LcSample(buffer) {
DOUBLE: 0x26,
STRING: 0x27
};
/**
* A buffer objects that supports all labcomm types
* @constructor
* @param {DataView} dataView An underlying dataview to work on
* @param {number=} offset An initial offset, defaults to 0
*/
LabComm.Buffer = function (dataView, offset) {
this.offset = offset || 0;
this.data = dataView;
};
/**
* Reads a var-int from the buffer.
* @return {number} An integer
*/
LabComm.Buffer.prototype.getVarint = function() {
var nextByte, result = 0, bytesRead = 0;
do {
nextByte = this.data.getUint8(this.offset+bytesRead);
result += (nextByte & 0x7F) << (7 * bytesRead);
bytesRead++;
} while (nextByte >= 0x80)
this.offset += bytesRead;
return result;
};
/**
* Reads a string from the buffer.
* @return {string} A string
*/
LabComm.Buffer.prototype.getString = function() {
var len = this.getVarint();
var chars = new Uint8Array(len);
for(var i = 0; i < len; i++) {
chars[i] = this.data.getUint8(this.offset + i);
}
var str = String.fromCharCode.apply(null, chars);
this.offset += len;
return str;
};
/**
* Reads a boolean (8-bits) from the buffer.
* @return {Boolean} A boolean
*/
LabComm.Buffer.prototype.getBoolean = function() {
return new Boolean(this.data.getUint8(this.offset++));
};
/**
* Reads a byte (8-bits) from the buffer.
* @return {number} A byte
*/
LabComm.Buffer.prototype.getByte = function() {
return this.data.getUint8(this.offset++);
};
/**
* Reads a short (16-bits) from the buffer.
* @return {number} A short
*/
LabComm.Buffer.prototype.getShort = function() {
var s = this.data.getInt16(this.offset);
this.offset += 2;
return s;
};
/**
* Reads an interger (32-bits) from the buffer.
* @return {number} An integer
*/
LabComm.Buffer.prototype.getInt = function() {
var s = this.data.getInt32(this.offset);
this.offset += 4;
return s;
};
/**
* Reads a long (64-bits) from the buffer, note that JavaScript only has
* doubles internaly so if the long requires more than 53-bits the number
* will fall over to +/- Infinity.
* @return {number} A long
*/
LabComm.Buffer.prototype.getLong = function() {
var low = this.data.getInt32(this.offset + 4);
var n = this.data.getInt32(this.offset) * 0x100000000 + low;
if (low < 0) n += 0x100000000;
this.offset += 8;
return n;
};
/**
* Reads a float (32-bits) from the buffer.
* @return {number} A float
*/
LabComm.Buffer.prototype.getFloat = function() {
var s = this.data.getFloat32(this.offset);
this.offset += 4;
return s;
};
/**
* Reads a double (64-bits) from the buffer.
* @return {number} A double
*/
LabComm.Buffer.prototype.getDouble = function() {
var s = this.data.getFloat64(this.offset);
this.offset += 8;
return s;
};
/**
* Skip a number of bytes
* @param {number} length The number of bytes to skip
*/
LabComm.Buffer.prototype.skip = function(length) {
this.offset += len;
};
/**
* A
* @constructor
* @param {LabComm.Buffer} A buffer to parse from
*/
LabComm.Parser = function(buffer) {
this.data = buffer;
var _uid = 1;
function uid() {return this._uid++};
......@@ -50,19 +170,19 @@ function LcSample(buffer) {
return '"'+name+'":'+'"'+type+'"';
}
this.sig = function(name, json, fb) {
var type = this.varint();
var type = this.data.getVarint();
switch(type) {
case consts.ARRAY:
case LabComm.Constants.ARRAY:
console.log("array");
//TODO: implement
break;
case consts.STRUCT:
case LabComm.Constants.STRUCT:
var func = [];
func.push('"'+name+'":{');
json.push('"'+name+'":{');
var fields = this.varint();
var fields = this.data.getVarint();
while(fields--) {
var fn = this.str();
var fn = this.data.getString();
func.push(this.sig(fn, json, fb));
if(fields!=0) {
json.push(',');
......@@ -72,61 +192,49 @@ function LcSample(buffer) {
func.push("}");
json.push("}");
return func.join('');
case consts.BOOLEAN:
return buildParser(name, json, fb, "bool", "new Boolean(data.getUint8(offset++))");
case consts.BYTE:
return buildParser(name, json, fb, "byte", "data.getUint8(offset++)");
case consts.SHORT:
return buildParser(name, json, fb, "short", "data.getInt16(offset);offset+=2");
case consts.INT:
return buildParser(name, json, fb, "int", "data.getInt32(offset);offset+=4");
case consts.LONG: //TODO: 2-complement?
return buildParser(name, json, fb, "long", "data.getInt32(offset)<<32 + data.getInt32(offset+4);offset+=8");
case consts.FLOAT:
return buildParser(name, json, fb, "float", "data.getFloat32(offset);offset+=4");
case consts.DOUBLE:
return buildParser(name, json, fb, "double", "data.getFloat64(offset);offset+=8");
case consts.STRING: //TODO: read varint
var nextByte, result = 0, bytesRead = 0
do {
nextByte = data.getUint8(offset+bytesRead);
result += (nextByte & 0x7F) << (7 * bytesRead);
bytesRead++;
} while (nextByte >= 0x80)
offset += bytesRead;
return '"'+name+'":'+'"string"';
case LabComm.Constants.BOOLEAN:
return buildParser(name, json, fb, "bool", "data.getBoolean()");
case LabComm.Constants.BYTE:
return buildParser(name, json, fb, "byte", "data.getByte()");
case LabComm.Constants.SHORT:
return buildParser(name, json, fb, "short", "data.getShort()");
case LabComm.Constants.INT:
return buildParser(name, json, fb, "int", "data.getInt()");
case LabComm.Constants.LONG:
return buildParser(name, json, fb, "long", "data.getLong()");
case LabComm.Constants.FLOAT:
return buildParser(name, json, fb, "float", "data.getFloat()");
case LabComm.Constants.DOUBLE:
return buildParser(name, json, fb, "double", "data.getDouble()");
case LabComm.Constants.STRING:
return buildParser(name, json, fb, "string", "data.getString()");
}
}
this._defs = {};
var offset = 0;
this._buffer = buffer;
this._data = new DataView(buffer);
for(var i = 1; i < 5; i ++) {
var tag = this.varint();
var len = this.varint();
for(var i = 1; i < 6; i ++) {
var tag = this.data.getVarint();
var len = this.data.getVarint();
console.log("tag: 0x" + tag.toString(16));
console.log("len: 0x" + len.toString(16));
switch(tag) {
case consts.VERSION:
var version = this.str();
case LabComm.Constants.VERSION:
var version = this.data.getString();
console.log("LabComm version package: " + version);
break;
case consts.SAMPLE_DEF:
var index = this.varint();
var name = this.str();
var siglen = this.varint();
case LabComm.Constants.SAMPLE_DEF:
var index = this.data.getVarint();
var name = this.data.getString();
var siglen = this.data.getVarint();
console.log("sample def: 0x" + index.toString(16) + ":" + name + ", size: 0x" + siglen.toString(16));
var pre = "\tvar offset=0;\n\t";
var json = [],
fb = [];
var struct = JSON.parse('{' + this.sig(name, json, fb) + "}");
var func = pre + fb.join(';\n\t') + ';\n\treturn {' + json.join('') + '}';
var func = fb.join(';\n\t') + ';\n\treturn {' + json.join('') + '}';
this._defs[index] = {
index: index,
name: name,
......@@ -134,24 +242,25 @@ function LcSample(buffer) {
decoder: new Function('data', func)
};
break;
case consts.SAMPLE_REF:
case consts.TYPE_DEF:
case consts.TYPE_BINDING:
case consts.PRAGMA:
offset += len; //TODO: standard not stable
case LabComm.Constants.SAMPLE_REF:
case LabComm.Constants.TYPE_DEF:
case LabComm.Constants.TYPE_BINDING:
case LabComm.Constants.PRAGMA:
this.data.skip(len);
console.log("skipping unhandled package of size " + len);
break;
default:
var s = this._defs[tag];
var decoder = s.decoder;
var sample = decoder(this.data);
console.log("sample name: " + s.name);
console.log(decoder);
console.log(sample);
break;
}
}
}
var test = (new Uint8Array([0x01, 0x0C, 0x0B, 0x4C, 0x61, 0x62, 0x43, 0x6F, 0x6D, 0x6D, 0x32, 0x30, 0x31, 0x34, 0x02, 0x64, 0x40, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5B, 0x11, 0x03, 0x0B, 0x6F, 0x72, 0x69, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x11, 0x04, 0x02, 0x71, 0x31, 0x25, 0x02, 0x71, 0x32, 0x25, 0x02, 0x71, 0x33, 0x25, 0x02, 0x71, 0x34, 0x25, 0x0B, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x6C, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x11, 0x03, 0x01, 0x78, 0x25, 0x01, 0x79, 0x25, 0x01, 0x7A, 0x25, 0x0D, 0x63, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x11, 0x04, 0x03, 0x63, 0x66, 0x31, 0x22, 0x03, 0x63, 0x66, 0x34, 0x22, 0x03, 0x63, 0x66, 0x36, 0x22, 0x03, 0x63, 0x66, 0x78, 0x22, 0x02, 0x47, 0x41, 0x09, 0x6D, 0x65, 0x74, 0x61, 0x5F, 0x64, 0x61, 0x74, 0x61, 0x3B, 0x11, 0x07, 0x01, 0x78, 0x25, 0x01, 0x79, 0x25, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x67, 0x61, 0x70, 0x25, 0x08, 0x6D, 0x69, 0x73, 0x6D, 0x61, 0x74, 0x63, 0x68, 0x25, 0x0C, 0x73, 0x68, 0x65, 0x65, 0x74, 0x31, 0x5F, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x25, 0x0C, 0x73, 0x68, 0x65, 0x65, 0x74, 0x32, 0x5F, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x25, 0x40, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x41, 0x00, 0x1C, 0x95, 0x40, 0xE7, 0xA9, 0x18, 0x00, 0x00, 0x3F, 0xEC, 0xCF, 0x74, 0x00, 0x00, 0x00, 0x00, 0xBE, 0xD7, 0x04, 0x5F, 0x3F, 0xA5, 0xE6, 0xBE, 0x41, 0x1A, 0x40, 0xD9, 0x8C, 0x27, 0x40, 0xEF, 0x53, 0xA1, 0x00, 0x00, 0x40, 0x01, 0x3C, 0x64, 0x00, 0x00, 0x00, 0x00, 0xBB, 0x77, 0x21, 0xA3, 0x3F, 0x76, 0xF5, 0x4D, 0x41, 0x1A, 0x40, 0xCE, 0x9B, 0x89, 0x40, 0xF1, 0xC8, 0x4B, 0x00, 0x00, 0x3F, 0xFC, 0x36, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xF1, 0xB9, 0xF7, 0x3F, 0xDB, 0x79, 0xED, 0x41, 0x1A, 0x40, 0xC7, 0x6B, 0xC4, 0x40, 0xF3, 0x3F, 0xFA, 0x00, 0x00, 0x3F, 0xFF, 0x8B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x17, 0x42, 0x11, 0x3F, 0x65, 0x5C, 0xC5, 0x41, 0x1A, 0x40, 0xB4, 0x55, 0xD6, 0x40, 0xF6, 0x99, 0xAA, 0x00, 0x00, 0x40, 0x05, 0x5D, 0x86, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7D, 0xFE, 0x51, 0x3F, 0x4F, 0x31, 0xD5, 0x41, 0x1A, 0x40, 0x92, 0x45, 0x8E, 0x40, 0xFC, 0x6D, 0x59, 0x00, 0x00, 0x40, 0x02, 0x84, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xAC, 0x7E, 0xCB, 0x3E, 0x58, 0xD4, 0x68, 0x41, 0x1A, 0x40, 0x5D, 0x9B, 0xD6, 0x41, 0x01, 0x9C, 0x60, 0x00, 0x00, 0x40, 0x08, 0x58, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xA2, 0x0F, 0x77, 0xBD, 0x19, 0x68, 0x9E, 0x41, 0x1A, 0x40, 0x23, 0x2B, 0xD5, 0x41, 0x04, 0x37, 0xE9, 0x00, 0x00, 0x40, 0x01, 0xC3, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xDC, 0x35, 0x79, 0xBE, 0x50, 0xDC, 0xE6, 0x41, 0x1A, 0x40, 0x0B, 0x0A, 0xA2, 0x41, 0x05, 0x4E, 0xDA, 0x00, 0x00, 0x40, 0x05, 0x65, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFB, 0xF1, 0x6D, 0x3B, 0xE9, 0x06, 0xD6, 0x41, 0x1A, 0x40, 0x07, 0x94, 0x6C, 0x41, 0x05, 0x5C, 0xA4, 0x00, 0x00, 0x40, 0x01, 0xF2, 0x78, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE3, 0x06, 0x9C, 0x3D, 0xE3, 0xBF, 0xA0, 0x41, 0x1A, 0x40, 0x0B, 0xE9, 0x38, 0x41, 0x05, 0x57, 0x39, 0x00, 0x00, 0x40, 0x07, 0x1E, 0x48, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xEB, 0x3D, 0xBC, 0xBC, 0xAA, 0x00, 0x86, 0x41, 0x1A, 0x40, 0x1E, 0x0A, 0x28, 0x41, 0x04, 0xB8, 0xFE, 0x00, 0x00, 0x40, 0x08, 0xBB, 0x09, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x5D, 0xAF, 0x3F, 0x04, 0x07, 0xD4, 0x41, 0x1A, 0x40, 0x77, 0x99, 0xF4, 0x41, 0x01, 0xCA, 0x95, 0x00, 0x00, 0x40, 0x0B, 0x99, 0x51, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x21, 0xDA, 0xE5, 0x3F, 0xDA, 0xB7, 0x2E, 0x41, 0x1A, 0x40, 0xB2, 0x8F, 0x34, 0x40, 0xFB, 0x82, 0xE3, 0x00, 0x00, 0x40, 0x0E, 0x0C, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x67, 0xC9, 0x24, 0x3F, 0xD4, 0xAA, 0xD7, 0x41, 0x1A, 0x40, 0xD3, 0xB7, 0x84, 0x40, 0xF5, 0xFC, 0x5C, 0x00, 0x00, 0x40, 0x06, 0xC3, 0x1A, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x40, 0x4F, 0x42, 0x40, 0x10, 0x5A, 0x8E, 0x41, 0x1A, 0x40, 0xDD, 0x0E, 0x58, 0x40, 0xF4, 0x96, 0x9A, 0x00, 0x00, 0x40, 0x03, 0x25, 0x3A, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x0E, 0x3A, 0x29, 0x40, 0x02, 0xCD, 0xB4, 0x41, 0x1A, 0x40, 0xDE, 0xC0, 0x7E, 0x40, 0xF4, 0x66, 0x32, 0x00, 0x00, 0x40, 0x06, 0x63, 0x8E, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x3C, 0x95, 0x21, 0x3F, 0xCE, 0x07, 0xE9, 0x41, 0x1A, 0x40, 0xE2, 0xF4, 0xD0, 0x40, 0xF3, 0x5F, 0x06, 0x00, 0x00, 0x40, 0x02, 0xE1, 0x76, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x1D, 0x14, 0xE7, 0x3F, 0xE0, 0x78, 0x25, 0x41, 0x1A, 0x40, 0xED, 0x8C, 0x76, 0x40, 0xF1, 0xC8, 0x46, 0x00, 0x00, 0x40, 0x01, 0x03, 0x1A, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x47, 0x46, 0xE1, 0x40, 0x1B, 0x78, 0x7B, 0x41, 0x1A, 0x41, 0x01, 0xBE, 0x19, 0x40, 0xEE, 0x03, 0x90, 0x00, 0x00, 0x40, 0x04, 0x2A, 0x52, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xD2, 0xCE, 0xF2, 0x40, 0x48, 0x6F, 0xF3, 0x41, 0x1A, 0x41, 0x12, 0x4F, 0x9A, 0x40, 0xE7, 0xDB, 0xB7, 0x00, 0x00, 0x40, 0x08, 0x75, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xF9, 0x39, 0x6D, 0x40, 0x4B, 0x08, 0xA7, 0x41, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x1A, 0x00, 0x00])).buffer;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment