22317 lines
931 KiB
JavaScript
22317 lines
931 KiB
JavaScript
/******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/
|
|
/******/ // create a fake namespace object
|
|
/******/ // mode & 1: value is a module id, require it
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
/******/ // mode & 4: return value when already ns object
|
|
/******/ // mode & 8|1: behave like require
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
/******/ if(mode & 8) return value;
|
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
/******/ var ns = Object.create(null);
|
|
/******/ __webpack_require__.r(ns);
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
/******/ return ns;
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "/";
|
|
/******/
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = "./src/index.js");
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ "../dvi2html/lib/html.js":
|
|
/*!*******************************!*\
|
|
!*** ../dvi2html/lib/html.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var __extends = this && this.__extends || function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf || {
|
|
__proto__: []
|
|
} instanceof Array && function (d, b) {
|
|
d.__proto__ = b;
|
|
} || function (d, b) {
|
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
};
|
|
|
|
return extendStatics(d, b);
|
|
};
|
|
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
}();
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var machine_1 = __webpack_require__(/*! ./machine */ "../dvi2html/lib/machine.js");
|
|
|
|
var HTMLMachine =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(HTMLMachine, _super);
|
|
|
|
function HTMLMachine(o) {
|
|
var _this = _super.call(this) || this;
|
|
|
|
_this.output = o;
|
|
_this.color = 'black';
|
|
_this.colorStack = [];
|
|
_this.svgDepth = 0;
|
|
return _this;
|
|
}
|
|
|
|
HTMLMachine.prototype.pushColor = function (c) {
|
|
this.colorStack.push(this.color);
|
|
this.color = c;
|
|
};
|
|
|
|
HTMLMachine.prototype.popColor = function () {
|
|
this.color = this.colorStack.pop();
|
|
};
|
|
|
|
HTMLMachine.prototype.setPapersize = function (width, height) {
|
|
this.paperwidth = width;
|
|
this.paperheight = height;
|
|
};
|
|
|
|
HTMLMachine.prototype.putSVG = function (svg) {
|
|
var left = this.position.h * this.pointsPerDviUnit;
|
|
var top = this.position.v * this.pointsPerDviUnit;
|
|
this.svgDepth += (svg.match(/<svg>/g) || []).length;
|
|
this.svgDepth -= (svg.match(/<\/svg>/g) || []).length;
|
|
svg = svg.replace("<svg>", "<svg width=\"10pt\" height=\"10pt\" viewBox=\"-5 -5 10 10\" style=\"overflow: visible; position: absolute;\">");
|
|
svg = svg.replace(/{\?x}/g, left.toString());
|
|
svg = svg.replace(/{\?y}/g, top.toString());
|
|
this.output.write(svg);
|
|
};
|
|
|
|
HTMLMachine.prototype.preamble = function (numerator, denominator, magnification, comment) {
|
|
var dviUnit = magnification * numerator / 1000.0 / denominator;
|
|
var resolution = 300.0; // ppi
|
|
|
|
var tfm_conv = 25400000.0 / numerator * (denominator / 473628672) / 16.0;
|
|
var conv = numerator / 254000.0 * (resolution / denominator);
|
|
conv = conv * (magnification / 1000.0);
|
|
this.pointsPerDviUnit = dviUnit * 72.27 / 100000.0 / 2.54;
|
|
};
|
|
|
|
HTMLMachine.prototype.putRule = function (rule) {
|
|
var a = rule.a * this.pointsPerDviUnit;
|
|
var b = rule.b * this.pointsPerDviUnit;
|
|
var left = this.position.h * this.pointsPerDviUnit;
|
|
var bottom = this.position.v * this.pointsPerDviUnit;
|
|
var top = bottom - a;
|
|
this.output.write("<span style=\"background: " + this.color + "; position: absolute; top: " + top + "pt; left: " + left + "pt; width:" + b + "pt; height: " + a + "pt;\"></span>\n");
|
|
};
|
|
|
|
HTMLMachine.prototype.putText = function (text) {
|
|
var textWidth = 0;
|
|
var textHeight = 0;
|
|
var textDepth = 0;
|
|
var htmlText = "";
|
|
|
|
for (var i = 0; i < text.length; i++) {
|
|
var c = text[i];
|
|
var metrics = this.font.metrics.characters[c];
|
|
if (metrics === undefined) throw Error("Could not find font metric for " + c);
|
|
textWidth += metrics.width;
|
|
textHeight = Math.max(textHeight, metrics.height);
|
|
textDepth = Math.max(textDepth, metrics.depth);
|
|
|
|
if (c < 32) {
|
|
htmlText += "&#" + (127 + c + 32 + 4) + ";";
|
|
} else {
|
|
htmlText += String.fromCharCode(c);
|
|
}
|
|
} // tfm is based on 1/2^16 pt units, rather than dviunit which is 10^¿7 meters
|
|
|
|
|
|
var dviUnitsPerFontUnit = this.font.metrics.designSize / 1048576.0 * 65536 / 1048576;
|
|
var top = (this.position.v - textHeight * dviUnitsPerFontUnit) * this.pointsPerDviUnit;
|
|
var left = this.position.h * this.pointsPerDviUnit;
|
|
var width = textWidth * this.pointsPerDviUnit * dviUnitsPerFontUnit;
|
|
var height = textHeight * this.pointsPerDviUnit * dviUnitsPerFontUnit;
|
|
var depth = textDepth * this.pointsPerDviUnit * dviUnitsPerFontUnit;
|
|
var top = this.position.v * this.pointsPerDviUnit;
|
|
var fontsize = this.font.metrics.designSize / 1048576.0 * this.font.scaleFactor / this.font.designSize;
|
|
|
|
if (this.svgDepth == 0) {
|
|
this.output.write("<span style=\"color: " + this.color + "; font-family: " + this.font.name + "; font-size: " + fontsize + "pt; position: absolute; top: " + (top - height) + "pt; left: " + left + "pt; overflow: visible;\"><span style=\"margin-top: -" + fontsize + "pt; line-height: " + 0 + "pt; height: " + fontsize + "pt; display: inline-block; vertical-align: baseline; \">" + htmlText + "</span><span style=\"display: inline-block; vertical-align: " + height + "pt; height: " + 0 + "pt; line-height: 0;\"></span></span>\n");
|
|
} else {
|
|
var bottom = this.position.v * this.pointsPerDviUnit; // No 'pt' on fontsize since those units are potentially scaled
|
|
|
|
this.output.write("<text alignment-baseline=\"baseline\" y=\"" + bottom + "\" x=\"" + left + "\" style=\"font-family: " + this.font.name + "; font-size: " + fontsize + ";\">" + htmlText + "</text>\n");
|
|
}
|
|
|
|
return textWidth * dviUnitsPerFontUnit * this.font.scaleFactor / this.font.designSize;
|
|
};
|
|
|
|
return HTMLMachine;
|
|
}(machine_1.Machine);
|
|
|
|
exports.default = HTMLMachine;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/index.js":
|
|
/*!********************************!*\
|
|
!*** ../dvi2html/lib/index.js ***!
|
|
\********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : new P(function (resolve) {
|
|
resolve(result.value);
|
|
}).then(fulfilled, rejected);
|
|
}
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
|
|
var __generator = this && this.__generator || function (thisArg, body) {
|
|
var _ = {
|
|
label: 0,
|
|
sent: function () {
|
|
if (t[0] & 1) throw t[1];
|
|
return t[1];
|
|
},
|
|
trys: [],
|
|
ops: []
|
|
},
|
|
f,
|
|
y,
|
|
t,
|
|
g;
|
|
return g = {
|
|
next: verb(0),
|
|
"throw": verb(1),
|
|
"return": verb(2)
|
|
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
return this;
|
|
}), g;
|
|
|
|
function verb(n) {
|
|
return function (v) {
|
|
return step([n, v]);
|
|
};
|
|
}
|
|
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
|
|
while (_) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
|
|
switch (op[0]) {
|
|
case 0:
|
|
case 1:
|
|
t = op;
|
|
break;
|
|
|
|
case 4:
|
|
_.label++;
|
|
return {
|
|
value: op[1],
|
|
done: false
|
|
};
|
|
|
|
case 5:
|
|
_.label++;
|
|
y = op[1];
|
|
op = [0];
|
|
continue;
|
|
|
|
case 7:
|
|
op = _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
_ = 0;
|
|
continue;
|
|
}
|
|
|
|
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
_.label = op[1];
|
|
break;
|
|
}
|
|
|
|
if (op[0] === 6 && _.label < t[1]) {
|
|
_.label = t[1];
|
|
t = op;
|
|
break;
|
|
}
|
|
|
|
if (t && _.label < t[2]) {
|
|
_.label = t[2];
|
|
|
|
_.ops.push(op);
|
|
|
|
break;
|
|
}
|
|
|
|
if (t[2]) _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
}
|
|
|
|
op = body.call(thisArg, _);
|
|
} catch (e) {
|
|
op = [6, e];
|
|
y = 0;
|
|
} finally {
|
|
f = t = 0;
|
|
}
|
|
|
|
if (op[0] & 5) throw op[1];
|
|
return {
|
|
value: op[0] ? op[1] : void 0,
|
|
done: true
|
|
};
|
|
}
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var color_1 = __webpack_require__(/*! ./specials/color */ "../dvi2html/lib/specials/color.js");
|
|
|
|
var svg_1 = __webpack_require__(/*! ./specials/svg */ "../dvi2html/lib/specials/svg.js");
|
|
|
|
var papersize_1 = __webpack_require__(/*! ./specials/papersize */ "../dvi2html/lib/specials/papersize.js");
|
|
|
|
var html_1 = __webpack_require__(/*! ./html */ "../dvi2html/lib/html.js");
|
|
|
|
var text_1 = __webpack_require__(/*! ./text */ "../dvi2html/lib/text.js");
|
|
|
|
exports.Machines = {
|
|
HTML: html_1.default,
|
|
text: text_1.default
|
|
};
|
|
|
|
var parser_1 = __webpack_require__(/*! ./parser */ "../dvi2html/lib/parser.js");
|
|
|
|
exports.dviParser = parser_1.dviParser;
|
|
exports.execute = parser_1.execute;
|
|
exports.mergeText = parser_1.mergeText;
|
|
exports.specials = {
|
|
color: color_1.default,
|
|
svg: svg_1.default,
|
|
papersize: papersize_1.default
|
|
};
|
|
|
|
function dvi2html(dviStream, htmlStream) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var parser, machine;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
parser = papersize_1.default(svg_1.default(color_1.default(parser_1.mergeText(parser_1.dviParser(dviStream)))));
|
|
machine = new html_1.default(htmlStream);
|
|
return [4
|
|
/*yield*/
|
|
, parser_1.execute(parser, machine)];
|
|
|
|
case 1:
|
|
_a.sent();
|
|
|
|
return [2
|
|
/*return*/
|
|
, machine];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.dvi2html = dvi2html;
|
|
|
|
var index_1 = __webpack_require__(/*! ./tfm/index */ "../dvi2html/lib/tfm/index.js");
|
|
|
|
exports.tfmData = index_1.tfmData;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/machine.js":
|
|
/*!**********************************!*\
|
|
!*** ../dvi2html/lib/machine.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// var path = execSync('kpsewhich ' + name + '.tfm').toString().split("\n")[0];
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var index_1 = __webpack_require__(/*! ./tfm/index */ "../dvi2html/lib/tfm/index.js");
|
|
|
|
var Position =
|
|
/** @class */
|
|
function () {
|
|
function Position(properties) {
|
|
if (properties) {
|
|
this.h = properties.h;
|
|
this.v = properties.v;
|
|
this.w = properties.w;
|
|
this.x = properties.x;
|
|
this.y = properties.y;
|
|
this.z = properties.z;
|
|
} else {
|
|
this.h = this.v = this.w = this.x = this.y = this.z = 0;
|
|
}
|
|
}
|
|
|
|
return Position;
|
|
}();
|
|
|
|
var DviFont =
|
|
/** @class */
|
|
function () {
|
|
function DviFont(properties) {
|
|
this.name = properties.name;
|
|
this.checksum = properties.checksum;
|
|
this.scaleFactor = properties.scaleFactor;
|
|
this.designSize = properties.designSize;
|
|
}
|
|
|
|
return DviFont;
|
|
}();
|
|
|
|
exports.DviFont = DviFont;
|
|
|
|
var Machine =
|
|
/** @class */
|
|
function () {
|
|
function Machine() {
|
|
this.fonts = [];
|
|
}
|
|
|
|
Machine.prototype.preamble = function (numerator, denominator, magnification, comment) {};
|
|
|
|
Machine.prototype.pushColor = function (c) {};
|
|
|
|
Machine.prototype.popColor = function () {};
|
|
|
|
Machine.prototype.setPapersize = function (width, height) {};
|
|
|
|
Machine.prototype.push = function () {
|
|
this.stack.push(new Position(this.position));
|
|
};
|
|
|
|
Machine.prototype.pop = function () {
|
|
this.position = this.stack.pop();
|
|
};
|
|
|
|
Machine.prototype.beginPage = function (page) {
|
|
this.stack = [];
|
|
this.position = new Position();
|
|
};
|
|
|
|
Machine.prototype.endPage = function () {};
|
|
|
|
Machine.prototype.post = function (p) {};
|
|
|
|
Machine.prototype.postPost = function (p) {};
|
|
|
|
Machine.prototype.putRule = function (rule) {};
|
|
|
|
Machine.prototype.moveRight = function (distance) {
|
|
this.position.h += distance;
|
|
};
|
|
|
|
Machine.prototype.moveDown = function (distance) {
|
|
this.position.v += distance;
|
|
};
|
|
|
|
Machine.prototype.setFont = function (font) {
|
|
this.font = font;
|
|
};
|
|
|
|
Machine.prototype.putSVG = function (svg) {}; // Returns the width of the text
|
|
|
|
|
|
Machine.prototype.putText = function (text) {
|
|
return 0;
|
|
};
|
|
|
|
Machine.prototype.loadFont = function (properties) {
|
|
var f = new DviFont(properties);
|
|
f.metrics = index_1.loadFont(properties.name);
|
|
return f;
|
|
};
|
|
|
|
return Machine;
|
|
}();
|
|
|
|
exports.Machine = Machine;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/parser.js":
|
|
/*!*********************************!*\
|
|
!*** ../dvi2html/lib/parser.js ***!
|
|
\*********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* WEBPACK VAR INJECTION */(function(Buffer) {
|
|
|
|
var __extends = this && this.__extends || function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf || {
|
|
__proto__: []
|
|
} instanceof Array && function (d, b) {
|
|
d.__proto__ = b;
|
|
} || function (d, b) {
|
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
};
|
|
|
|
return extendStatics(d, b);
|
|
};
|
|
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
}();
|
|
|
|
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : new P(function (resolve) {
|
|
resolve(result.value);
|
|
}).then(fulfilled, rejected);
|
|
}
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
|
|
var __generator = this && this.__generator || function (thisArg, body) {
|
|
var _ = {
|
|
label: 0,
|
|
sent: function () {
|
|
if (t[0] & 1) throw t[1];
|
|
return t[1];
|
|
},
|
|
trys: [],
|
|
ops: []
|
|
},
|
|
f,
|
|
y,
|
|
t,
|
|
g;
|
|
return g = {
|
|
next: verb(0),
|
|
"throw": verb(1),
|
|
"return": verb(2)
|
|
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
return this;
|
|
}), g;
|
|
|
|
function verb(n) {
|
|
return function (v) {
|
|
return step([n, v]);
|
|
};
|
|
}
|
|
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
|
|
while (_) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
|
|
switch (op[0]) {
|
|
case 0:
|
|
case 1:
|
|
t = op;
|
|
break;
|
|
|
|
case 4:
|
|
_.label++;
|
|
return {
|
|
value: op[1],
|
|
done: false
|
|
};
|
|
|
|
case 5:
|
|
_.label++;
|
|
y = op[1];
|
|
op = [0];
|
|
continue;
|
|
|
|
case 7:
|
|
op = _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
_ = 0;
|
|
continue;
|
|
}
|
|
|
|
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
_.label = op[1];
|
|
break;
|
|
}
|
|
|
|
if (op[0] === 6 && _.label < t[1]) {
|
|
_.label = t[1];
|
|
t = op;
|
|
break;
|
|
}
|
|
|
|
if (t && _.label < t[2]) {
|
|
_.label = t[2];
|
|
|
|
_.ops.push(op);
|
|
|
|
break;
|
|
}
|
|
|
|
if (t[2]) _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
}
|
|
|
|
op = body.call(thisArg, _);
|
|
} catch (e) {
|
|
op = [6, e];
|
|
y = 0;
|
|
} finally {
|
|
f = t = 0;
|
|
}
|
|
|
|
if (op[0] & 5) throw op[1];
|
|
return {
|
|
value: op[0] ? op[1] : void 0,
|
|
done: true
|
|
};
|
|
}
|
|
};
|
|
|
|
var __asyncValues = this && this.__asyncValues || function (o) {
|
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
var m = o[Symbol.asyncIterator],
|
|
i;
|
|
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
}, i);
|
|
|
|
function verb(n) {
|
|
i[n] = o[n] && function (v) {
|
|
return new Promise(function (resolve, reject) {
|
|
v = o[n](v), settle(resolve, reject, v.done, v.value);
|
|
});
|
|
};
|
|
}
|
|
|
|
function settle(resolve, reject, d, v) {
|
|
Promise.resolve(v).then(function (v) {
|
|
resolve({
|
|
value: v,
|
|
done: d
|
|
});
|
|
}, reject);
|
|
}
|
|
};
|
|
|
|
var __await = this && this.__await || function (v) {
|
|
return this instanceof __await ? (this.v = v, this) : new __await(v);
|
|
};
|
|
|
|
var __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) {
|
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
var g = generator.apply(thisArg, _arguments || []),
|
|
i,
|
|
q = [];
|
|
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
}, i;
|
|
|
|
function verb(n) {
|
|
if (g[n]) i[n] = function (v) {
|
|
return new Promise(function (a, b) {
|
|
q.push([n, v, a, b]) > 1 || resume(n, v);
|
|
});
|
|
};
|
|
}
|
|
|
|
function resume(n, v) {
|
|
try {
|
|
step(g[n](v));
|
|
} catch (e) {
|
|
settle(q[0][3], e);
|
|
}
|
|
}
|
|
|
|
function step(r) {
|
|
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
|
|
}
|
|
|
|
function fulfill(value) {
|
|
resume("next", value);
|
|
}
|
|
|
|
function reject(value) {
|
|
resume("throw", value);
|
|
}
|
|
|
|
function settle(f, v) {
|
|
if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
|
|
}
|
|
};
|
|
|
|
var __asyncDelegator = this && this.__asyncDelegator || function (o) {
|
|
var i, p;
|
|
return i = {}, verb("next"), verb("throw", function (e) {
|
|
throw e;
|
|
}), verb("return"), i[Symbol.iterator] = function () {
|
|
return this;
|
|
}, i;
|
|
|
|
function verb(n, f) {
|
|
i[n] = o[n] ? function (v) {
|
|
return (p = !p) ? {
|
|
value: __await(o[n](v)),
|
|
done: n === "return"
|
|
} : f ? f(v) : v;
|
|
} : f;
|
|
}
|
|
};
|
|
|
|
var __values = this && this.__values || function (o) {
|
|
var m = typeof Symbol === "function" && o[Symbol.iterator],
|
|
i = 0;
|
|
if (m) return m.call(o);
|
|
return {
|
|
next: function () {
|
|
if (o && i >= o.length) o = void 0;
|
|
return {
|
|
value: o && o[i++],
|
|
done: !o
|
|
};
|
|
}
|
|
};
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
var Opcode;
|
|
|
|
(function (Opcode) {
|
|
Opcode[Opcode["set_char"] = 0] = "set_char";
|
|
Opcode[Opcode["set1"] = 128] = "set1";
|
|
Opcode[Opcode["set2"] = 129] = "set2";
|
|
Opcode[Opcode["set3"] = 130] = "set3";
|
|
Opcode[Opcode["set4"] = 131] = "set4";
|
|
Opcode[Opcode["set_rule"] = 132] = "set_rule";
|
|
Opcode[Opcode["put_char"] = 133] = "put_char";
|
|
Opcode[Opcode["put2"] = 134] = "put2";
|
|
Opcode[Opcode["put3"] = 135] = "put3";
|
|
Opcode[Opcode["put4"] = 136] = "put4";
|
|
Opcode[Opcode["put_rule"] = 137] = "put_rule";
|
|
Opcode[Opcode["nop"] = 138] = "nop";
|
|
Opcode[Opcode["bop"] = 139] = "bop";
|
|
Opcode[Opcode["eop"] = 140] = "eop";
|
|
Opcode[Opcode["push"] = 141] = "push";
|
|
Opcode[Opcode["pop"] = 142] = "pop";
|
|
Opcode[Opcode["right"] = 143] = "right";
|
|
Opcode[Opcode["right2"] = 144] = "right2";
|
|
Opcode[Opcode["right3"] = 145] = "right3";
|
|
Opcode[Opcode["right4"] = 146] = "right4";
|
|
Opcode[Opcode["w"] = 147] = "w";
|
|
Opcode[Opcode["w1"] = 148] = "w1";
|
|
Opcode[Opcode["w2"] = 149] = "w2";
|
|
Opcode[Opcode["w3"] = 150] = "w3";
|
|
Opcode[Opcode["w4"] = 151] = "w4";
|
|
Opcode[Opcode["x"] = 152] = "x";
|
|
Opcode[Opcode["x1"] = 153] = "x1";
|
|
Opcode[Opcode["x2"] = 154] = "x2";
|
|
Opcode[Opcode["x3"] = 155] = "x3";
|
|
Opcode[Opcode["x4"] = 156] = "x4";
|
|
Opcode[Opcode["down"] = 157] = "down";
|
|
Opcode[Opcode["down2"] = 158] = "down2";
|
|
Opcode[Opcode["down3"] = 159] = "down3";
|
|
Opcode[Opcode["down4"] = 160] = "down4";
|
|
Opcode[Opcode["y"] = 161] = "y";
|
|
Opcode[Opcode["y1"] = 162] = "y1";
|
|
Opcode[Opcode["y2"] = 163] = "y2";
|
|
Opcode[Opcode["y3"] = 164] = "y3";
|
|
Opcode[Opcode["y4"] = 165] = "y4";
|
|
Opcode[Opcode["z"] = 166] = "z";
|
|
Opcode[Opcode["z1"] = 167] = "z1";
|
|
Opcode[Opcode["z2"] = 168] = "z2";
|
|
Opcode[Opcode["z3"] = 169] = "z3";
|
|
Opcode[Opcode["z4"] = 170] = "z4";
|
|
Opcode[Opcode["fnt"] = 171] = "fnt";
|
|
Opcode[Opcode["fnt1"] = 235] = "fnt1";
|
|
Opcode[Opcode["fnt2"] = 236] = "fnt2";
|
|
Opcode[Opcode["fnt3"] = 237] = "fnt3";
|
|
Opcode[Opcode["fnt4"] = 238] = "fnt4";
|
|
Opcode[Opcode["xxx"] = 239] = "xxx";
|
|
Opcode[Opcode["xxx2"] = 240] = "xxx2";
|
|
Opcode[Opcode["xxx3"] = 241] = "xxx3";
|
|
Opcode[Opcode["xxx4"] = 242] = "xxx4";
|
|
Opcode[Opcode["fnt_def"] = 243] = "fnt_def";
|
|
Opcode[Opcode["fnt_def2"] = 244] = "fnt_def2";
|
|
Opcode[Opcode["fnt_def3"] = 245] = "fnt_def3";
|
|
Opcode[Opcode["fnt_def4"] = 246] = "fnt_def4";
|
|
Opcode[Opcode["pre"] = 247] = "pre";
|
|
Opcode[Opcode["post"] = 248] = "post";
|
|
Opcode[Opcode["post_post"] = 249] = "post_post";
|
|
})(Opcode || (Opcode = {}));
|
|
|
|
var DviCommand =
|
|
/** @class */
|
|
function () {
|
|
function DviCommand(properties) {
|
|
this.special = false;
|
|
Object.assign(this, properties);
|
|
}
|
|
|
|
DviCommand.prototype.execute = function (machine) {};
|
|
|
|
DviCommand.prototype.toString = function () {
|
|
return "DviCommand { }";
|
|
};
|
|
|
|
return DviCommand;
|
|
}();
|
|
|
|
exports.DviCommand = DviCommand; // 133 put1 c[1] typeset a character
|
|
// 134 put2 c[2]
|
|
// 135 put3 c[3]
|
|
// 136 put4 c[4]
|
|
|
|
var PutChar =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(PutChar, _super);
|
|
|
|
function PutChar(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.put_char;
|
|
return _this;
|
|
}
|
|
|
|
PutChar.prototype.execute = function (machine) {
|
|
machine.putText(Buffer.from([this.c]));
|
|
};
|
|
|
|
PutChar.prototype.toString = function () {
|
|
return "PutChar { c: '" + String.fromCharCode(this.c) + "' }";
|
|
};
|
|
|
|
return PutChar;
|
|
}(DviCommand); // 0...127 set_char_i typeset a character and move right
|
|
// 128 set1 c[1] typeset a character and move right
|
|
// 129 set2 c[2]
|
|
// 130 set3 c[3]
|
|
// 131 set4 c[4]
|
|
|
|
|
|
var SetChar =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(SetChar, _super);
|
|
|
|
function SetChar(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.set_char;
|
|
return _this;
|
|
}
|
|
|
|
SetChar.prototype.execute = function (machine) {
|
|
var text = Buffer.from([this.c]);
|
|
var width = machine.putText(text);
|
|
machine.moveRight(width);
|
|
};
|
|
|
|
SetChar.prototype.toString = function () {
|
|
return "SetChar { c: '" + String.fromCharCode(this.c) + "' }";
|
|
};
|
|
|
|
return SetChar;
|
|
}(DviCommand);
|
|
|
|
var SetText =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(SetText, _super);
|
|
|
|
function SetText(properties) {
|
|
return _super.call(this, properties) || this;
|
|
}
|
|
|
|
SetText.prototype.execute = function (machine) {
|
|
var width = machine.putText(this.t);
|
|
machine.moveRight(width);
|
|
};
|
|
|
|
SetText.prototype.toString = function () {
|
|
return "SetText { t: \"" + this.t.toString() + "\" }";
|
|
};
|
|
|
|
return SetText;
|
|
}(DviCommand); // 137 put_rule a[4], b[4] typeset a rule
|
|
|
|
|
|
var PutRule =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(PutRule, _super);
|
|
|
|
function PutRule(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.put_rule;
|
|
return _this;
|
|
}
|
|
|
|
PutRule.prototype.execute = function (machine) {
|
|
machine.putRule(this);
|
|
};
|
|
|
|
PutRule.prototype.toString = function () {
|
|
return "PutRule { a: " + this.a + ", b: " + this.b + " }";
|
|
};
|
|
|
|
return PutRule;
|
|
}(DviCommand); // 132 set_rule a[4], b[4] typeset a rule and move right
|
|
|
|
|
|
var SetRule =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(SetRule, _super);
|
|
|
|
function SetRule(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.set_rule;
|
|
return _this;
|
|
}
|
|
|
|
SetRule.prototype.execute = function (machine) {
|
|
machine.putRule(this);
|
|
machine.moveRight(this.b);
|
|
};
|
|
|
|
SetRule.prototype.toString = function () {
|
|
return "SetRule { a: " + this.a + ", b: " + this.b + " }";
|
|
};
|
|
|
|
return SetRule;
|
|
}(DviCommand); // 138 nop no operation
|
|
|
|
|
|
var Nop =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Nop, _super);
|
|
|
|
function Nop(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.nop;
|
|
return _this;
|
|
}
|
|
|
|
Nop.prototype.toString = function () {
|
|
return "Nop { }";
|
|
};
|
|
|
|
return Nop;
|
|
}(DviCommand); // 139 bop c_0[4]..c_9[4], p[4] beginning of page
|
|
|
|
|
|
var Bop =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Bop, _super);
|
|
|
|
function Bop(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.bop;
|
|
return _this;
|
|
}
|
|
|
|
Bop.prototype.execute = function (machine) {
|
|
machine.beginPage(this);
|
|
};
|
|
|
|
Bop.prototype.toString = function () {
|
|
return "Bop { ... }";
|
|
};
|
|
|
|
return Bop;
|
|
}(DviCommand); // 140 eop ending of page
|
|
|
|
|
|
var Eop =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Eop, _super);
|
|
|
|
function Eop(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.eop;
|
|
return _this;
|
|
}
|
|
|
|
Eop.prototype.execute = function (machine) {
|
|
if (machine.stack.length) throw Error('Stack should be empty at the end of a page.');
|
|
machine.endPage();
|
|
};
|
|
|
|
Eop.prototype.toString = function () {
|
|
return "Eop { }";
|
|
};
|
|
|
|
return Eop;
|
|
}(DviCommand); // 141 push save the current positions
|
|
|
|
|
|
var Push =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Push, _super);
|
|
|
|
function Push(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.push;
|
|
return _this;
|
|
}
|
|
|
|
Push.prototype.execute = function (machine) {
|
|
machine.push();
|
|
};
|
|
|
|
Push.prototype.toString = function () {
|
|
return "Push { }";
|
|
};
|
|
|
|
return Push;
|
|
}(DviCommand); // 142 pop restore previous positions
|
|
|
|
|
|
var Pop =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Pop, _super);
|
|
|
|
function Pop(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.pop;
|
|
return _this;
|
|
}
|
|
|
|
Pop.prototype.execute = function (machine) {
|
|
machine.pop();
|
|
};
|
|
|
|
Pop.prototype.toString = function () {
|
|
return "Pop { }";
|
|
};
|
|
|
|
return Pop;
|
|
}(DviCommand); // 143 right1 b[1] move right
|
|
// 144 right2 b[2]
|
|
// 145 right3 b[3]
|
|
// 146 right4 b[4]
|
|
|
|
|
|
var MoveRight =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(MoveRight, _super);
|
|
|
|
function MoveRight(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.right;
|
|
return _this;
|
|
}
|
|
|
|
MoveRight.prototype.execute = function (machine) {
|
|
machine.moveRight(this.b);
|
|
};
|
|
|
|
MoveRight.prototype.toString = function () {
|
|
return "MoveRight { b: " + this.b + " }";
|
|
};
|
|
|
|
return MoveRight;
|
|
}(DviCommand); // 147 w0 move right by w
|
|
// 148 w1 b[1] move right and set w
|
|
// 149 w2 b[2]
|
|
// 150 w3 b[3]
|
|
// 151 w4 b[4]
|
|
|
|
|
|
var MoveW =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(MoveW, _super);
|
|
|
|
function MoveW(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.w;
|
|
return _this;
|
|
}
|
|
|
|
MoveW.prototype.execute = function (machine) {
|
|
if (this.length > 1) machine.position.w = this.b;
|
|
machine.moveRight(machine.position.w);
|
|
};
|
|
|
|
MoveW.prototype.toString = function () {
|
|
if (this.length > 1) return "MoveW { b: " + this.b + " }";else return "MoveW0 { }";
|
|
};
|
|
|
|
return MoveW;
|
|
}(DviCommand); // 152 x0 move right by x
|
|
// 153 x1 b[1] move right and set x
|
|
// 154 x2 b[2]
|
|
// 155 x3 b[3]
|
|
// 156 x4 b[4]
|
|
|
|
|
|
var MoveX =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(MoveX, _super);
|
|
|
|
function MoveX(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.x;
|
|
return _this;
|
|
}
|
|
|
|
MoveX.prototype.execute = function (machine) {
|
|
if (this.length > 1) machine.position.x = this.b;
|
|
machine.moveRight(machine.position.x);
|
|
};
|
|
|
|
MoveX.prototype.toString = function () {
|
|
if (this.length > 1) return "MoveX { b: " + this.b + " }";else return "MoveX0 { }";
|
|
};
|
|
|
|
return MoveX;
|
|
}(DviCommand); // 157 down1 a[1] move down
|
|
// 158 down2 a[2]
|
|
// 159 down3 a[3]
|
|
// 160 down4 a[4]
|
|
|
|
|
|
var MoveDown =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(MoveDown, _super);
|
|
|
|
function MoveDown(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.down;
|
|
return _this;
|
|
}
|
|
|
|
MoveDown.prototype.execute = function (machine) {
|
|
machine.moveDown(this.a);
|
|
};
|
|
|
|
MoveDown.prototype.toString = function () {
|
|
return "MoveDown { a: " + this.a + " }";
|
|
};
|
|
|
|
return MoveDown;
|
|
}(DviCommand); // 161 y0 move down by y
|
|
// 162 y1 a[1] move down and set y
|
|
// 163 y2 a[2]
|
|
// 164 y3 a[3]
|
|
// 165 y4 a[4]
|
|
|
|
|
|
var MoveY =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(MoveY, _super);
|
|
|
|
function MoveY(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.y;
|
|
return _this;
|
|
}
|
|
|
|
MoveY.prototype.execute = function (machine) {
|
|
if (this.length > 1) machine.position.y = this.a;
|
|
machine.moveDown(machine.position.y);
|
|
};
|
|
|
|
MoveY.prototype.toString = function () {
|
|
if (this.length > 1) return "MoveY { a: " + this.a + " }";else return "MoveY0 { }";
|
|
};
|
|
|
|
return MoveY;
|
|
}(DviCommand); // 166 z0 move down by z
|
|
// 167 z1 a[1] move down and set z
|
|
// 168 z2 a[2]
|
|
// 169 z3 a[3]
|
|
// 170 z4 a[4]
|
|
|
|
|
|
var MoveZ =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(MoveZ, _super);
|
|
|
|
function MoveZ(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.z;
|
|
return _this;
|
|
}
|
|
|
|
MoveZ.prototype.execute = function (machine) {
|
|
if (this.length > 1) machine.position.z = this.a;
|
|
machine.moveDown(machine.position.z);
|
|
};
|
|
|
|
MoveZ.prototype.toString = function () {
|
|
if (this.length > 1) return "MoveZ { a: " + this.a + " }";else return "MoveZ0 { }";
|
|
};
|
|
|
|
return MoveZ;
|
|
}(DviCommand); // 171...234 fnt_num_i set current font to i
|
|
// 235 fnt1 k[1] set current font
|
|
// 236 fnt2 k[2]
|
|
// 237 fnt3 k[3]
|
|
// 238 fnt4 k[4]
|
|
|
|
|
|
var SetFont =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(SetFont, _super);
|
|
|
|
function SetFont(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.fnt;
|
|
return _this;
|
|
}
|
|
|
|
SetFont.prototype.execute = function (machine) {
|
|
if (machine.fonts[this.k]) {
|
|
machine.setFont(machine.fonts[this.k]);
|
|
} else throw "Could not find font " + this.k + ".";
|
|
};
|
|
|
|
SetFont.prototype.toString = function () {
|
|
return "SetFont { k: " + this.k + " }";
|
|
};
|
|
|
|
return SetFont;
|
|
}(DviCommand); // 239 xxx1 k[1], x[k] extension to DVI primitives
|
|
// 240 xxx2 k[2], x[k]
|
|
// 241 xxx3 k[3], x[k]
|
|
// 242 xxx4 k[4], x[k]
|
|
|
|
|
|
var Special =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Special, _super);
|
|
|
|
function Special(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.xxx;
|
|
_this.special = true;
|
|
return _this;
|
|
}
|
|
|
|
Special.prototype.toString = function () {
|
|
return "Special { x: '" + this.x + "' }";
|
|
};
|
|
|
|
return Special;
|
|
}(DviCommand); // 243 fnt_def1 k[1], c[4], s[4], d[4],
|
|
// a[1], l[1], n[a+l] define the meaning of a font number
|
|
// 244 fnt_def2 k[2], c[4], s[4], d[4],
|
|
// a[1], l[1], n[a+l]
|
|
// 245 fnt_def3 k[3], c[4], s[4], d[4],
|
|
// a[1], l[1], n[a+l]
|
|
// 246 fnt_def4 k[4], c[4], s[4], d[4],
|
|
// a[1], l[1], n[a+l]
|
|
|
|
|
|
var FontDefinition =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(FontDefinition, _super);
|
|
|
|
function FontDefinition(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.fnt_def;
|
|
return _this;
|
|
}
|
|
|
|
FontDefinition.prototype.execute = function (machine) {
|
|
machine.fonts[this.k] = machine.loadFont({
|
|
name: this.n,
|
|
checksum: this.c,
|
|
scaleFactor: this.s,
|
|
designSize: this.d
|
|
});
|
|
};
|
|
|
|
FontDefinition.prototype.toString = function () {
|
|
return "FontDefinition { k: " + this.k + ", n: '" + this.n + "', ... }";
|
|
};
|
|
|
|
return FontDefinition;
|
|
}(DviCommand); // 247 pre i[1], num[4], den[4], mag[4], k[1], x[k] preamble
|
|
|
|
|
|
var Preamble =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Preamble, _super);
|
|
|
|
function Preamble(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.pre;
|
|
return _this;
|
|
}
|
|
|
|
Preamble.prototype.execute = function (machine) {
|
|
if (this.num <= 0) throw Error('Invalid numerator (must be > 0)');
|
|
if (this.den <= 0) throw Error('Invalid denominator (must be > 0)');
|
|
|
|
if (this.i != 2) {
|
|
throw Error('DVI format must be 2.');
|
|
}
|
|
|
|
machine.preamble(this.num, this.den, this.mag, this.x);
|
|
};
|
|
|
|
Preamble.prototype.toString = function () {
|
|
return "Preamble { i: " + this.i + ", num: " + this.num + ", den: " + this.den + ", mag: " + this.mag + ", x: '" + this.x + "' }";
|
|
};
|
|
|
|
return Preamble;
|
|
}(DviCommand); // 248 post p[4], num[4], den[4], mag[4], l[4], u[4], s[2], t[2]
|
|
// < font definitions > postamble beginning
|
|
|
|
|
|
var Post =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Post, _super);
|
|
|
|
function Post(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.post;
|
|
return _this;
|
|
}
|
|
|
|
Post.prototype.execute = function (machine) {
|
|
machine.post(this);
|
|
};
|
|
|
|
Post.prototype.toString = function () {
|
|
return "Post { p: " + this.p + ", num: " + this.num + ", den: " + this.den + ", mag: " + this.mag + ", ... }";
|
|
};
|
|
|
|
return Post;
|
|
}(DviCommand); // 249 post_post q[4], i[1]; 223's postamble ending
|
|
|
|
|
|
var PostPost =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(PostPost, _super);
|
|
|
|
function PostPost(properties) {
|
|
var _this = _super.call(this, properties) || this;
|
|
|
|
_this.opcode = Opcode.post_post;
|
|
return _this;
|
|
}
|
|
|
|
PostPost.prototype.execute = function (machine) {
|
|
machine.postPost(this);
|
|
};
|
|
|
|
PostPost.prototype.toString = function () {
|
|
return "PostPost { q: " + this.q + ", i: " + this.i + " }";
|
|
};
|
|
|
|
return PostPost;
|
|
}(DviCommand);
|
|
|
|
function parseCommand(opcode, buffer) {
|
|
if (opcode >= Opcode.set_char && opcode < Opcode.set1) {
|
|
return new SetChar({
|
|
c: opcode,
|
|
length: 1
|
|
});
|
|
}
|
|
|
|
if (opcode >= Opcode.fnt && opcode < Opcode.fnt1) return new SetFont({
|
|
k: opcode - 171,
|
|
length: 1
|
|
}); // Technically these are undefined opcodes, but we'll pretend they are NOPs
|
|
|
|
if (opcode >= 250 && opcode <= 255) {
|
|
throw Error("Undefined opcode " + opcode);
|
|
return new Nop({
|
|
length: 1
|
|
});
|
|
}
|
|
|
|
switch (opcode) {
|
|
case Opcode.set1:
|
|
case Opcode.set2:
|
|
case Opcode.set3:
|
|
case Opcode.set4:
|
|
if (buffer.length < opcode - Opcode.set1 + 1) return undefined;
|
|
return new SetChar({
|
|
c: buffer.readUIntBE(0, opcode - Opcode.set1 + 1),
|
|
length: opcode - Opcode.set1 + 1 + 1
|
|
});
|
|
|
|
case Opcode.set_rule:
|
|
if (buffer.length < 8) return undefined;
|
|
return new SetRule({
|
|
a: buffer.readInt32BE(0),
|
|
b: buffer.readInt32BE(4),
|
|
length: 9
|
|
});
|
|
|
|
case Opcode.put_char:
|
|
case Opcode.put2:
|
|
case Opcode.put3:
|
|
case Opcode.put4:
|
|
if (buffer.length < opcode - Opcode.put_char + 1) return undefined;
|
|
return new PutChar({
|
|
c: buffer.readIntBE(0, opcode - Opcode.put_char + 1),
|
|
length: opcode - Opcode.put_char + 1 + 1
|
|
});
|
|
|
|
case Opcode.put_rule:
|
|
if (buffer.length < 8) return undefined;
|
|
return new PutRule({
|
|
a: buffer.readInt32BE(0),
|
|
b: buffer.readInt32BE(4),
|
|
length: 9
|
|
});
|
|
|
|
case Opcode.nop:
|
|
return new Nop({
|
|
length: 1
|
|
});
|
|
|
|
case Opcode.bop:
|
|
if (buffer.length < 44) return undefined;
|
|
return new Bop({
|
|
c_0: buffer.readUInt32BE(0),
|
|
c_1: buffer.readUInt32BE(4),
|
|
c_2: buffer.readUInt32BE(8),
|
|
c_3: buffer.readUInt32BE(12),
|
|
c_4: buffer.readUInt32BE(16),
|
|
c_5: buffer.readUInt32BE(20),
|
|
c_6: buffer.readUInt32BE(24),
|
|
c_7: buffer.readUInt32BE(28),
|
|
c_8: buffer.readUInt32BE(32),
|
|
c_9: buffer.readUInt32BE(36),
|
|
p: buffer.readUInt32BE(40),
|
|
length: 45
|
|
});
|
|
|
|
case Opcode.eop:
|
|
return new Eop({
|
|
length: 1
|
|
});
|
|
|
|
case Opcode.push:
|
|
return new Push({
|
|
length: 1
|
|
});
|
|
|
|
case Opcode.pop:
|
|
return new Pop({
|
|
length: 1
|
|
});
|
|
|
|
case Opcode.right:
|
|
case Opcode.right2:
|
|
case Opcode.right3:
|
|
case Opcode.right4:
|
|
if (buffer.length < opcode - Opcode.right + 1) return undefined;
|
|
return new MoveRight({
|
|
b: buffer.readIntBE(0, opcode - Opcode.right + 1),
|
|
length: opcode - Opcode.right + 1 + 1
|
|
});
|
|
|
|
case Opcode.w:
|
|
return new MoveW({
|
|
b: 0,
|
|
length: 1
|
|
});
|
|
|
|
case Opcode.w1:
|
|
case Opcode.w2:
|
|
case Opcode.w3:
|
|
case Opcode.w4:
|
|
if (buffer.length < opcode - Opcode.w) return undefined;
|
|
return new MoveW({
|
|
b: buffer.readIntBE(0, opcode - Opcode.w),
|
|
length: opcode - Opcode.w + 1
|
|
});
|
|
|
|
case Opcode.x:
|
|
return new MoveX({
|
|
b: 0,
|
|
length: 1
|
|
});
|
|
|
|
case Opcode.x1:
|
|
case Opcode.x2:
|
|
case Opcode.x3:
|
|
case Opcode.x4:
|
|
if (buffer.length < opcode - Opcode.x) return undefined;
|
|
return new MoveX({
|
|
b: buffer.readIntBE(0, opcode - Opcode.x),
|
|
length: opcode - Opcode.x + 1
|
|
});
|
|
|
|
case Opcode.down:
|
|
case Opcode.down2:
|
|
case Opcode.down3:
|
|
case Opcode.down4:
|
|
if (buffer.length < opcode - Opcode.down + 1) return undefined;
|
|
return new MoveDown({
|
|
a: buffer.readIntBE(0, opcode - Opcode.down + 1),
|
|
length: opcode - Opcode.down + 1 + 1
|
|
});
|
|
|
|
case Opcode.y:
|
|
return new MoveY({
|
|
a: 0,
|
|
length: 1
|
|
});
|
|
|
|
case Opcode.y1:
|
|
case Opcode.y2:
|
|
case Opcode.y3:
|
|
case Opcode.y4:
|
|
if (buffer.length < opcode - Opcode.y) return undefined;
|
|
return new MoveY({
|
|
a: buffer.readIntBE(0, opcode - Opcode.y),
|
|
length: opcode - Opcode.y + 1
|
|
});
|
|
|
|
case Opcode.z:
|
|
return new MoveZ({
|
|
a: 0,
|
|
length: 1
|
|
});
|
|
|
|
case Opcode.z1:
|
|
case Opcode.z2:
|
|
case Opcode.z3:
|
|
case Opcode.z4:
|
|
if (buffer.length < opcode - Opcode.z) return undefined;
|
|
return new MoveZ({
|
|
a: buffer.readIntBE(0, opcode - Opcode.z),
|
|
length: opcode - Opcode.z + 1
|
|
});
|
|
|
|
case Opcode.fnt1:
|
|
case Opcode.fnt2:
|
|
case Opcode.fnt3:
|
|
case Opcode.fnt4:
|
|
if (buffer.length < opcode - Opcode.fnt1 + 1) return undefined;
|
|
return new SetFont({
|
|
k: buffer.readIntBE(0, opcode - Opcode.fnt1 + 1),
|
|
length: opcode - Opcode.fnt1 + 1 + 1
|
|
});
|
|
|
|
case Opcode.xxx:
|
|
case Opcode.xxx2:
|
|
case Opcode.xxx3:
|
|
case Opcode.xxx4:
|
|
{
|
|
var i = opcode - Opcode.xxx + 1;
|
|
if (buffer.length < i) return undefined;
|
|
var k = buffer.readUIntBE(0, i);
|
|
if (buffer.length < i + k) return undefined;
|
|
return new Special({
|
|
x: buffer.slice(i, i + k).toString(),
|
|
length: i + k + 1
|
|
});
|
|
}
|
|
|
|
case Opcode.fnt_def:
|
|
case Opcode.fnt_def2:
|
|
case Opcode.fnt_def3:
|
|
case Opcode.fnt_def4:
|
|
{
|
|
var i = opcode - Opcode.fnt_def + 1;
|
|
if (buffer.length < i) return undefined;
|
|
var k = buffer.readIntBE(0, i);
|
|
if (buffer.length < i + 14) return undefined;
|
|
var c = buffer.readUInt32BE(i + 0);
|
|
var s = buffer.readUInt32BE(i + 4);
|
|
var d = buffer.readUInt32BE(i + 8);
|
|
var a = buffer.readUInt8(i + 12);
|
|
var l = buffer.readUInt8(i + 13);
|
|
if (buffer.length < i + 14 + a + l) return undefined;
|
|
var n = buffer.slice(i + 14, i + 14 + a + l).toString();
|
|
return new FontDefinition({
|
|
k: k,
|
|
c: c,
|
|
s: s,
|
|
d: d,
|
|
a: a,
|
|
l: l,
|
|
n: n,
|
|
length: i + 14 + a + l + 1
|
|
});
|
|
}
|
|
|
|
case Opcode.pre:
|
|
{
|
|
if (buffer.length < 14) return undefined;
|
|
var i = buffer.readUInt8(0);
|
|
var num = buffer.readUInt32BE(1);
|
|
var den = buffer.readUInt32BE(5);
|
|
var mag = buffer.readUInt32BE(9);
|
|
var k = buffer.readUInt8(13);
|
|
if (buffer.length < 14 + k) return undefined;
|
|
return new Preamble({
|
|
i: i,
|
|
num: num,
|
|
den: den,
|
|
mag: mag,
|
|
x: buffer.slice(14, 14 + k).toString(),
|
|
length: 14 + k + 1
|
|
});
|
|
}
|
|
|
|
case Opcode.post:
|
|
if (buffer.length < 4 + 4 + 4 + 4 + 4 + 4 + 2 + 2) return undefined;
|
|
return new Post({
|
|
p: buffer.readUInt32BE(0),
|
|
num: buffer.readUInt32BE(4),
|
|
den: buffer.readUInt32BE(8),
|
|
mag: buffer.readUInt32BE(12),
|
|
l: buffer.readUInt32BE(16),
|
|
u: buffer.readUInt32BE(20),
|
|
s: buffer.readUInt16BE(24),
|
|
t: buffer.readUInt16BE(26),
|
|
length: 29
|
|
});
|
|
|
|
case Opcode.post_post:
|
|
if (buffer.length < 5) return undefined;
|
|
return new PostPost({
|
|
q: buffer.readUInt32BE(0),
|
|
i: buffer.readUInt8(4),
|
|
length: 6
|
|
});
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
function dviParser(stream) {
|
|
return __asyncGenerator(this, arguments, function dviParser_1() {
|
|
var e_1, _a, buffer, isAfterPostamble, stream_1, stream_1_1, chunk, offset, opcode, command, e_1_1;
|
|
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
buffer = Buffer.alloc(0);
|
|
isAfterPostamble = false;
|
|
_b.label = 1;
|
|
|
|
case 1:
|
|
_b.trys.push([1, 12, 13, 18]);
|
|
|
|
stream_1 = __asyncValues(stream);
|
|
_b.label = 2;
|
|
|
|
case 2:
|
|
return [4
|
|
/*yield*/
|
|
, __await(stream_1.next())];
|
|
|
|
case 3:
|
|
if (!(stream_1_1 = _b.sent(), !stream_1_1.done)) return [3
|
|
/*break*/
|
|
, 11];
|
|
chunk = stream_1_1.value;
|
|
buffer = Buffer.concat([buffer, chunk]);
|
|
offset = 0;
|
|
_b.label = 4;
|
|
|
|
case 4:
|
|
if (!(offset < buffer.length)) return [3
|
|
/*break*/
|
|
, 9];
|
|
opcode = buffer.readUInt8(offset);
|
|
|
|
if (isAfterPostamble) {
|
|
if (opcode == 223) {
|
|
offset++;
|
|
return [3
|
|
/*break*/
|
|
, 4];
|
|
} else {
|
|
throw Error('Only 223 bytes are permitted after the post-postamble.');
|
|
}
|
|
}
|
|
|
|
command = parseCommand(opcode, buffer.slice(offset + 1));
|
|
if (!command) return [3
|
|
/*break*/
|
|
, 7];
|
|
return [4
|
|
/*yield*/
|
|
, __await(command)];
|
|
|
|
case 5:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 6:
|
|
_b.sent();
|
|
|
|
offset += command.length;
|
|
if (command.opcode == Opcode.post_post) isAfterPostamble = true;
|
|
return [3
|
|
/*break*/
|
|
, 8];
|
|
|
|
case 7:
|
|
return [3
|
|
/*break*/
|
|
, 9];
|
|
|
|
case 8:
|
|
return [3
|
|
/*break*/
|
|
, 4];
|
|
|
|
case 9:
|
|
buffer = buffer.slice(offset);
|
|
_b.label = 10;
|
|
|
|
case 10:
|
|
return [3
|
|
/*break*/
|
|
, 2];
|
|
|
|
case 11:
|
|
return [3
|
|
/*break*/
|
|
, 18];
|
|
|
|
case 12:
|
|
e_1_1 = _b.sent();
|
|
e_1 = {
|
|
error: e_1_1
|
|
};
|
|
return [3
|
|
/*break*/
|
|
, 18];
|
|
|
|
case 13:
|
|
_b.trys.push([13,, 16, 17]);
|
|
|
|
if (!(stream_1_1 && !stream_1_1.done && (_a = stream_1.return))) return [3
|
|
/*break*/
|
|
, 15];
|
|
return [4
|
|
/*yield*/
|
|
, __await(_a.call(stream_1))];
|
|
|
|
case 14:
|
|
_b.sent();
|
|
|
|
_b.label = 15;
|
|
|
|
case 15:
|
|
return [3
|
|
/*break*/
|
|
, 17];
|
|
|
|
case 16:
|
|
if (e_1) throw e_1.error;
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 17:
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 18:
|
|
return [2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.dviParser = dviParser;
|
|
|
|
function execute(commands, machine) {
|
|
var commands_1, commands_1_1;
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var e_2, _a, command, e_2_1;
|
|
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_b.trys.push([0, 5, 6, 11]);
|
|
|
|
commands_1 = __asyncValues(commands);
|
|
_b.label = 1;
|
|
|
|
case 1:
|
|
return [4
|
|
/*yield*/
|
|
, commands_1.next()];
|
|
|
|
case 2:
|
|
if (!(commands_1_1 = _b.sent(), !commands_1_1.done)) return [3
|
|
/*break*/
|
|
, 4];
|
|
command = commands_1_1.value; // console.log(command.toString());
|
|
|
|
command.execute(machine);
|
|
_b.label = 3;
|
|
|
|
case 3:
|
|
return [3
|
|
/*break*/
|
|
, 1];
|
|
|
|
case 4:
|
|
return [3
|
|
/*break*/
|
|
, 11];
|
|
|
|
case 5:
|
|
e_2_1 = _b.sent();
|
|
e_2 = {
|
|
error: e_2_1
|
|
};
|
|
return [3
|
|
/*break*/
|
|
, 11];
|
|
|
|
case 6:
|
|
_b.trys.push([6,, 9, 10]);
|
|
|
|
if (!(commands_1_1 && !commands_1_1.done && (_a = commands_1.return))) return [3
|
|
/*break*/
|
|
, 8];
|
|
return [4
|
|
/*yield*/
|
|
, _a.call(commands_1)];
|
|
|
|
case 7:
|
|
_b.sent();
|
|
|
|
_b.label = 8;
|
|
|
|
case 8:
|
|
return [3
|
|
/*break*/
|
|
, 10];
|
|
|
|
case 9:
|
|
if (e_2) throw e_2.error;
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 10:
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 11:
|
|
return [2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.execute = execute;
|
|
|
|
function merge(commands, filter, merge) {
|
|
return __asyncGenerator(this, arguments, function merge_1() {
|
|
var e_3, _a, queue, commands_2, commands_2_1, command, e_3_1;
|
|
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
queue = [];
|
|
_b.label = 1;
|
|
|
|
case 1:
|
|
_b.trys.push([1, 12, 13, 18]);
|
|
|
|
commands_2 = __asyncValues(commands);
|
|
_b.label = 2;
|
|
|
|
case 2:
|
|
return [4
|
|
/*yield*/
|
|
, __await(commands_2.next())];
|
|
|
|
case 3:
|
|
if (!(commands_2_1 = _b.sent(), !commands_2_1.done)) return [3
|
|
/*break*/
|
|
, 11];
|
|
command = commands_2_1.value;
|
|
if (!filter(command)) return [3
|
|
/*break*/
|
|
, 4];
|
|
queue.push(command);
|
|
return [3
|
|
/*break*/
|
|
, 10];
|
|
|
|
case 4:
|
|
if (!(queue.length > 0)) return [3
|
|
/*break*/
|
|
, 7];
|
|
return [5
|
|
/*yield**/
|
|
, __values(__asyncDelegator(__asyncValues(merge(queue))))];
|
|
|
|
case 5:
|
|
return [4
|
|
/*yield*/
|
|
, __await.apply(void 0, [_b.sent()])];
|
|
|
|
case 6:
|
|
_b.sent();
|
|
|
|
queue = [];
|
|
_b.label = 7;
|
|
|
|
case 7:
|
|
return [4
|
|
/*yield*/
|
|
, __await(command)];
|
|
|
|
case 8:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 9:
|
|
_b.sent();
|
|
|
|
_b.label = 10;
|
|
|
|
case 10:
|
|
return [3
|
|
/*break*/
|
|
, 2];
|
|
|
|
case 11:
|
|
return [3
|
|
/*break*/
|
|
, 18];
|
|
|
|
case 12:
|
|
e_3_1 = _b.sent();
|
|
e_3 = {
|
|
error: e_3_1
|
|
};
|
|
return [3
|
|
/*break*/
|
|
, 18];
|
|
|
|
case 13:
|
|
_b.trys.push([13,, 16, 17]);
|
|
|
|
if (!(commands_2_1 && !commands_2_1.done && (_a = commands_2.return))) return [3
|
|
/*break*/
|
|
, 15];
|
|
return [4
|
|
/*yield*/
|
|
, __await(_a.call(commands_2))];
|
|
|
|
case 14:
|
|
_b.sent();
|
|
|
|
_b.label = 15;
|
|
|
|
case 15:
|
|
return [3
|
|
/*break*/
|
|
, 17];
|
|
|
|
case 16:
|
|
if (e_3) throw e_3.error;
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 17:
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 18:
|
|
if (!(queue.length > 0)) return [3
|
|
/*break*/
|
|
, 21];
|
|
return [5
|
|
/*yield**/
|
|
, __values(__asyncDelegator(__asyncValues(merge(queue))))];
|
|
|
|
case 19:
|
|
return [4
|
|
/*yield*/
|
|
, __await.apply(void 0, [_b.sent()])];
|
|
|
|
case 20:
|
|
_b.sent();
|
|
|
|
_b.label = 21;
|
|
|
|
case 21:
|
|
return [2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.merge = merge;
|
|
|
|
function mergeText(commands) {
|
|
return merge(commands, function (command) {
|
|
return command instanceof SetChar;
|
|
}, function (queue) {
|
|
var text;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
text = Buffer.from(queue.map(function (command) {
|
|
return command.c;
|
|
}));
|
|
return [4
|
|
/*yield*/
|
|
, new SetText({
|
|
t: text
|
|
})];
|
|
|
|
case 1:
|
|
_a.sent();
|
|
|
|
return [2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.mergeText = mergeText;
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../tikzjax/node_modules/buffer/index.js */ "./node_modules/buffer/index.js").Buffer))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/specials/color.js":
|
|
/*!*****************************************!*\
|
|
!*** ../dvi2html/lib/specials/color.js ***!
|
|
\*****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var __extends = this && this.__extends || function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf || {
|
|
__proto__: []
|
|
} instanceof Array && function (d, b) {
|
|
d.__proto__ = b;
|
|
} || function (d, b) {
|
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
};
|
|
|
|
return extendStatics(d, b);
|
|
};
|
|
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
}();
|
|
|
|
var __generator = this && this.__generator || function (thisArg, body) {
|
|
var _ = {
|
|
label: 0,
|
|
sent: function () {
|
|
if (t[0] & 1) throw t[1];
|
|
return t[1];
|
|
},
|
|
trys: [],
|
|
ops: []
|
|
},
|
|
f,
|
|
y,
|
|
t,
|
|
g;
|
|
return g = {
|
|
next: verb(0),
|
|
"throw": verb(1),
|
|
"return": verb(2)
|
|
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
return this;
|
|
}), g;
|
|
|
|
function verb(n) {
|
|
return function (v) {
|
|
return step([n, v]);
|
|
};
|
|
}
|
|
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
|
|
while (_) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
|
|
switch (op[0]) {
|
|
case 0:
|
|
case 1:
|
|
t = op;
|
|
break;
|
|
|
|
case 4:
|
|
_.label++;
|
|
return {
|
|
value: op[1],
|
|
done: false
|
|
};
|
|
|
|
case 5:
|
|
_.label++;
|
|
y = op[1];
|
|
op = [0];
|
|
continue;
|
|
|
|
case 7:
|
|
op = _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
_ = 0;
|
|
continue;
|
|
}
|
|
|
|
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
_.label = op[1];
|
|
break;
|
|
}
|
|
|
|
if (op[0] === 6 && _.label < t[1]) {
|
|
_.label = t[1];
|
|
t = op;
|
|
break;
|
|
}
|
|
|
|
if (t && _.label < t[2]) {
|
|
_.label = t[2];
|
|
|
|
_.ops.push(op);
|
|
|
|
break;
|
|
}
|
|
|
|
if (t[2]) _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
}
|
|
|
|
op = body.call(thisArg, _);
|
|
} catch (e) {
|
|
op = [6, e];
|
|
y = 0;
|
|
} finally {
|
|
f = t = 0;
|
|
}
|
|
|
|
if (op[0] & 5) throw op[1];
|
|
return {
|
|
value: op[0] ? op[1] : void 0,
|
|
done: true
|
|
};
|
|
}
|
|
};
|
|
|
|
var __asyncValues = this && this.__asyncValues || function (o) {
|
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
var m = o[Symbol.asyncIterator],
|
|
i;
|
|
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
}, i);
|
|
|
|
function verb(n) {
|
|
i[n] = o[n] && function (v) {
|
|
return new Promise(function (resolve, reject) {
|
|
v = o[n](v), settle(resolve, reject, v.done, v.value);
|
|
});
|
|
};
|
|
}
|
|
|
|
function settle(resolve, reject, d, v) {
|
|
Promise.resolve(v).then(function (v) {
|
|
resolve({
|
|
value: v,
|
|
done: d
|
|
});
|
|
}, reject);
|
|
}
|
|
};
|
|
|
|
var __await = this && this.__await || function (v) {
|
|
return this instanceof __await ? (this.v = v, this) : new __await(v);
|
|
};
|
|
|
|
var __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) {
|
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
var g = generator.apply(thisArg, _arguments || []),
|
|
i,
|
|
q = [];
|
|
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
}, i;
|
|
|
|
function verb(n) {
|
|
if (g[n]) i[n] = function (v) {
|
|
return new Promise(function (a, b) {
|
|
q.push([n, v, a, b]) > 1 || resume(n, v);
|
|
});
|
|
};
|
|
}
|
|
|
|
function resume(n, v) {
|
|
try {
|
|
step(g[n](v));
|
|
} catch (e) {
|
|
settle(q[0][3], e);
|
|
}
|
|
}
|
|
|
|
function step(r) {
|
|
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
|
|
}
|
|
|
|
function fulfill(value) {
|
|
resume("next", value);
|
|
}
|
|
|
|
function reject(value) {
|
|
resume("throw", value);
|
|
}
|
|
|
|
function settle(f, v) {
|
|
if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
|
|
}
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var parser_1 = __webpack_require__(/*! ../parser */ "../dvi2html/lib/parser.js");
|
|
|
|
var PushColor =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(PushColor, _super);
|
|
|
|
function PushColor(color) {
|
|
var _this = _super.call(this, {}) || this;
|
|
|
|
_this.color = color;
|
|
return _this;
|
|
}
|
|
|
|
PushColor.prototype.execute = function (machine) {
|
|
machine.pushColor(this.color);
|
|
};
|
|
|
|
PushColor.prototype.toString = function () {
|
|
return "PushColor { color: '" + this.color + "' }";
|
|
};
|
|
|
|
return PushColor;
|
|
}(parser_1.DviCommand);
|
|
|
|
var PopColor =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(PopColor, _super);
|
|
|
|
function PopColor() {
|
|
return _super.call(this, {}) || this;
|
|
}
|
|
|
|
PopColor.prototype.execute = function (machine) {
|
|
machine.popColor();
|
|
};
|
|
|
|
PopColor.prototype.toString = function () {
|
|
return "PopColor { }";
|
|
};
|
|
|
|
return PopColor;
|
|
}(parser_1.DviCommand);
|
|
|
|
function intToHex(n) {
|
|
return ("00" + Math.round(n).toString(16)).substr(-2);
|
|
}
|
|
|
|
function texColor(name) {
|
|
if (name == 'gray 0') return 'black';
|
|
if (name == 'gray 1') return 'white';
|
|
|
|
if (name.startsWith('rgb ')) {
|
|
return '#' + name.split(' ').slice(1).map(function (x) {
|
|
return intToHex(parseFloat(x) * 255);
|
|
}).join('');
|
|
}
|
|
|
|
if (name.startsWith('gray ')) {
|
|
var x = name.split(' ')[1];
|
|
return texColor('rgb ' + x + ' ' + x + ' ' + x);
|
|
}
|
|
|
|
return 'black';
|
|
}
|
|
|
|
function default_1(commands) {
|
|
return __asyncGenerator(this, arguments, function () {
|
|
var e_1, _a, queue, commands_1, commands_1_1, command, color, e_1_1;
|
|
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
queue = [];
|
|
_b.label = 1;
|
|
|
|
case 1:
|
|
_b.trys.push([1, 17, 18, 23]);
|
|
|
|
commands_1 = __asyncValues(commands);
|
|
_b.label = 2;
|
|
|
|
case 2:
|
|
return [4
|
|
/*yield*/
|
|
, __await(commands_1.next())];
|
|
|
|
case 3:
|
|
if (!(commands_1_1 = _b.sent(), !commands_1_1.done)) return [3
|
|
/*break*/
|
|
, 16];
|
|
command = commands_1_1.value;
|
|
if (!!command.special) return [3
|
|
/*break*/
|
|
, 6];
|
|
return [4
|
|
/*yield*/
|
|
, __await(command)];
|
|
|
|
case 4:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 5:
|
|
_b.sent();
|
|
|
|
return [3
|
|
/*break*/
|
|
, 15];
|
|
|
|
case 6:
|
|
if (!!command.x.startsWith('color ')) return [3
|
|
/*break*/
|
|
, 9];
|
|
return [4
|
|
/*yield*/
|
|
, __await(command)];
|
|
|
|
case 7:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 8:
|
|
_b.sent();
|
|
|
|
return [3
|
|
/*break*/
|
|
, 15];
|
|
|
|
case 9:
|
|
if (!command.x.startsWith('color push ')) return [3
|
|
/*break*/
|
|
, 12];
|
|
color = texColor(command.x.replace(/^color push /, ''));
|
|
return [4
|
|
/*yield*/
|
|
, __await(new PushColor(color))];
|
|
|
|
case 10:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 11:
|
|
_b.sent();
|
|
|
|
_b.label = 12;
|
|
|
|
case 12:
|
|
if (!command.x.startsWith('color pop')) return [3
|
|
/*break*/
|
|
, 15];
|
|
return [4
|
|
/*yield*/
|
|
, __await(new PopColor())];
|
|
|
|
case 13:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 14:
|
|
_b.sent();
|
|
|
|
_b.label = 15;
|
|
|
|
case 15:
|
|
return [3
|
|
/*break*/
|
|
, 2];
|
|
|
|
case 16:
|
|
return [3
|
|
/*break*/
|
|
, 23];
|
|
|
|
case 17:
|
|
e_1_1 = _b.sent();
|
|
e_1 = {
|
|
error: e_1_1
|
|
};
|
|
return [3
|
|
/*break*/
|
|
, 23];
|
|
|
|
case 18:
|
|
_b.trys.push([18,, 21, 22]);
|
|
|
|
if (!(commands_1_1 && !commands_1_1.done && (_a = commands_1.return))) return [3
|
|
/*break*/
|
|
, 20];
|
|
return [4
|
|
/*yield*/
|
|
, __await(_a.call(commands_1))];
|
|
|
|
case 19:
|
|
_b.sent();
|
|
|
|
_b.label = 20;
|
|
|
|
case 20:
|
|
return [3
|
|
/*break*/
|
|
, 22];
|
|
|
|
case 21:
|
|
if (e_1) throw e_1.error;
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 22:
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 23:
|
|
return [2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.default = default_1;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/specials/papersize.js":
|
|
/*!*********************************************!*\
|
|
!*** ../dvi2html/lib/specials/papersize.js ***!
|
|
\*********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var __extends = this && this.__extends || function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf || {
|
|
__proto__: []
|
|
} instanceof Array && function (d, b) {
|
|
d.__proto__ = b;
|
|
} || function (d, b) {
|
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
};
|
|
|
|
return extendStatics(d, b);
|
|
};
|
|
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
}();
|
|
|
|
var __generator = this && this.__generator || function (thisArg, body) {
|
|
var _ = {
|
|
label: 0,
|
|
sent: function () {
|
|
if (t[0] & 1) throw t[1];
|
|
return t[1];
|
|
},
|
|
trys: [],
|
|
ops: []
|
|
},
|
|
f,
|
|
y,
|
|
t,
|
|
g;
|
|
return g = {
|
|
next: verb(0),
|
|
"throw": verb(1),
|
|
"return": verb(2)
|
|
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
return this;
|
|
}), g;
|
|
|
|
function verb(n) {
|
|
return function (v) {
|
|
return step([n, v]);
|
|
};
|
|
}
|
|
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
|
|
while (_) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
|
|
switch (op[0]) {
|
|
case 0:
|
|
case 1:
|
|
t = op;
|
|
break;
|
|
|
|
case 4:
|
|
_.label++;
|
|
return {
|
|
value: op[1],
|
|
done: false
|
|
};
|
|
|
|
case 5:
|
|
_.label++;
|
|
y = op[1];
|
|
op = [0];
|
|
continue;
|
|
|
|
case 7:
|
|
op = _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
_ = 0;
|
|
continue;
|
|
}
|
|
|
|
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
_.label = op[1];
|
|
break;
|
|
}
|
|
|
|
if (op[0] === 6 && _.label < t[1]) {
|
|
_.label = t[1];
|
|
t = op;
|
|
break;
|
|
}
|
|
|
|
if (t && _.label < t[2]) {
|
|
_.label = t[2];
|
|
|
|
_.ops.push(op);
|
|
|
|
break;
|
|
}
|
|
|
|
if (t[2]) _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
}
|
|
|
|
op = body.call(thisArg, _);
|
|
} catch (e) {
|
|
op = [6, e];
|
|
y = 0;
|
|
} finally {
|
|
f = t = 0;
|
|
}
|
|
|
|
if (op[0] & 5) throw op[1];
|
|
return {
|
|
value: op[0] ? op[1] : void 0,
|
|
done: true
|
|
};
|
|
}
|
|
};
|
|
|
|
var __asyncValues = this && this.__asyncValues || function (o) {
|
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
var m = o[Symbol.asyncIterator],
|
|
i;
|
|
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
}, i);
|
|
|
|
function verb(n) {
|
|
i[n] = o[n] && function (v) {
|
|
return new Promise(function (resolve, reject) {
|
|
v = o[n](v), settle(resolve, reject, v.done, v.value);
|
|
});
|
|
};
|
|
}
|
|
|
|
function settle(resolve, reject, d, v) {
|
|
Promise.resolve(v).then(function (v) {
|
|
resolve({
|
|
value: v,
|
|
done: d
|
|
});
|
|
}, reject);
|
|
}
|
|
};
|
|
|
|
var __await = this && this.__await || function (v) {
|
|
return this instanceof __await ? (this.v = v, this) : new __await(v);
|
|
};
|
|
|
|
var __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) {
|
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
var g = generator.apply(thisArg, _arguments || []),
|
|
i,
|
|
q = [];
|
|
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
}, i;
|
|
|
|
function verb(n) {
|
|
if (g[n]) i[n] = function (v) {
|
|
return new Promise(function (a, b) {
|
|
q.push([n, v, a, b]) > 1 || resume(n, v);
|
|
});
|
|
};
|
|
}
|
|
|
|
function resume(n, v) {
|
|
try {
|
|
step(g[n](v));
|
|
} catch (e) {
|
|
settle(q[0][3], e);
|
|
}
|
|
}
|
|
|
|
function step(r) {
|
|
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
|
|
}
|
|
|
|
function fulfill(value) {
|
|
resume("next", value);
|
|
}
|
|
|
|
function reject(value) {
|
|
resume("throw", value);
|
|
}
|
|
|
|
function settle(f, v) {
|
|
if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
|
|
}
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var parser_1 = __webpack_require__(/*! ../parser */ "../dvi2html/lib/parser.js");
|
|
|
|
var Papersize =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(Papersize, _super);
|
|
|
|
function Papersize(width, height) {
|
|
var _this = _super.call(this, {}) || this;
|
|
|
|
_this.width = width;
|
|
_this.height = height;
|
|
return _this;
|
|
}
|
|
|
|
Papersize.prototype.execute = function (machine) {
|
|
machine.setPapersize(this.width, this.height);
|
|
};
|
|
|
|
Papersize.prototype.toString = function () {
|
|
return "Papersize { width: " + this.width + ", height: " + this.height + " }";
|
|
};
|
|
|
|
return Papersize;
|
|
}(parser_1.DviCommand);
|
|
|
|
function default_1(commands) {
|
|
return __asyncGenerator(this, arguments, function () {
|
|
var e_1, _a, commands_1, commands_1_1, command, sizes, width, height, e_1_1;
|
|
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_b.trys.push([0, 13, 14, 19]);
|
|
|
|
commands_1 = __asyncValues(commands);
|
|
_b.label = 1;
|
|
|
|
case 1:
|
|
return [4
|
|
/*yield*/
|
|
, __await(commands_1.next())];
|
|
|
|
case 2:
|
|
if (!(commands_1_1 = _b.sent(), !commands_1_1.done)) return [3
|
|
/*break*/
|
|
, 12];
|
|
command = commands_1_1.value;
|
|
if (!!command.special) return [3
|
|
/*break*/
|
|
, 5];
|
|
return [4
|
|
/*yield*/
|
|
, __await(command)];
|
|
|
|
case 3:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 4:
|
|
_b.sent();
|
|
|
|
return [3
|
|
/*break*/
|
|
, 11];
|
|
|
|
case 5:
|
|
if (!!command.x.startsWith('papersize=')) return [3
|
|
/*break*/
|
|
, 8];
|
|
return [4
|
|
/*yield*/
|
|
, __await(command)];
|
|
|
|
case 6:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 7:
|
|
_b.sent();
|
|
|
|
return [3
|
|
/*break*/
|
|
, 11];
|
|
|
|
case 8:
|
|
sizes = command.x.replace(/^papersize=/, '').split(',');
|
|
if (sizes.length != 2) throw Error('Papersize special requires two arguments.');
|
|
if (!sizes[0].endsWith('pt')) throw Error('Papersize special width must be in points.');
|
|
if (!sizes[1].endsWith('pt')) throw Error('Papersize special height must be in points.');
|
|
width = parseFloat(sizes[0].replace(/pt$/, ''));
|
|
height = parseFloat(sizes[1].replace(/pt$/, ''));
|
|
return [4
|
|
/*yield*/
|
|
, __await(new Papersize(width, height))];
|
|
|
|
case 9:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 10:
|
|
_b.sent();
|
|
|
|
_b.label = 11;
|
|
|
|
case 11:
|
|
return [3
|
|
/*break*/
|
|
, 1];
|
|
|
|
case 12:
|
|
return [3
|
|
/*break*/
|
|
, 19];
|
|
|
|
case 13:
|
|
e_1_1 = _b.sent();
|
|
e_1 = {
|
|
error: e_1_1
|
|
};
|
|
return [3
|
|
/*break*/
|
|
, 19];
|
|
|
|
case 14:
|
|
_b.trys.push([14,, 17, 18]);
|
|
|
|
if (!(commands_1_1 && !commands_1_1.done && (_a = commands_1.return))) return [3
|
|
/*break*/
|
|
, 16];
|
|
return [4
|
|
/*yield*/
|
|
, __await(_a.call(commands_1))];
|
|
|
|
case 15:
|
|
_b.sent();
|
|
|
|
_b.label = 16;
|
|
|
|
case 16:
|
|
return [3
|
|
/*break*/
|
|
, 18];
|
|
|
|
case 17:
|
|
if (e_1) throw e_1.error;
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 18:
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 19:
|
|
return [2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.default = default_1;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/specials/svg.js":
|
|
/*!***************************************!*\
|
|
!*** ../dvi2html/lib/specials/svg.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var __extends = this && this.__extends || function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf || {
|
|
__proto__: []
|
|
} instanceof Array && function (d, b) {
|
|
d.__proto__ = b;
|
|
} || function (d, b) {
|
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
};
|
|
|
|
return extendStatics(d, b);
|
|
};
|
|
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
}();
|
|
|
|
var __generator = this && this.__generator || function (thisArg, body) {
|
|
var _ = {
|
|
label: 0,
|
|
sent: function () {
|
|
if (t[0] & 1) throw t[1];
|
|
return t[1];
|
|
},
|
|
trys: [],
|
|
ops: []
|
|
},
|
|
f,
|
|
y,
|
|
t,
|
|
g;
|
|
return g = {
|
|
next: verb(0),
|
|
"throw": verb(1),
|
|
"return": verb(2)
|
|
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
return this;
|
|
}), g;
|
|
|
|
function verb(n) {
|
|
return function (v) {
|
|
return step([n, v]);
|
|
};
|
|
}
|
|
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
|
|
while (_) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
|
|
switch (op[0]) {
|
|
case 0:
|
|
case 1:
|
|
t = op;
|
|
break;
|
|
|
|
case 4:
|
|
_.label++;
|
|
return {
|
|
value: op[1],
|
|
done: false
|
|
};
|
|
|
|
case 5:
|
|
_.label++;
|
|
y = op[1];
|
|
op = [0];
|
|
continue;
|
|
|
|
case 7:
|
|
op = _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
_ = 0;
|
|
continue;
|
|
}
|
|
|
|
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
_.label = op[1];
|
|
break;
|
|
}
|
|
|
|
if (op[0] === 6 && _.label < t[1]) {
|
|
_.label = t[1];
|
|
t = op;
|
|
break;
|
|
}
|
|
|
|
if (t && _.label < t[2]) {
|
|
_.label = t[2];
|
|
|
|
_.ops.push(op);
|
|
|
|
break;
|
|
}
|
|
|
|
if (t[2]) _.ops.pop();
|
|
|
|
_.trys.pop();
|
|
|
|
continue;
|
|
}
|
|
|
|
op = body.call(thisArg, _);
|
|
} catch (e) {
|
|
op = [6, e];
|
|
y = 0;
|
|
} finally {
|
|
f = t = 0;
|
|
}
|
|
|
|
if (op[0] & 5) throw op[1];
|
|
return {
|
|
value: op[0] ? op[1] : void 0,
|
|
done: true
|
|
};
|
|
}
|
|
};
|
|
|
|
var __asyncValues = this && this.__asyncValues || function (o) {
|
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
var m = o[Symbol.asyncIterator],
|
|
i;
|
|
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
}, i);
|
|
|
|
function verb(n) {
|
|
i[n] = o[n] && function (v) {
|
|
return new Promise(function (resolve, reject) {
|
|
v = o[n](v), settle(resolve, reject, v.done, v.value);
|
|
});
|
|
};
|
|
}
|
|
|
|
function settle(resolve, reject, d, v) {
|
|
Promise.resolve(v).then(function (v) {
|
|
resolve({
|
|
value: v,
|
|
done: d
|
|
});
|
|
}, reject);
|
|
}
|
|
};
|
|
|
|
var __await = this && this.__await || function (v) {
|
|
return this instanceof __await ? (this.v = v, this) : new __await(v);
|
|
};
|
|
|
|
var __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) {
|
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
var g = generator.apply(thisArg, _arguments || []),
|
|
i,
|
|
q = [];
|
|
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
}, i;
|
|
|
|
function verb(n) {
|
|
if (g[n]) i[n] = function (v) {
|
|
return new Promise(function (a, b) {
|
|
q.push([n, v, a, b]) > 1 || resume(n, v);
|
|
});
|
|
};
|
|
}
|
|
|
|
function resume(n, v) {
|
|
try {
|
|
step(g[n](v));
|
|
} catch (e) {
|
|
settle(q[0][3], e);
|
|
}
|
|
}
|
|
|
|
function step(r) {
|
|
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
|
|
}
|
|
|
|
function fulfill(value) {
|
|
resume("next", value);
|
|
}
|
|
|
|
function reject(value) {
|
|
resume("throw", value);
|
|
}
|
|
|
|
function settle(f, v) {
|
|
if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
|
|
}
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var parser_1 = __webpack_require__(/*! ../parser */ "../dvi2html/lib/parser.js");
|
|
|
|
var SVG =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(SVG, _super);
|
|
|
|
function SVG(svg) {
|
|
var _this = _super.call(this, {}) || this;
|
|
|
|
_this.svg = svg;
|
|
return _this;
|
|
}
|
|
|
|
SVG.prototype.execute = function (machine) {
|
|
machine.putSVG(this.svg);
|
|
};
|
|
|
|
return SVG;
|
|
}(parser_1.DviCommand);
|
|
|
|
function specialsToSVG(commands) {
|
|
return __asyncGenerator(this, arguments, function specialsToSVG_1() {
|
|
var e_1, _a, commands_1, commands_1_1, command, svg, e_1_1;
|
|
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_b.trys.push([0, 13, 14, 19]);
|
|
|
|
commands_1 = __asyncValues(commands);
|
|
_b.label = 1;
|
|
|
|
case 1:
|
|
return [4
|
|
/*yield*/
|
|
, __await(commands_1.next())];
|
|
|
|
case 2:
|
|
if (!(commands_1_1 = _b.sent(), !commands_1_1.done)) return [3
|
|
/*break*/
|
|
, 12];
|
|
command = commands_1_1.value;
|
|
if (!!command.special) return [3
|
|
/*break*/
|
|
, 5];
|
|
return [4
|
|
/*yield*/
|
|
, __await(command)];
|
|
|
|
case 3:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 4:
|
|
_b.sent();
|
|
|
|
return [3
|
|
/*break*/
|
|
, 11];
|
|
|
|
case 5:
|
|
if (!!command.x.startsWith('dvisvgm:raw ')) return [3
|
|
/*break*/
|
|
, 8];
|
|
return [4
|
|
/*yield*/
|
|
, __await(command)];
|
|
|
|
case 6:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 7:
|
|
_b.sent();
|
|
|
|
return [3
|
|
/*break*/
|
|
, 11];
|
|
|
|
case 8:
|
|
svg = command.x.replace(/^dvisvgm:raw /, '');
|
|
return [4
|
|
/*yield*/
|
|
, __await(new SVG(svg))];
|
|
|
|
case 9:
|
|
return [4
|
|
/*yield*/
|
|
, _b.sent()];
|
|
|
|
case 10:
|
|
_b.sent();
|
|
|
|
_b.label = 11;
|
|
|
|
case 11:
|
|
return [3
|
|
/*break*/
|
|
, 1];
|
|
|
|
case 12:
|
|
return [3
|
|
/*break*/
|
|
, 19];
|
|
|
|
case 13:
|
|
e_1_1 = _b.sent();
|
|
e_1 = {
|
|
error: e_1_1
|
|
};
|
|
return [3
|
|
/*break*/
|
|
, 19];
|
|
|
|
case 14:
|
|
_b.trys.push([14,, 17, 18]);
|
|
|
|
if (!(commands_1_1 && !commands_1_1.done && (_a = commands_1.return))) return [3
|
|
/*break*/
|
|
, 16];
|
|
return [4
|
|
/*yield*/
|
|
, __await(_a.call(commands_1))];
|
|
|
|
case 15:
|
|
_b.sent();
|
|
|
|
_b.label = 16;
|
|
|
|
case 16:
|
|
return [3
|
|
/*break*/
|
|
, 18];
|
|
|
|
case 17:
|
|
if (e_1) throw e_1.error;
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 18:
|
|
return [7
|
|
/*endfinally*/
|
|
];
|
|
|
|
case 19:
|
|
return [2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function default_1(commands) {
|
|
return parser_1.merge(specialsToSVG(commands), function (command) {
|
|
return command.svg;
|
|
}, function (commands) {
|
|
var svg;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
svg = commands.map(function (command) {
|
|
return command.svg;
|
|
}).join('').replace(/{\?nl}/g, "\n");
|
|
return [4
|
|
/*yield*/
|
|
, new SVG(svg)];
|
|
|
|
case 1:
|
|
_a.sent();
|
|
|
|
return [2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.default = default_1;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/text.js":
|
|
/*!*******************************!*\
|
|
!*** ../dvi2html/lib/text.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var __extends = this && this.__extends || function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf || {
|
|
__proto__: []
|
|
} instanceof Array && function (d, b) {
|
|
d.__proto__ = b;
|
|
} || function (d, b) {
|
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
};
|
|
|
|
return extendStatics(d, b);
|
|
};
|
|
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
}();
|
|
|
|
var __values = this && this.__values || function (o) {
|
|
var m = typeof Symbol === "function" && o[Symbol.iterator],
|
|
i = 0;
|
|
if (m) return m.call(o);
|
|
return {
|
|
next: function () {
|
|
if (o && i >= o.length) o = void 0;
|
|
return {
|
|
value: o && o[i++],
|
|
done: !o
|
|
};
|
|
}
|
|
};
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var machine_1 = __webpack_require__(/*! ./machine */ "../dvi2html/lib/machine.js");
|
|
|
|
var epsilon = 0.00001;
|
|
|
|
var TextMachine =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(TextMachine, _super);
|
|
|
|
function TextMachine(o) {
|
|
var _this = _super.call(this) || this;
|
|
|
|
_this.output = o;
|
|
_this.snippets = [];
|
|
return _this;
|
|
}
|
|
|
|
TextMachine.prototype.putRule = function (rule) {};
|
|
|
|
TextMachine.prototype.beginPage = function (page) {
|
|
_super.prototype.beginPage.call(this, page);
|
|
|
|
this.snippets = [];
|
|
};
|
|
|
|
TextMachine.prototype.endPage = function () {
|
|
var e_1, _a;
|
|
|
|
this.snippets = this.snippets.sort(function (a, b) {
|
|
if (a[1] < b[1]) return -1;
|
|
if (a[1] > b[1]) return 1;
|
|
if (a[0] < b[0]) return -1;
|
|
if (a[0] > b[0]) return 1;
|
|
return 0;
|
|
});
|
|
if (this.snippets.length == 0) return;
|
|
var previousH = this.snippets[0][0];
|
|
var previousV = this.snippets[0][1];
|
|
|
|
try {
|
|
for (var _b = __values(this.snippets), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
var snippet = _c.value;
|
|
var h = snippet[0];
|
|
var v = snippet[1];
|
|
var text = snippet[2];
|
|
if (v > previousV) this.output.write("\n");
|
|
if (h > previousH + epsilon) this.output.write(" ");
|
|
this.output.write(text.toString());
|
|
previousV = v;
|
|
previousH = h;
|
|
}
|
|
} catch (e_1_1) {
|
|
e_1 = {
|
|
error: e_1_1
|
|
};
|
|
} finally {
|
|
try {
|
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
} finally {
|
|
if (e_1) throw e_1.error;
|
|
}
|
|
}
|
|
};
|
|
|
|
TextMachine.prototype.putText = function (text) {
|
|
this.snippets.push([this.position.h, this.position.v, text]);
|
|
return epsilon;
|
|
};
|
|
|
|
TextMachine.prototype.postPost = function (p) {
|
|
this.output.end();
|
|
};
|
|
|
|
return TextMachine;
|
|
}(machine_1.Machine);
|
|
|
|
exports.default = TextMachine;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/tfm/fonts.json":
|
|
/*!**************************************!*\
|
|
!*** ../dvi2html/lib/tfm/fonts.json ***!
|
|
\**************************************/
|
|
/*! exports provided: cmb10, cmbsy10, cmbsy6, cmbsy7, cmbsy8, cmbsy9, cmbx10, cmbx12, cmbx5, cmbx6, cmbx7, cmbx8, cmbx9, cmbxsl10, cmbxti10, cmcsc10, cmcsc8, cmcsc9, cmdunh10, cmex10, cmex7, cmex8, cmex9, cmff10, cmfi10, cmfib8, cminch, cmitt10, cmmi10, cmmi12, cmmi5, cmmi6, cmmi7, cmmi8, cmmi9, cmmib10, cmmib6, cmmib7, cmmib8, cmmib9, cmr10, cmr12, cmr17, cmr5, cmr6, cmr7, cmr8, cmr9, cmsl10, cmsl12, cmsl8, cmsl9, cmsltt10, cmss10, cmss12, cmss17, cmss8, cmss9, cmssbx10, cmssdc10, cmssi10, cmssi12, cmssi17, cmssi8, cmssi9, cmssq8, cmssqi8, cmsy10, cmsy5, cmsy6, cmsy7, cmsy8, cmsy9, cmtcsc10, cmtex10, cmtex8, cmtex9, cmti10, cmti12, cmti7, cmti8, cmti9, cmtt10, cmtt12, cmtt8, cmtt9, cmu10, cmvtt10, euex10, euex7, euex8, euex9, eufb10, eufb5, eufb6, eufb7, eufb8, eufb9, eufm10, eufm5, eufm6, eufm7, eufm8, eufm9, eurb10, eurb5, eurb6, eurb7, eurb8, eurb9, eurm10, eurm5, eurm6, eurm7, eurm8, eurm9, eusb10, eusb5, eusb6, eusb7, eusb8, eusb9, eusm10, eusm5, eusm6, eusm7, eusm8, eusm9, msam10, msam5, msam6, msam7, msam8, msam9, msbm10, msbm5, msbm6, msbm7, msbm8, msbm9, default */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = {"cmb10":"AU4AEgAAAH8AMAAPAAoABQBYAAkAAAAH0gueJgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNQgAAAAAAAAAAAAAAAAAAAAAAAADqF7AAACqwAAAmsAAAHrAAABuwAAAnsAAAILAAACawAAAgsAAAJrAAACCwAAAWwBEKFMAAABTAAAAqwAAAKsAAAAEwAAAEOAAAD8AAAA/AAAAPgAAAD8AAAA9wAAAiwAAACwYAABXAAAAgMAAAJjAAAA9VAAArsAAALrAAACbSAAABMAEAA8ABFxPAAAAqxwAAD+MAACrjAAAmwAAAAcABEgbpAAAG6QAAD+AAACZkAAABGAAABTABFQEQAAAP6QAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAAEwAAABOAAAA0gAACYhAAANSAAADcABGCbAAAAisAFMH7AAACCwAAAksAE1GrAAABmwASQpsAAAJ7AAAAmwAVcQsAAAKLABKhewAVIssAAAJ7AAACGwATUcsAEeIbgAACOwAUwUsAAAHbABLiWwAAAisAUkL7AFJCKwASoisAkvGLAAAALpAAATwAAAAukAAA/AAAABwAAAAcABEQ4wAUgUwAFCCzABQBTAAAAMMAAABMARAg84BVYUwAE6AcAAAATIAAASwAEZAcAAACowAToUMAE6DzABQhQ4AUIROAAACjAAAAgwAAAHkAFKFDABSxIwBRkgMAUaEjAAABI4BR8LMAAADzANFi0wDAAPwAAAD8AAAA/AAAAAAAAAAARxyAAEeuMABOOOAATjkAAFVVYABjjlAAY+lQAGT6YABlsIAAbYMAAHHHMAB3d4AAeOOwAHxx4ACAACAAhERgAIccgACHHKAAi2DQAI45AACPSgAAlVWAAJmZ0ACcceAAoLZQAKfSsACqqtAAru8gALHHUACzM2AAtgugALjjsADAADAAwWxQAMJ9UADERIAAxPqAAMccoADIiLAAyIjQAMk+0ADVVYAA59KwAPMzYAEAADABBESAAQiI0AAAAAAAJ9KAAGQf4ABxxyAAgAAAAIqqsACVVWAAmJqgAKHHIACiijAApPpQAK+lAACxxyAAvBbQAMAAAAAAAA//5B/gAAxx0AAOOOAAFVVgABjjoAArjjAAMccAADHHIABAAAAAAAAAAAOOMAAGZmAABxyAABxx0AbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AAoAhgAKALQB7gC0AfIBgADyAYAA+AGGAAwBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AFAGWABQB1gAUAcoAFAGGABQBBgAYAT4AEAEOABABHgASAUYAEAHmABABlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAHSABAB1gAQAYoAEAHmABAB2gASAd4AEAGiABIBrgAQAZYAHAG+ABwB4gAQAZIAHAGOABwBxgAcAdoAEAGqACAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAGgFeABoBqgAeASYAH//uOOP/6mZYAAccd//8ccv//jjj//qqq//444wAAccgAAOOOAAAAAAAFVVYAAqqrAAHHHQAHHHIAEAADAAHHHQ==","cmbsy10":"ARcAEgAAAH8ALAAPABAAEAAHAAcAAAAW4MmMDACgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNQlNZAAAAAAAAAAAAAAAAAAAAAADqH6oAAAJTAAAfqgAACEIAAB+qAAAIUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACnMAAAIUwAACFMAAB9kAAAfZAAAH90AAB/dAAAf3QAAH90AAB/dAAAf3QAAHyEAAB91AAAflwAAH5cAACmXAAAplwAAH5cAAB+XAAApIQAAKSEAAAjLAAAIywAAKSEAACnLAAApywAAH2QAACkhAAApIQAAEMsAABDLAAApIQAAKcsAACnLAAAfMAAAA4AAACkwAAAVlwAAFZcAACjMAAAozAAAAcsAAAEhAAALwAAAC8AAABUwAAAI5gAAHMAAABzAAAAfwAAAH8AAABDAAAAisAEGE7AFBAqwDQQesAkCCbAhAxmwKQMOuBEDJrABAwywHQAWuDkFHbABARewAQQrsAEEI7A1AiGwCQMYsCUCJLgBAyewAQIPsBUEDbA9ABGwKQISsCUAKrAlAhqwMQQUuCUCG7AZBBWAAAAVgAAAFYAAABWAAAAVgAAAEMAAABDAAAAF7gAABe4AAAXuAAAF7gAACO4AAAjuAAAE7gAABO4AAALuAAAI7gAACO4AABDuAAAI7gAAAssAACUfAAAgsAAAJbAAAAfMLAAVgAAAFYAAAB/dAAAf3QAABswAAAXMAAAFzAAAEMwAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAFHHAABYLWAAcn0AAILYAACGwVAAkZmgAJMzAACbYIAAnOxgAKOOAACkc7AApOaAAK59AACyRlAAs+kAALb3gAC8w4AAv3KwAMI0MADERAAAx4lgAMnG0ADPUtAA0GggANEUsADRh1AA1J8AAN8KMADkX1AA5PoAAOZmIADn0jAA67TQAO/0UADwbOAA9VUAAPzFgAD9VOABBbAAASZmAAErKbABYLkwAAAAAAAPXDAAZB/gAHHHIAB446AAeT6AAICRsACGQgAAjjkAAJXnAACiIgAAr6UAALHHIACyWNAAwAAAAAAAD//kH+//+OOv//k+gAAAkbAABkIAAA444AAV5wAAGOOgACEvYAAiIgAAMccAADHHIAAyWNAAQAAAAPCj0AAAAAAABcMwAAgtgAAMEbAADkSwABJAAAAU1dAAFNegABU54AAVpzAAGgtgACC2AAAlo2AAJupgADAAIABEcdgDCAAIAwgAGAMIACgDCAA4AwgASAMIAFgDCABgAAgtgAAQWwAAGIiAACC2AAAo44AAMREAADk+gABAAAAAAAAAAAAAAAAAAAAAcccgASZmAAAAAAAAvyiAAGyG4AB5U7AAwZNgAGAC0ABps1AAXOaAAEn0oAAmZmAATykAAGLYAAAMzNACY9cAAQKPYABAAA","cmbsy6":"ARkAEgAAAH8ALQAPABAAEQAHAAcAAAAWIa9YWABgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNQlNZIFYyLjIAAAAAAAAAAAAAAADyH8wAAAJTAAAfzAAACEIAAB/MAAAIUwAAH8wAAB/MAAAfzAAAH8wAAB/MAAAfzAAAH8wAACq7AAAIUwAACFMAAB9kAAAfZAAAH+4AAB/uAAAf7gAAH+4AAB/uAAAf7gAAHyEAAB+GAAAfmQAAH5kAACqZAAAqmQAAH5kAAB+ZAAAqIQAAKiEAAAi6QAAIugAAKiEAACq6AAAqugAAH2QAACohAAAqIQAAELoAABC6AAAqIQAAKroAACq6AAAfMAAAA3AAACowAAAVmQAAFZkAACm7AAApuwAAAboAAAEhAAALsAAAC7AAABUwAAAI1QAAHLAAABywAAAfsAAAH7AAABCwAAAioAEGEqAFBAqgCQQhoA0CCaAdAxigKQMOpxEDJ6ABAwygFQAWpzkFHaABARegAQQsoAEEI6A1AiCgDQMboCUCJKcBAyigAQIPoBkEDaA9ABGgKQIToCUAK6AlAhqgLQQUpyUCGaAhBBVwAAAVcAAAFXAAABVwAAAVcAAAELAAABCwAAAF3QAABd0AAAXdAAAF3QAACN0AAAjdAAAE3QAABN0AAALdAAAI3QAACN0AABDdAAAI3QAAAroAACUfAAAeoAAAJqAAAAe7MAAVcAAAFXAAAB/uAAAf7gAABrsAAAW7AAAFuwAAELsAAB+4AAAfuAAAH7gAAB+4AAAAAAAAAAAAAAAGl7MABtv1AAj+GAAKMUsACmSAAArv4AALZH0AC/4bAAw/ywAMl7AADPf7AA0IPQANWNUADawtAA3K4wAN3LAADn71AA6kZQAOpnsADv4VAA87iAAPTSsAD6ULAA+t4wAP3VUAD/6oABAxSAAQ3IsAEVVQABFkewARaQgAEXGTABHvGwASFCMAEjuIABJL0wASl60AE3LYABN3QAATyuAAFjFFABa9+wAaR6UAAAAAAAFA2wAGsF0ABxxzAAeOOwAIMzMACMBLAAjjkAAJKeMACjoIAAr6UAALHHMACzMwAAwAAAAMSfgAAAAA//6wXf//jjsAADMzAADASwAA440AASnjAAGOOwACEvgAAjoIAAMccAADHHMAAzMwAAQAAAAESfgADr8lAAAAAAAALyMAAIDwAACZmwAAzuUAAQmDAAENdQABLPAAAVZ4AAFl1QABrBgAAlo4AAJmZQAChWgAAwtjAASLYwAMIiOAMIAAgDCAAYAwgAKAMIADgDCABIAwgAWAMIAGAACZmwABMzUAAczQAAJmawADAAUAA5mgAAQzOwAEAAAAAAAAAAAAAAAAAAAABxxzABbI+wAAAAAADQDQAAZG/QAHwkAADdFlAAberQAIDCgABrbTAASXtQACqqsABVVVAAaXsAABVVUAH7u7ABWZmwAEAAA=","cmbsy7":"ARgAEgAAAH8ALQAPAA8AEQAHAAcAAAAW0ZKjnwBwAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNQlNZIFYyLjIAAAAAAAAAAAAAAADwH6oAAAJTAAAfqgAACEIAAB+qAAAIUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACrLAAAIUwAACFMAAB9kAAAfZAAAH9wAAB/cAAAf3AAAH9wAAB/cAAAf3AAAHyEAAB+GAAAfmAAAH5gAACqYAAAqmAAAH5gAAB+YAAAqIQAAKiEAAAjLQAAIywAAKiEAACrLAAAqywAAH2QAACohAAAqIQAAEMsAABDLAAAqIQAAKssAACrLAAAfMAAAA3AAACowAAAVmAAAFZgAACnLAAApywAAAcsAAAEhAAALwAAAC8AAABUwAAAI5QAAHMAAABzAAAAfwAAAH8AAABDAAAAisAEGErAFBAqwDQQgsAkCCbAdAxiwKQMOtxEDJ7ABAwywGQAWtzkFHbABARewAQQssAEEI7A1AiGwCQMbsCUCJLcBAyiwAQIPsBUEDbA9ABGwKQITsCUAK7AlAhqwMQQUtyUCGbAhBBVwAAAVcAAAFXAAABVwAAAVcAAAEMAAABDAAAAF7QAABe0AAAXtAAAF7QAACO0AAAjtAAAE7QAABO0AAALtAAAI7QAACO0AABDtAAAI7QAAAssAACUeAAAesAAAJrAAAAfLLAAVcAAAFXAAAB/cAAAf3AAABssAAAXLAAAFywAAEMsAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAF78AABjQCAAg1pQAJWJcACZwLAAo7vgAKe4kACw0CAAtAFQALnnsAC+GCAAvuiQAMWSAADKRVAAzBbgAM4ZcADXcbAA2D6QANoEcADeRgAA4ekAAONrUADpUSAA6hKwAOvR4ADsiAAA8HUgAPsPUAECilABAqRQAQLzsAED1yABCp1wAQ2ekAEPXuABEstQARTTcAEgSeABIKqQAScCkAFLYOABUvywAYrisAAAAAAAEqawAGkvAABxxyAAeOOQAH+lAACJCrAAjjkAAI9p4ACgFOAArRrgAK+lAACxxyAAv/CQAMAAAAAAAA//6S8P//jjn///pQAACQqwAA444AAPaeAAGOOQACAU4AAhL3AALRrgADHHIAA/8JAAQAAAAO1ZUAAAAAAAA/OwAAkXkAAJfZAADWiQABFYUAASXXAAE6vgABUzcAAWHFAAGoBwACReUAAlo3AAJ9RwADB1IABHMAAAtvV4AwgACAMIABgDCAAoAwgAOAMIAEgDCABYAwgAYAAJF5AAEi8gABtGsAAkXlAALXXgADaNcAA/pQAAQAAAAAAAAAAAAAAAAAAAAHHHIAFPcSAAAAAAALt44ABiR3AAeKDgAMCM4ABYHnAAgKawAG5dkABJJJAAJJJQAEkkkABaaXAAEkkgAbMzIAEoOpAAQAAA==","cmbsy8":"ARgAEgAAAH8ALAAPABAAEQAHAAcAAAAWecSZzACAAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNQlNZIFYyLjIAAAAAAAAAAAAAAADuH6oAAAJTAAAfqgAACEIAAB+qAAAIUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACnMAAAIUwAACFMAAB9kAAAfZAAAH90AAB/dAAAf3QAAH90AAB/dAAAf3QAAHyEAAB91AAAfmAAAH5gAACmYAAApmAAAH5gAAB+YAAApIQAAKSEAAAjLQAAIywAAKSEAACnLAAApywAAH2QAACkhAAApIQAAEMsAABDLAAApIQAAKcsAACnLAAAfMAAAA4AAACkwAAAVmAAAFZgAACjMAAAozAAAAcsAAAEhAAALwAAAC8AAABUwAAAI5gAAHMAAABzAAAAfwAAAH8AAABDAAAAisAEGE7AFBAqwDQQesAkCCbAdAxiwKQMOtxEDJrABAwywGQAWtzkFHbABARewAQQrsAEEI7A1AiGwCQMasCUCJLcBAyewAQIPsBUEDbA9ABGwKQISsCUAKrAlAhuwMQQUtyUCGbAhBBWAAAAVgAAAFYAAABWAAAAVgAAAEMAAABDAAAAF7gAABe4AAAXuAAAF7gAACO4AAAjuAAAE7gAABO4AAALuAAAI7gAACO4AABDuAAAI7gAAAssAACUfAAAgsAAAJbAAAAfMLAAVgAAAFYAAAB/dAAAf3QAABswAAAXMAAAFzAAAEMwAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAFccoABdKAAAefTgAIthAACPd8AAmmaAAJzNIAClg2AAqAUAAK45QACxCsAAsbQAALmVgAC954AAv6VgAMJUgADKuOAAyxPgAM26AADREYAA1I2gANZd4ADckeAA3XpAAN3+YADeT4AA4n2gAO0EQADz18AA8+nAAPRyIAD1zEAA+15AAP7kIAEAHAABBVXgAQ8fYAEPk4ABFsIAATmaQAFAUsABd7EAAAAAAAARR6AAZ1xAAHHHIAB446AAfPqAAIYUoACMOWAAjjkAAJyNIACoiMAAr6UAALHHIAC7RYAAwAAAAAAAD//nXE//+OOv//z6gAAGFKAADDlgAA444AAY46AAHI0gACEvYAAoiMAAMccAADHHIAA7RYAAQAAAAO64YAAAAAAABLTgAAi2IAAKkIAADcRAABG44AATsWAAFFGgABUMgAAV64AAGk+gACLYQAAlo2AAJ3MAADBEQABGC4AArpPoAwgACAMIABgDCAAoAwgAOAMIAEgDCABYAwgAYAAItiAAEWxAABoiYAAi2IAAK46gADREwAA8+uAAQAAAAAAAAAAAAAAAAAAAAHHHIAE5mkAAAAAAALJCwABoqUAAdRsAAL/FoABkZQAAaljAAFpYwABI44AAIAAAAEAAAABlVWAAEAAAAXzMwAEjM0AAQAAA==","cmbsy9":"ARYAEgAAAH8ALAAPAA8AEAAHAAcAAAAWZyQtUgCQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNQlNZIFYyLjIAAAAAAAAAAAAAAADsH6oAAAJTAAAfqgAACEIAAB+qAAAIUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACnLAAAIUwAACFMAAB9kAAAfZAAAH9wAAB/cAAAf3AAAH9wAAB/cAAAf3AAAHyEAAB91AAAfmAAAH5gAACmYAAApmAAAH5gAAB+YAAApIQAAKSEAAAjLAAAIywAAKSEAACnLAAApywAAH2QAACkhAAApIQAAEMsAABDLAAApIQAAKcsAACnLAAAfMAAAA4AAACkwAAAVmAAAFZgAACjLAAAoywAAAcsAAAEhAAALwAAAC8AAABUwAAAI5gAAHMAAABzAAAAfwAAAH8AAABDAAAAisAEGE7AFBAqwDQQesAkCCbAdAxiwKQMOtxEDJrABAwywGQAWtzkFHbABARewAQQrsAEEI7A1AiGwCQMZsCUCJLcBAyewAQIPsBUEDbA9ABGwKQISsCUAKrAlAhuwMQQUtyUCGrAhBBWAAAAVgAAAFYAAABWAAAAVgAAAEMAAABDAAAAF7QAABe0AAAXtAAAF7QAACO0AAAjtAAAE7QAABO0AAALtAAAI7QAACO0AABDtAAAI7QAAAssAACUeAAAgsAAAJbAAAAfLLAAVgAAAFYAAAB/cAAAf3AAABssAAAXLAAAFywAAEMsAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAFQlsABbk1AAdc5QAIaisACKoEAAlk0AAJd3AACf4VAAodpQAKhLUACqC5AAqpaQALNrAAC3cOAAuR+wALwDwADDXEAAxJ1QAMdSkADJ9AAAzVGwAM9esADVz3AA1ddAANbWQADW9VAA2shQAOU/wADrPrAA65ywAOyjwADuB7AA8qoAAPaXIAD3ZJAA/HEAAQTskAEFb8ABDUVQAS7uAAE09XABa+pQAAAAAAAQNrAAZbBwAHHHIAB445AAeudAAINFcACJMCAAjjkAAJkscACk+gAAr6UAALHHIAC2wXAAwAAAAAAAD//lsH//+OOf//rnQAADRXAACTAgAA444AAY45AAGSxwACEvcAAk+gAAMccgADbBcABAAAAA78lQAAAAAAAFSwAACGpAAAtmcAAOC5AAEgPgABS6AAAU0rAAFO4gABXFkAAaKbAAIaiwACWjUAAnJwAAMB5QAEUnyAMIAAgDCAAYAwgAKAMIADgDCABIAwgAWAMIAGAACGpAABDUcAAZPrAAIajgACoTIAAyfVAAOueQAEAAAAAAAAAAAAAAAAAAAABxxyABLu4AAAAAAAClkLAAaOJAAHMnwACtoAAAVt6wAHr5UABswHAASXtAABxxwAAtCeAAWhNAAA444AKn0nABAthAAEAAA=","cmbx10":"AUwAEgAAAH8ALQAPAAoABQBYAAoAAAAHGvIiVgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADqFLAAACewAAAjsAAAG7AAABiwAAAksAAAHbAAACOwAAAdsAAAI7AAAB2wAAATwBEKEsAAABLAAAAnwAAAJ8AAAAEwAAADOAAADcAAAA3AAAANcAAADcAAAA1gAAAgwAAACQYAAA/AAAAdMAAAIzAAAA1UAAAosAAAK7AAACPSAAABMAEAAsABFxDAAAAnxwAADeMAACfjAAAjwAAAAcABEgbpAAAG6QAADeAAACOFAAABGAAABDABFQEQAAAN6QAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAEwAAABOAAAAkgAACMhAAALSAAAC8ABGCPAAAAgsAFMHLAAAB2wAAAhsAE1F7AAABawASQmsAAAJLAAAAWwAVcOsAAAJbABKhSwAVIpsAAAJLAAAB+wATUZsAEeH7gAAB6wAUwSsAAAGrABLiKwAAAgsAUkLLAFJCCwASogsAkvFbAAAAHpAAAQwAAAAekAAA3AAAABwAAAAcABEQwwAUgSwAFCCTABQBLAAAAKMAAAA8ARAg04BVYSwAE6AcAAAAPIAAARwAEZAcAAACcwAToSMAE6DTABQhI4AUIROAAACDAAAAcwAAAGkAFKEjABSxEwBRkdMAUaETAAABE4BR8JMAAADTANFiowDAANwAAADcAAAA3AAAAAAAAAAAUccAAFmZgABZ9IAAYiIAAG+k4AByfQAAdB+wAHk+gACC2AAAhu7QAIsFgACPHDAAkzMAAJgtUACY42AAmk+AAJtggACjjgAAq7uAALEQ0ACz6QAAuT5QAMFr0ADERAAAyT5QAMzMgADOOKAA0WvQANSfAADczIAA3SeAAN6ToADhxtAA4nzgAOT6AADmZiAA5sEgAOd3MAD1VQABCqpQARd3IAEmZgABK2BQATBaoAAAAAAAJ9KAAGQf4ABxxyAAgAAAAIqqsACYmqAAoccgAKIiAACiijAApPpQAK+lAACxxyAAvBbQAMAAAAAAAA//5B/gAAxx0AAOOOAAGOOgACIiAAArjjAAMccAADHHIABAAAAAAAAAAAQW0AAHXCAACC2AABvpMAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//rjkP/59KAAAb6TAAILYP/++lD//30o//53eP/99KAAAILYAAEFsAAAAAAABiIgAAMREAACC2AABxxyABJmYAACC2A=","cmbx12":"AUsAEgAAAH8ALAAPAAoABQBYAAoAAAAHwtZOoADAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADmE7AAACawAAAisAAAGrAAABewAAAjsAAAHLAAACKwAAAcsAAAIrAAABywAAASwBEKEcAAABHAAAAmwAAAJsAAAAEwAAADOAAADcAAAA3AAAANgAAADcAAAA1gAAAfwAAACQYAAA7AAAAcMAAAIjAAAA1UAAAnsAAAKrAAACLSAAABMAEAAsABFw/AAAAmxwAADeMAACbjAAAiwAAAAcABEgbpAAAG6QAADeAAACJ1AAABGAAABDABFQEQAAAN6QAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAEwAAABOAAAAkgAACIhAAALSAAAC8ABGCLAAAAfsAFMG7AAABywAAAgsAE1FrAAABWwASQlsAAAI7AAAAWwAVcPsAAAJLABKhOwAVIosAAAI7AAAB6wATUYsAEeHrgAAB2wAUwRsAAAGbABLiGwAAAfsAUkK7AFJB+wASofsAkvFLAAAAHpAAAPwAAAAekAAA3AAAABwAAAAcABEQwwAUgRwAFCCTABQBHAAAAKMAAAA8ARAg04BVYRwAE6AcAAAAPIAAAQwAEZAcAAACYwAToRMAE6DTABQhE4AUIQOAAACDAAAAcwAAAGkAFKETABSxAwBRkcMAUaEDAAABA4BR8JMAAADTANFikwDAANwAAADcAAAA3AAAAAAAAAAAUAAAAFe0MABYAAAAYAAAAGtCcABwAAAAcZmwAHWhQACAAAAAg2hQAIgAAACMAAAAkAAAAJL2kACUvbAAmAAAAKAAAACoAAAArQmAALAAAAC1CYAAvQmAAMAAAADEvbAAyEvQAMl7UADMvbAA0AAAANbQsADYS9AA2XtQANy9sADdVXAA4AAAAOEvgADhe1AA4l7QAPAAAAEEvbABES+AASAAAAEkvbABKXtQAAAAAAAkvbAAYupwAHHHEACAAAAAiqqwAJe6EACgAAAAoccQAKKKMACk+lAAr6UAALHHEAC8FsAAwAAAAAAAD//i6nAADHHAAA448AAY45AAIAAAACuOMAAxxwAAMccQAEAAAAAAAAAABAAAAAczMAAIAAAAGjjwBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+wAA//ol7AABo48AAgAA//8AAP//gAD//oAA//4AAAAAgAAAAQAAAAAAAAAGAAAAAwAAAAIAAAAHHHEAEgAAAAIAAA==","cmbx5":"AU0AEgAAAH8ALwAPAAkABQBYAAoAAAAHqy2MaABQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAAD0FaAAACmgAAAnoAAAHKAAABqgAAAloAAAH6AAACegAAAfoAAAJ6AAAB+gAAAWsBEKFLAAABSwAAAqsAAAKrAAAAEwAAAENgAADrAAAA6wAAAOcAAADrAAAA5gAAAhsAAACgUAAA+wAAAfMAAAJzAAAA5UAAAroAAALaAAACfSAAABMAEAA7ABFxCwAAAptgAADuMAACnjAAAnsAAAAbABEgfoAAAH6AAADuAAACfHAAABFgAABTABFQEQAAAO6AAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAAEwAAABNgAAA0YAACchAAAMRgAADLABGCewAAAhoAFMHqAAAB+gAAAkoAE1GaAAABigASQooAAAJaAAAAagAVcRoAAAJqABKhWgAVIsoAAAJaAAACKgATUboAEeIqYAACCgAUwToAAAHaABLiOgAAAhoAUkLqAFJCGgASohoAkvF6AAAALoAAAQsAAAAugAAA6wAAABsAAAAbABEQ0wAUgTsAFCCjABQBOwAAALMAAABLARAg42BVYTsAE6AbAAAAS2AAASsAEZAbAAACkwAToTMAE6DjABQhM2AUISNgAACTAAAAgwAAAHgAFKEzABSxIwBRkfMAUaEjAAABI2BR8KMAAADjANFi4wDAAOsAAADrAAAA6wAAAAAAAAAAb6RgAHBW0AB5mQAAefQAAIRDoACMzAAAmOLQAJry0ACfSWAArYIAALE90AC30aAAvPlgAMIhMADDMtAAxPmgAMZlYADMcNAA1sBgAN9I0ADlrzAA6ZhgAOtfoADv/tAA+k5gAP/+0AEEQwABCIcwAQqpYAEOkqABFJ4AARpOYAEdJmABH0igASIg0AEjMdABJxsAASd2AAEpPTABK19gAT3cYAFO7TABVr/QAWT4oAF//jABhEJgAAAAAAAsFtAAbSQwAHHHMACAAAAAiqrQAJ2VAAChxzAAoopgAKT6YACvpQAAsccwALu7MAC8FtAAwAAAAAAAD//tJDAADHHQAA440AAY46AAK45gADHHMAA7uzAAQAAAAAAAAAAFJ9AACUegAApPoAAhPqAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/5Bbr/+Bx9AAIT6gACk+b//rYN//9bBv/+ERP//WwaAACk+gABSfMAAAAAAAhEOgAD3doAApPmAAcccwAYRCYAApPm","cmbx6":"AVAAEgAAAH8AMQAPAAoABQBYAAoAAAAHgEXAdABgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADyF6AAACqgAAAooAAAHaAAABugAAAmoAAAIKAAACigAAAgoAAAKKAAACCgAAAWsBEKFbAAABWwAAArsAAAK7AAAAEwAAAENwAADrAAAA6wAAAOcAAADrAAAA5gAAAisAAACgUAAA+wAAAgMAAAKDAAAA5UAAAsoAAALqAAACjSAAABMAEAA7ABFxCwAAAqtgAADuMAACrjAAAosAAAAbABEgfpAAAH6QAADuAAACjIAAABFwAABTABFQEQAAAO6QAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAAEwAAABNwAAA0cAACghAAAMRwAADLABGCiwAAAioAFMH6AAACCgAAAloAE1GqAAABmgASQpoAAAJqAAAAagAVcRoAAAJ6ABKhegAVItoAAAJqAAACOgATUcoAEeI6cAACGgAUwUoAAAHqABLiSgAAAioAUkMKAFJCKgASoioAkvGKAAAALpAAAQsAAAAukAAA6wAAABsAAAAbABEQ0wAUgUsAFCCjABQBSwAAALMAAABLARAg43BVYUsAE6AbAAAAS3AAATsAEZAbAAACowAToUMAE6DjABQhQ3AUISNwAACTAAAAgwAAAHgAFKFDABSxMwBRkgMAUaEzAAABM3BR8KMAAADjANFi8wDAAOsAAADrAAAA6wAAAAAAAAAAZL2AAGUq0ABt/AAAblcwAHfwsACBqNAAiyPQAI0PUACSMVAAnlcAAKJPgACn8LAArL1QALGKMAC1NwAAtc6AALYLMAC7I7AAuyPQAMS9UADJewAA0xSwANMzAADX8IAA3MywAOZmMADrI7AA76SwAPQlsAD1GFAA+T5QAP5W0AEE+gABB1jQAQhLgAEL+DABDHGAARCXUAEQ8oABEYoAARPKgAEkvTABLjiAATxxUAFKMNABYtewAWMUUAFnWLAAAAAAACqqsABrBdAAcccwAIAAAACKqtAAnHGwAKHHMACiilAApPpQAK+lAACxxzAAszMAALwW0ADAAAAAAAAP/+sF0AAMcdAADjjQABjjsAArjlAAMccAADHHMAAzMwAAQAAAAAAAAAAEzNAACKPQAAmZsAAf8NAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/5tCj/+MzLAAH/DQACZmX//szN//9mZf/+MzP//ZmbAACZmwABMzMAAAAAAAd/CwADmZgAAmZlAAcccwAWMUUAAmZl","cmbx7":"AU4AEgAAAH8AMAAPAAkABQBYAAoAAAAHZhck2ABwAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADwFrAAACmwAAAmsAAAHLAAABqwAAAlsAAAH7AAACawAAAfsAAAJrAAAB+wAAAVwBEKFMAAABTAAAAqwAAAKsAAAAEwAAAENwAADsAAAA7AAAAOcAAADsAAAA5gAAAhwAAACgUAABHAAAAfMAAAJjAAAA5UAAArsAAALrAAACbSAAABMAEAA8ABFxDAAAApxwAADuMAACnjAAAmwAAAAcABEgfoAAAH6AAADuAAACamAAABFwAABTABFQEQAAAO6AAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAAEwAAABNwAAA0cAACYhAAAMRwAADMABGCbAAAAhsAFMHrAAAB+wAAAksAE1GbAAABiwASQosAAAJbAAAAawAVcPsAAAJ7ABKhawAVIssAAAJbAAACKwATUbsAEeIrcAACCwAUwTsAAAHbABLiOwAAAhsAUkL7AFJCGwASohsAkvF7AAAALoAAAQwAAAAugAAA7AAAABwAAAAcABEQ0wAUgTwAFCCjABQBPAAAALMAAABMARAg43BVYTwAE6AcAAAATHAAASwAEZAcAAACkwAToTMAE6DjABQhM3AUISNwAACTAAAAgwAAAHgAFKEzABSxIwBRkfMAUaEjAAABI3BR8KMAAADjANFi0wDAAOwAAADsAAAA7AAAAAAAAAAAXPOwAF0vkABlsFAAZgtQAG8i4AB6t5AAgVIAAIMjkACI1pAAk4EgAJelAACcmLAAoSRwAKWwUACqXJAAqviQAKs5sACux+AAt99wALnncADC/wAAxf5QAMoOkADPFeAA2C1wANw9sADg6gAA5ZZQAOWwUADqAZAA7mzgAPW9UAD3xXAA999wAPwjsAD8MLABAIIAAQCcAAEA3QABAvIgARLLIAEW2yABKaaQATcPcAFLYJABTgTgAVKxIAAAAAAAKaaQAGkvAABxxyAAgAAAAIqqsACbObAAoccgAKKKUACk+lAArRrgAK+lAACxxyAAvBbgAMAAAAAAAA//6S8AAAxx4AAOOOAAGOOQACuOUAAtGuAAMccgAEAAAAAAAAAABIvgAAgu4AAJF5AAHwJwBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+jDF//lCpQAB8CcAAkXl//7dDv//bof//kuV//26GwAAkXkAASLyAAAAAAAG8i4AA2jXAAJF5QAHHHIAFLYJAAJF5Q==","cmbx8":"AU0AEgAAAH8ALgAPAAoABQBYAAoAAAAHMsdAyQCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADuFbAAACiwAAAksAAAHLAAABmwAAAlsAAAHrAAACSwAAAesAAAJLAAAB6wAAAUwBEKE8AAABPAAAAowAAAKMAAAAEwAAADOAAADcAAAA3AAAANcAAADcAAAA1gAAAhwAAACQYAABDAAAAeMAAAJDAAAA1UAAApsAAALLAAACTSAAABMAEAAsABFw/AAAAoxwAADeMAACjjAAAkwAAAAcABEgbpAAAG6QAADeAAACSlAAABGAAABDABFQEQAAAN6QAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAAEwAAABOAAAAkgAACQhAAALSAAAC8ABGCTAAAAhsAFMHbAAAB6wAAAisAE1GLAAABewASQnsAAAJbAAAAWwAVcOsAAAJrABKhWwAVIqsAAAJbAAACCwATUasAEeILgAAB+wAUwTsAAAG7ABLiOwAAAhsAUkLbAFJCGwASohsAkvFrAAAAHpAAAPwAAAAekAAA3AAAABwAAAAcABEQwwAUgTwAFCCTABQBPAAAAKMAAAA8ARAg04BVYTwAE6AcAAAAPIAAASwAEZAcAAACgwAToTMAE6DTABQhM4AUIROAAACDAAAAcwAAAGgAFKEzABSxIwBRkeMAUaEjAAABI4BR8JMAAADTANFiswDAANwAAADcAAAA3AAAAAAAAAAAVxygAF93oABf0sAAaIjAAHWC4AB59OAAe7LgAIGZ4ACLYQAAj6VAAJQXIACYciAAnM0gAKGZ4ACi2GAAo0ogAKWDIAClg0AArjlAALbvYAC8FyAAv6VgAMTNQADNg0AA0RGAANXeQADaIqAA2qsAAN6UYADifaAA6lAAAOuOwADsFyAA8ACAAPBEoADz6cAA9HIgAPTNQAD2UCABBVXgARuOwAEotoABOZpAAT5nAAFDM8AAAAAAACjjgABnXEAAcccgAIAAAACKqsAAmiIAAKHHIACiikAApPpgAKiIwACvpQAAsccgALwWwADAAAAAAAAP/+dcQAAMccAADjjgABjjoAAoiMAAK45AADHHAAAxxyAAQAAAAAAAAAAEWwAAB9cAAAi2IAAeT6AGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/6jjb/+ZsCAAHk+gACLYT//uk+//90nv/+Xdz//dJ8AACLYgABFsIAAAAAAAaIjAADREYAAi2EAAcccgATmaQAAi2E","cmbx9":"AUwAEgAAAH8ALgAPAAkABQBYAAoAAAAHdAyJOgCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADsFbAAACiwAAAksAAAHLAAABmwAAAlsAAAHrAAACSwAAAesAAAJLAAAB6wAAAUwBEKE8AAABPAAAAowAAAKMAAAAEwAAADNwAADcAAAA3AAAANcAAADcAAAA1gAAAhwAAACQYAAA/AAAAeMAAAJDAAAA1UAAApsAAALLAAACTSAAABMAEAAsABFxDAAAAoxwAADeMAACjjAAAkwAAAAcABEgboAAAG6AAADeAAACSVAAABFwAABDABFQEQAAAN6AAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAEwAAABNwAAAkcAACQhAAALRwAAC8ABGCTAAAAhsAFMHbAAAB6wAAAisAE1GLAAABewASQnsAAAJbAAAAWwAVcOsAAAJrABKhWwAVIqsAAAJbAAACCwATUasAEeILcAAB+wAUwTsAAAG7ABLiOwAAAhsAUkLbAFJCGwASohsAkvFrAAAAHoAAAQwAAAAegAAA3AAAABwAAAAcABEQwwAUgTwAFCCTABQBPAAAAKMAAAA8ARAg03BVYTwAE6AcAAAAPHAAASwAEZAcAAACgwAToTMAE6DTABQhM3AUIRNwAACDAAAAcwAAAGgAFKEzABSxIwBRkeMAUaEjAAABI3BR8JMAAADTANFiswDAANwAAADcAAAA3AAAAAAAAAAAVCWwAFw04ABcj+AAZPoAAHJAUAB1zlAAd31AAHz1IACGorAAiwBQAI8M4ACTQeAAl3cAAJxdIACd5+AAnhpAAJ/hIACf4UAAqEtQALC1kAC19pAAuR+wAL5gwADGyuAAyfQAAM7aIADSuSAA08BAANdEUADayFAA4wAgAOONcADklJAA6BiwAOicQADrnLAA7KPAAOz+wADuD8AA/HEAARIrcAEfIMABLu4AATPUIAE4ukAAAAAAAChL4ABlsHAAcccgAIAAAACKqrAAmUiwAKHHIACiikAApPoAAKT6UACvpQAAsccgALwWwADAAAAAAAAP/+WwcAAMccAADjjgABjjkAAk+gAAK45AADHHIABAAAAAAAAAAAQ1IAAHksAACGpAABz6UAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//q9pf/5zM4AAc+lAAIai//+8rv//3lc//5sF//95XUAAIakAAENRQAAAAAABk+gAAMn0AACGosABxxyABLu4AACGos=","cmbxsl10":"AX8AEgAAAH8ALgAPAAoANwBYAAoAAAAHjk2nFgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNQlhTTAAAAAAAAAAAAAAAAAAAAADqFLCQACiwAAAjsFQAG7AAABiwtAAksMQAHbBwACOwgAAdsDQAI7CAAB2wdAATwNkKEsBQABLAUAAowFAAKMBQAAEwBAADOAQADcAAAA3AKAANcCAADcBIAA1gaAAnwAAACQYAAA/AcAAdMHwAIzB8AA1UAAApsHAALLBwACPSVAABMAEAAsBlFxDAFAAox0AADeOcACjjhAAjwFgAAcCNEgbpvAAG6RgADeCgACOFGAABGAAABDAJFQEQAAAN6bwADaCcAA2gnAANoJwADaCcAA2gnAANoJwADaCcAA2gnAANoJwADaCcAAEwMAABODAAAkgkACMhQAALSAAAC8C5GCPAXAAgsAFMHLB0AB2wrAAhsFU1F7BwABawkSQmsBAAJLDEAAWwwVcOsKgAJbCtKhSwAVIqsMQAJLDEAB+wVTUZsHUeH7hUAB6wAUwSsGQAGrCRLiKwxAAgsNEkLbDRJCCwwSogsNUvFbCsAAHpzAAQwMgAAek4AA3ADAABwIwAAcCNEQwwAUgSwC1CCTCJQBLAUAAKMHwAA8DZAg04sVYSwAE6AcCMAAPIUAARwIkZAcBQACgwAToSMAE6DTBtQhI4PUIROEQACDCYAAcwTAAGkB1KEjAFSxEwsRkdMLEaETCUABE4sR8JMHgADTClFiswpAANwHAADcBwAA3AYAAAAAAAAAUccAAFmZgABZ9IAAYiIAAG+k4AByfQAAdB+wAHk+gACC2AAAhu7QAIsFgACPHDAAkzMAAJgtUACY42AAmk+AAJtggACjjgAAq7uAALEQ0ACz6QAAuT5QAMFr0ADERAAAyT5QAMzMgADOOKAA0WvQANSfAADczIAA3SeAAN6ToADhxtAA4nzgAOT6AADmZiAA5sEgAOd3MADszKAA9VUAAQqqUAEXdyABJmYAAStgUAEwWqAAAAAAACfSgABkH+AAcccgAIAAAACKqrAAmJqgAKHHIACiIgAAooowAKT6UACvpQAAsccgALwW0ADAAAAAAAAP/+Qf4AAMcdAADjjgABjjoAAiIgAAK44wADHHAAAxxyAAQAAAAAAAAAAA1KAAAU3QAAG4IAACQLAAAmUwAAJ9UAAEPmAABGLQAASfgAAFGOAABWSAAAYqAAAGdbAABvhgAAfYoAAIgqAACQIgAAm4MAAJ99AAC39QAAxQoAAMa+AADJBQAAy94AAM62AADSsAAA1GUAANRmAADcdQAA4OoAAOhOAADz4AAA+lUAAPsVAAENSwABFdIAASJVAAEvawABNR0AATvAAAE+XQABSQYAAVGOAAFw2AABeM4AAXtGAAF9LQABkvoAAbf1AAG/6wACAAUAAhXTAAJKKAADmKoAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//rjkP/59KAAAb6TAAILYP/++lD//30o//53eP/99KAAAILYAAEFsAACqrAABiIgAAMREAACC2AABxxyABJmYAACC2A=","cmbxti10":"AX8AEgAAAH8ANgAQAAoAOgBNAAkAAAAHRg1DlgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNQlhUSQAAAAAAAAAAAAAAAAAAAADqF7CkAC2wAAApsEgAILAAAB2wwAAssNQAIrCQACmweAAisBgAKbB4ACKwZAAb2OUIFth8ABjYfAAw2HwAMdh8AAIwUAAEOBAAENAAABDQRAAQgDwAENBsABBgcAAu0AAADQYAABXYXAAiMEAAIjBAABBUVAAvsJAAM7CQACniSAABMAEPBdCNFxPQNAAt1ygAJtAAAC3zoAAp0EQAAtCpEgn5yAAJ+QwAEPC4ACl1DAACGAAABzAJFQIQAAAQ+cgAEKCsABCgrAAQoKwAEKCsABCorAAQoKwAEKCsABCorAAQoKwAEKCsAAIwIAACOCAABUgcACkhKAAQSAAAENCVGCnQTAAlsAEwIbBkACKwtAAnsEkrHLCQABqwpRorsCwALLDUAAiwxAARsLwAKrC1IBewAUEysNQALLDUACOwSSsesGUqI7hIACSwBTAUsIQAH7ClJCiw1AAlsNkaNLDZKiWwxSAlsOElGbC0AAP53AAT0NAAA/loABDQJAAC0KgAAtCpERAwUAAN0DFFDTAVRRDQfRkNMEFFBtjlAA04dAAQ0FAAAsCIAALIzAAN0IAAAdB9GS0wUAAUMFFMEDAxRRA4MUUNOHQADDCBRQowOAAEkFgAEjBQAA0wgAAdMIEZDjCcAA84dAALMLAAEDBhFjUwYAAQ0JQAENCUABDQmAAAAAAAAAS/IwAFsFgABbKgAAYo8wAGLYAABmZoAAahjQAHi/AAB5LCAAfKgwAH2U4ACAbSAAiD9gAI+AYACPySAAl1KwAJxNAACe3GAAntyAAKZmAACqPWAArKhQALKhIAC0MeAAtXlQALoq0ADBbAAAwbRgAMSMoADJhuAAy81gAM6BMADREKAA05/gANrgsADcBCAA3ZSAAN5YMADgI+AA4X3QAOKzMADlHjAA5TBgAOVnAADxxoAA8unQAQXUIAELcqABDzdgARKg4AEj+rABKPUAAS6lYAAAAAAAJbBgAGQf4ABxxyAAgAAAAIqqsACYLWAAmnPQAKHHIACiijAApPpQAK+lAACxeTAAsccgALwW0ADAAAAAAAAP/+Qf4AAMcdAADjjgABjjoAAac9AAK44wADHHAAAxxyAAQAAAAAAAAAAGjTAABq8wAAh2UAALziAADV6AAA5q4AAQyFAAESNgABEsgAARflAAEs8gABQf4AAUUwAAFOggABUsgAAVwrAAFdTQABczMAAXkrAAGCGAABg2sAAYrQAAGOygABkeAAAZZVAAGYeAABp0IAAavOAAGuFgABuXUAAbziAAHHHQABzWAAAdJrAAHTogAB1DMAAdXoAAHV6gACA2oAAg7LAAIQggACEjYAAhtOAAI45QACRfoAAksYAAJR7QACaigAAoJIAAKHZQACrN4AAq79AALA2wAC+uIAAwAAAAMrIAADfAUAaQAMAGYACwBsAA0AJ4AAAD+AAAAhgAAAKYAAgF2AAABpAA4AbAAPACeAAAA/gAAAIYAAACmAAIBdgAAAbIABgEyAAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+gGyABABvgAUAZYAFAHWABQBygAUAYYAFAEGABgBPgAcAQ4AHAEeAB4BRgAcAeYAFAGWABQBvgAUAcoAFAGGABQB1gAWAQYAFAFiABwBXgAcAQYAHAFaAB4BZgAcAboAHAGyABwBygAcAdYAHAG2ABwB0gAcAaYAHAEOABwBPgAcAR4AHAGiABwBigAcAVYAHAGuABwB2gAcAd4AHAFGABwBUgAUAWYAFAFaABgBXgAYAZYAIAGGACABvgAgAZIAIAGOACABngAiAcYAIgCeABgABtOj/+0Dd//nadgAB4moAAPE1//6WMP/+HZb//4dl//8OywAEAAAABqGNAALTngAB4moABxxyABLqVgAB4mo=","cmcsc10":"AUUAEgAAAH8AMQAQAAsABgBJAAsAAAAHjC34FACgAAAcVGVYIHRleHQgd2l0aG91dCBmLWxpZ2F0dXJlcwAAAAAAAAAAAAAABUNNQ1NDAAAAAAAAAAAAAAAAAAAAAADqGsAAACvAAAApwAAAIMAAABzAAAAkwAAAIsAAACnAAAAiwAAAKcAAACLAAAAN2AAADdgAAALQAAACSQAAC0kAAAFQAAAFUAAADdAAAA3QAAANkAAADdAAAA1wAAAk0AAACAcAACxQAAAdUAAAJVAAABZzAAAtwAAAL8AAACnjAAACMAEAAtABCA3QAAAr2AAADfQAACv0AAAp0AAAAtABAwb6AAAG+gAADfAAACmFAAACGQAAAzABBgIQAAAN+gAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAIwAAACOQAAKWIAACkhAAApYgAAC9ABCSnQAAAkwAEgIcAAACLAAAAmwAEWHsAAABvAAQwqwAAAJMAAAATAATIPwAAAKMABDhrAASouwAAAJMAAACnAARYewAEKKckAACPAASATwAAAIsABCiTAAAAkwAkMMMAJDCTAAQ4kwBEKGcAAAAL6AAAN0AAAAvoAAA3QAAACsAAAAtABAhRQAT4QUAAAEVAAABVQATkOUAAADFABNBhQAAAUUAAAAVABSAVQAAAXUAE1ClABQx9QAAAUUAAAFlABOQ5QATMWVgAAElABPgdQAAARUAEzFFAAABRQBTQnUAU0FFABNRRQDTMJUAAADTAVBzAwFAAN0AAADbAAAA2wAAAAAAAAAATV5gAFHG4ABgtdAAZ9IwAGyoUABvpLAAdTDQAH6ToACAkYAAg2mwAIYLIACJGiAAjYKAAI7KYACRELAAlHrQAJdS4ACaKyAAnHFgAJ0DUACf24AAorOgAKKzsACkH7AAq2BQAK7ugAC2ZgAAuk8wALxNMAC93WAAvyVgAMFroADFVOAAyT4gAMzMUADQWoAA0w6gANRD0ADV5tAA19IAANgtAADZ9CAA5xvgAOphoAD5mQAA/ScwARd20AEbBQAAAAAAABsFsABd64AAbjjgAIAAAACDjjAAigJQAJCs4ACZmWAAoOOgAKT6UACq+NAAru7gALHHIAC7YLAAwAAAAAAAD//d64AACgJQAAxx0AAOOOAAGZlgACT6UAArjjAAMccAADHHIABAAAAAAAAAAALYMAADu7AABR6wAAa4UAAHd4AGyAAIBMgAGAYABcACcAIgA/gAKAIYACgC0Ae4AtAHyAYAAOgGAADwBhgAOAQYADAGGABABBgAQAb4AFAE+ABQBjgAUAQ4AFAGeABQBHgAUAcYAFgFGABQB4gAUAWIAFAHeABQBXgAUAYYAFAEGABQB2gAUAVoAFAHmABYBZgAUAY4AFAEOABQBvgAUAT4AFAGeABQBHgAUAdYAFAFWABQBxgAUAUYAFAFSAAwB0gAMAWYADAHmAAwBWgAQAdoAEAFeABIB3gASASYAGgGGABwBhgAgAb4AJAGOACQBngAmAcYAJAHiACQB3gAkAYYAJAHaACYB5gAkAY4AJAG+ACQBngAkAdYAJAHGACQAngAcAdIAHAHmABwB2gAiAd4AIgGmACv/645L/+jM2AAHd3f/+mZr//iIj//+IiAAAd3j//u7u//6T6v//pPoAAFsGAAAAAAAGC10AAszLAAHd3QAG444AEbBQAAHd3Q==","cmcsc8":"AUYAEgAAAH8AMgAQAAsABgBJAAsAAAAHoWaF5QCAAAAcVGVYIHRleHQgd2l0aG91dCBmLWxpZ2F0dXJlcwAAAAAAAAAAAAAACkNNQ1NDIFYyLjIAAAAAAAAAAAAAAADuGsAAACvAAAApwAAAIMAAAB3AAAAlwAAAIsAAACnAAAAiwAAAKcAAACLAAAAO2AAADtgAAALQAAACSQAAC0kAAAFQAAAFUAAADtAAAA7QAAAOkAAADtAAAA6AAAAl0AAACAcAACxQAAAcUAAAJFAAABdiAAAtwAAAL8AAACniAAACMAEAAtABCA7QAAAr2AAADvMAACvzAAAp0AAAAtABAwb6AAAG+gAADvAAACmVAAACGQAAAzABBgIQAAAO+gAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAAIwAAACOQAAKXQAACkhAAApdAAAC9ABCSnQAAAlwAEgIcAAACLAAAAnwAEWH8AAABvAAQwqwAAAJcAAAATAATIPwAAAKMABDhrAASouwAAAJcAAACnAARYfwAEKKckAACPAASAUwAAAIsABCiXAAAAlwAkMMcAJDCXAAQ4lwBEKGcAAAAL6AAAO0AAAAvoAAA7QAAACsAAAAtABAhNQAT4QUAAAEVAAABVQATkNUAAADFABNBhQAAATUAAAAVABSAVQAAAWUAE1ClABQx5QAAATUAAAF1ABOQ1QATMXVgAAElABPgdQAAARUAEzE1AAABNQBTQmUAU0E1ABNRNQDTMJUAAADjAVBzAwFAAO0AAADrAAAA6wAAAAAAAAAAUT7AAFRxwABkccAAa7vAAHGDIAB0ccAAeqsAAIRxwACGOUAAiJ+gAIxxwACOZsAAlC3gAJRxwACYFsAAmfUAAJ1VwACfvCAAoiKAAKRxwAClg0AAp+mgAKjkAACqF0AAtHHAALgWwADAFsAAwmbgAMRxwADEzUAAyBbAAMu7wADQFsAA1HHAANgWwADZg2AA27vAANvpwADgFsAA47vAAORxwADmREAA9HHAAPVWAAEIFsABC7vAASgWwAEo44ABK7vAAAAAAAAcccAAYMPAAG444ACAAAAAgZmgAI4LYACQKQAAktggAKBxwACk+mAAq67AAK7u4ACxxyAAu2CgAMAAAAAAAA//4MPAAAxxwAAOOOAAECkAACAAAAAhxyAAK45AADHHAAAxxyAAQAAAAAAAAAAC46AABAAAAAUzQAAHM0AACAAABsgACATIABgGAAXAAnACIAP4ACgCGAAoAtAHuALQB8gGAADoBgAA8AYYADgEGAAwBhgAQAQYAEAG+ABQBPgAUAY4AFAEOABQBngAUAR4AFAHGABYBRgAUAeIAFAFiABQB3gAUAV4AFAGGABQBBgAUAdoAFAFaABQB5gAWAWYAFAGOABQBDgAUAb4AFAE+ABQBngAUAR4AFAHWABQBVgAUAcYAFAFGABQBUgAMAdIADAFmAAwB5gAMAVoAEAHaABABXgASAd4AEgEmABoBhgAcAYYAIAG+ACQBjgAkAZ4AJgHGACQB4gAkAd4AJAGGACQB2gAmAeYAJAGOACQBvgAkAZ4AJAHWACQBxgAkAJ4AHAHSABwB5gAcAdoAIgHeACIBpgAr/+rjk//n+lAACAAD//oAA//4AAP//gAAAAIAA//7qqv/+jjj//6OOAABccgAAAAAABkccAAMAAAACAAAABuOOABKOOAACAAA=","cmcsc9":"AUUAEgAAAH8AMgAQAAoABgBJAAsAAAAH0AkarQCQAAAcVGVYIHRleHQgd2l0aG91dCBmLWxpZ2F0dXJlcwAAAAAAAAAAAAAACkNNQ1NDIFYyLjIAAAAAAAAAAAAAAADsGsAAACvAAAAowAAAH8AAABzAAAAkwAAAIsAAACjAAAAiwAAAKMAAACLAAAAN2AAADdgAAALQAAACSAAACkgAAAFQAAAGUAAADdAAAA3QAAANkAAADdAAAA1wAAAk0AAACAcAACxQAAAeUAAAJlAAABdyAAAtwAAAL8AAACjiAAACMAEAAtABCA3QAAAr2AAADfQAACv0AAAo0AAAAtABAwX5AAAF+QAADfAAACiFAAACGAAAAzABBgIQAAAN+QAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAIwAAACOAAAKGMAACghAAAoYwAACtABCSjQAAAkwAEgIcAAACLAAAAlwAEWHcAAABvAAQwqwAAAJMAAAATAATIOwAAAJ8ABDhrAASouwAAAJMAAACjAARYdwAEKKMgAACPAASASwAAAIsABCiTAAAAkwAkMMcAJDCTAAQ4kwBEKGcAAAAL5AAAN0AAAAvkAAA3QAAACsAAAAtABAhRQAT4QUAAAEVAAABVQATkPUAAADFABNBhQAAAUUAAAAVABSAZQAAAWUAE1C1ABQyBQAAAUUAAAF1ABOQ9QATMXVgAAE1ABPgdQAAARUAEzFFAAABRQBTQpUAU0FFABNRRQDTMJUAAADTAVBzAwFAAN0AAADbAAAA2wAAAAAAAAAAT6TgAFCXkABfmrAAZt+QAG6dwABvU8AAeBjgAH2g4ACDjcAAhSJwAIY9kACL+AAAjKQAAJBGcACRsnAAl2zgAJp3kACbpyAAnSdQAJ/XIACi4cAApZGQAKXscACnRFAAqqpAAK5MsAC1zkAAua1QAL1PwAC/hgAAwPJAAMI1wADE0VAAyLBwAMxS4ADP9VAA09RwANZvwADXduAA17OQANkfkADZhMAA5rawAPAxwAD5XEAA/P6wARdicAEZSAABGwTgAAAAAAAbp5AAX06QAG444ACAAAAAhqMgAI0MkACSllAAmhKwAKDjkACk+lAAq0mwAK7u4ACxxyAAu2CwAMAAAAAAAA//306QAAxxwAANDJAADjjgABoSsAAjjkAAK45AADHHIABAAAAAAAAAAALdQAADwMAABSfAAAbBUAAHgZAGyAAIBMgAGAYABcACcAIgA/gAKAIYACgC0Ae4AtAHyAYAAOgGAADwBhgAOAQYADAGGABABBgAQAb4AFAE+ABQBjgAUAQ4AFAGeABQBHgAUAcYAFgFGABQB4gAUAWIAFAHeABQBXgAUAYYAFAEGABQB2gAUAVoAFAHmABYBZgAUAY4AFAEOABQBvgAUAT4AFAGeABQBHgAUAdYAFAFWABQBxgAUAUYAFAFSAAwB0gAMAWYADAHmAAwBWgAQAdoAEAFeABIB3gASASYAGgGGABwBhgAgAb4AJAGOACQBngAmAcYAJAHiACQB3gAkAYYAJAHaACYB5gAkAY4AJAG+ACQBngAkAdYAJAHGACQAngAcAdIAHAHmABwB2gAiAd4AIgGmACv/69of/+kRHAAHgZP/+l7X//h+c//+H5wAAeBn//u0L//6RZP//pFkAAFunAAAAAAAF+asAAtCVAAHgZAAG444AEZSAAAHgZA==","cmdunh10":"AUQAEgAAAH8AJAAQAAoABQBYAAoAAAAHS/FgeQCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNRFVOSAAAAAAAAAAAAAAAAAAAAADqEsAAAB7AAAAcwAAAFsAAABTAAAAawAAAGMAAABzAAAAYwAAAHMAAABjAAAAQ0BEKD9AAAA/QAAAe0AAAHtAAAAEwAAACNwAACqAAAAqgAAAKgAAACqAAAApwAAAa0AAACAYAAAvQAAAYMAAAHDAAAApFAAAfwAAAIsAAABziAAABMAEAAdABFwrQAAAe2AAACvMAAB7zAAAc0AAAAdABEgX5AAAF+QAACvAAABxUAAABFwAAAzABFQEQAAAK+QAACrAAAAqwAAAKsAAACrAAAAqwAAAKsAAACrAAAAqwAAAKsAAACrAAAAEwAAABNwAAAZcAABwhAAAJlwAACdABGBzQAAAawAFMF8AAABjAAAAbwAE1FcAAABPAASQdwAAAGsAAAATAAVcMwAAAHMABKhLAAVIgwAAAGsAAABzAATUVwAEeHMcAABnAAUwPwAAAGMABLhrAAAAawAUkI8AFJBrAASoawAkvEcAAAAH5AAAK0AAAAfkAAAqgAAABcAAAAdABEQowAUgP0AFCCDABQA/QAAAIMAAAAtARAgo3BVYP0AE6AXAAAAJ3AAAO0AEZAdAAAB4wAToPMAE6CjABQg83AUINNwAABjAAAAcwAAAFYAFKDzABSw4wBRkYMAUaDjAAAA43BR8IMAAACjANFiEwDAAKoAAACnAAAApwAAAAAAAAAARxyAAE45AABVVWAAXHHQAGOOUABkRGAAZPpgAHHHMAB447AAgAAgAIAAMACDjlAAhxyAAIccoACOOQAAlVWAAJxx4ACgACAApxygAKqq0ACuOQAAsccwALVVgAC447AAvHHgAMAAIADDjmAAxxygAMjjsADVVYAA5xygAOqq0AEAADABA45gAQccoAAAAAAAGwWwAF3rgABuOOAAhxyAAJVVYACddeAArGIgAMDjoADHHIAA3HHQAOwW0AD2C2AA+OOgAQJ9MAEHHGAAAAAP/93rgAAMcdAADjjQABVVYAAY46AAK44wADHHIAB446AAhxxgAAAAAAADjjAABmZgAAccgAAT6VAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/7jjj/+uONAAE+lQABxx3//xxy//+OOP/+qqr//jjjAABxyAAA444AAAAAAAVVVgACqqsAAccdAAbjjgAQAAMAAccd","cmex10":"APgAEgAAAH8AIAAGAA4AAwAAAAAAHAAN+rF1EgCgAAASVGVYIG1hdGggZXh0ZW5zaW9uAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNRVgAAAAAAAAAAAAAAAAAAAAAAADqBBcCEAQXAhECFwJoAhcCaQYXAmoGFwJrBhcCbAYXAm0KFwJuChcCbwYXAkQGFwJFAQMDAAgDAwEJFwIuCRcCLwsZAhILGQITDxwCIA8cAiEHHAIiBxwCIwocAiQKHAIlChwCJgocAicQHAIoEBwCKRAcAioQHAIrGhwCLBocAi0SHQIwEh0CMQodAjIKHQIzDR0CNA0dAjUNHQI2DR0CNxMdAjgTHQI5Ex0AABMdAAAdHQAAHR0AABQZAh4UGQIfFhkDAhYZAwMOGQMEDhkDBQ4ZAwYOGQMHDgMDCA4DAwkXBAMKFwQDCxcEAwwXBAMNFwoDDhcKAw8XAQMQDgMDERYZAxIWGQMTFgMDFBYDAxUMGQIcDBkCHRUFAkccKAAABQYGSQgLCAAcBQJLHygAABwFAk0fKAAAHAUCTx8oAAAbBQJYGAUCWQUGBloVBQJbFQUCXBUFAl0VBQJeFQUCXx4oAAAdKAAACAsIABwoAAAcKAAAHCgAABwoAAAcKAAAGAUCYR0oAAAIQAJjGVACZB5QAAAIQAJmGVACZx5QAAAGGQIUBhkCFQcZAhYHGQIXBxkCGAcZAhkOGQIaDhkCGxkXAnEZGQJyGRwCcxkdAnQbCgMWGwMAABsSAAARAwMXDgMDGA4DAxkDMAAAAzAAAAMwAAADMAAAEQMDGhEDAxsAAAAAAAVVVgAGqq0ABzM4AAdVWAAHjjoAB447AAhxygAI45AACT6VAAlVWAAJjjsACcceAAo45gAKqq0AC8cgAAwAAgAMccoADKquAAzjkwAM+lMADVVYAA4AAwAOOOYADxx1ABAAAwAQtg4AEOOSABHHIAAUccsAFxx2ABgtiAAAAAAAAKPWAAGZmwAB64MAC446AAwAAAAAAAAABMzQAAj1ygAJmaAADmZwABAADgARxygAEo9qABgADQAcKQoAHMzgACOOUgAlwqoAL1xKAAAAAAADHHMABxxzAAAADAAAAA0wAEBCMQBBQzIANDYzADU3AAA0NgAANTcyAAA2MwAANzg8Oj45PTs+OAA6PjkAOz4AAAA/AAAAdwAAAD54AHk/OAA7PjkAOj4AAABCAAAAQ3YAdHV+AH93eAAAPwAAeT9+AAB3AAB/dwAAAAAAAAAAAAAAAAAAAAAABuOOABAAAwAAAAAAAKPWAAHHHQACqqsAAzMzAAmZmgABmZo=","cmex7":"APsAEgAAAH8AIwAGAA4AAwAAAAAAHAANFyOwrQBwAAASVGVYIG1hdGggZXh0ZW5zaW9uAAAAAAAAAAAAAAAAAAAAAAAAAAAACUNNRVggVjIuMgAAAAAAAAAAAAAAAADwBBcCEAQXAhEDFwJoAxcCaQYXAmoGFwJrBhcCbAYXAm0KFwJuChcCbwYXAkQGFwJFAQMDAAkDAwEIFwIuCBcCLwsZAhILGQITDxwCIA8cAiEHHAIiBxwCIwocAiQKHAIlChwCJgocAicQHAIoEBwCKRAcAioQHAIrGxwCLBscAi0THQIwEx0CMQodAjIKHQIzDR0CNA0dAjUNHQI2DR0CNxQdAjgUHQI5FB0AABQdAAAfHQAAHx0AABIZAh4SGQIfFhkDAhYZAwMOGQMEDhkDBQ4ZAwYOGQMHDgMDCA4DAwkXBAMKFwQDCxcEAwwXBAMNFwoDDhcKAw8XAQMQDgMDERYZAxIWGQMTFgMDFBYDAxUMGQIcDBkCHRUFAkceKAAABQYGSQkLCAAeBQJLIigAAB4FAk0iKAAAHgUCTyIoAAAdBQJYGAUCWQUGBloVBQJbFQUCXBUFAl0VBQJeFQUCXyEoAAAgKAAACQsIAB4oAAAeKAAAHigAAB4oAAAeKAAAGAUCYSAoAAAJQAJjGlACZCFQAAAJQAJmGlACZyFQAAAGGQIUBhkCFQcZAhYHGQIXBxkCGAcZAhkOGQIaDhkCGxkXAnEZGQJyGRwCcxkdAnQcCgMWHAMAABwSAAARAwMXDgMDGA4DAxkCMAAAAjAAAAIwAAACMAAAEQMDGhEDAxsAAAAAAAZpqQAHtUIAB+OSAAighwAI34AACN+CAAnbcgAKPCcACllpAArXYgALFl4AC1VZAAvTUgAMUUkADYw3AA3LMAAOSSkADl5JAA6IJwAOxyUAD0UZABACDgAQQQkAETz5ABH35QASOOkAEoBuABLz1QATNNkAFDDJABaikAAXJJkAGhhpABtGuwAAAAAAAMbyAAGZmwACVNcAC445AAwAAAAAAAAABMzQAAjSrgAJmaAADmZwABAADgARxykAEmxOABgADgAcBe4AHMzgACOOUgAln44ALzkuAAAAAAADcckAB9+AAAAADAAAAA0wAEBCMQBBQzIANDYzADU3AAA0NgAANTcyAAA2MwAANzg8Oj45PTs+OAA6PjkAOz4AAAA/AAAAdwAAAD54AHk/OAA7PjkAOj4AAABCAAAAQ3YAdHV+AH93eAAAPwAAeT9+AAB3AAB/dwAAAAAAAAAAAAAAAAAAAAAABuOOABK68gAAAAAAAMbyAAHHGwACqqsAAzMyAAnHGwACSSU=","cmex8":"APcAEgAAAH8AHwAGAA4AAwAAAAAAHAANAQFhNgCAAAASVGVYIG1hdGggZXh0ZW5zaW9uAAAAAAAAAAAAAAAAAAAAAAAAAAAACUNNRVggVjIuMgAAAAAAAAAAAAAAAADuBBcCEAQXAhECFwJoAhcCaQUXAmoFFwJrBRcCbAUXAm0JFwJuCRcCbwUXAkQFFwJFAQMDAAcDAwEIFwIuCBcCLwoZAhIKGQITDhwCIA4cAiEGHAIiBhwCIwkcAiQJHAIlCRwCJgkcAicPHAIoDxwCKQ8cAioPHAIrGRwCLBkcAi0RHQIwER0CMQkdAjIJHQIzDB0CNAwdAjUMHQI2DB0CNxIdAjgSHQI5Eh0AABIdAAAcHQAAHB0AABMZAh4TGQIfFRkDAhUZAwMNGQMEDRkDBQ0ZAwYNGQMHDQMDCA0DAwkWBAMKFgQDCxYEAwwWBAMNFgoDDhYKAw8WAQMQDQMDERUZAxIVGQMTFQMDFBUDAxULGQIcCxkCHRQFAkcbKAAABQYGSQcLCAAbBQJLHigAABsFAk0eKAAAGwUCTx4oAAAaBQJYFwUCWQUGBloUBQJbFAUCXBQFAl0UBQJeFAUCXx0oAAAcKAAABwsIABsoAAAbKAAAGygAABsoAAAbKAAAFwUCYRwoAAAHQAJjGFACZB1QAAAHQAJmGFACZx1QAAAFGQIUBRkCFQYZAhYGGQIXBhkCGAYZAhkNGQIaDRkCGxgXAnEYGQJyGBwCcxgdAnQaCgMWGgMAABoSAAAQAwMXDQMDGA0DAxkDMAAAAzAAAAMwAAADMAAAEAMDGhADAxsAAAAAAAWqsAAHFVwABzM4AAfKsgAIByQACPjsAAlx0AAJ0oYACeq0AAonJgAKY5gACtx8AAtVYAAMg5oADMAMAA048AANdWIADbHUAA3KAgAOKrgADuAOAA8cgAAQDkgAEQAQABHBfAAR8dgAEuOgABW4+AAYjlAAGbB0AAAAAAAAuFIAAZmaAAIo9gALjjoADAAAAAAAAAAEzNAACOFOAAmZoAAOZnAAEAAOABHHKAASeu4AGAAMABwUjgAczOAAI45SACWuLgAvR84AAAAAAANOPAAHjkAAAAAMAAAADTAAQEIxAEFDMgA0NjMANTcAADQ2AAA1NzIAADYzAAA3ODw6Pjk9Oz44ADo+OQA7PgAAAD8AAAB3AAAAPngAeT84ADs+OQA6PgAAAEIAAABDdgB0dX4Af3d4AAA/AAB5P34AAHcAAH93AAAAAAAAAAAAAAAAAAAAAAAG444AEQAQAAAAAAAAuFIAAcccAAKqqgADMzQACbjkAAIAAA==","cmex9":"APkAEgAAAH8AIQAGAA4AAwAAAAAAHAANesDTaQCQAAASVGVYIG1hdGggZXh0ZW5zaW9uAAAAAAAAAAAAAAAAAAAAAAAAAAAACUNNRVggVjIuMgAAAAAAAAAAAAAAAADsBBcCEAQXAhECFwJoAhcCaQUXAmoFFwJrBRcCbAUXAm0LFwJuCxcCbwYXAkQGFwJFAQMDAAgDAwEJFwIuCRcCLwwZAhIMGQITEBwCIBAcAiEHHAIiBxwCIwocAiQKHAIlChwCJgocAicRHAIoERwCKREcAioRHAIrGxwCLBscAi0THQIwEx0CMQodAjIKHQIzDh0CNA4dAjUOHQI2Dh0CNxQdAjgUHQI5FB0AABQdAAAeHQAAHh0AABUZAh4VGQIfFxkDAhcZAwMPGQMEDxkDBQ8ZAwYPGQMHDwMDCA8DAwkYBAMKGAQDCxgEAwwYBAMNGAoDDhgKAw8YAQMQDwMDERcZAxIXGQMTFwMDFBcDAxUNGQIcDRkCHRYFAkcdKAAABQYGSQgLCAAdBQJLICgAAB0FAk0gKAAAHQUCTyAoAAAcBQJYGQUCWQUGBloWBQJbFgUCXBYFAl0WBQJeFgUCXx8oAAAeKAAACAsIAB0oAAAdKAAAHSgAAB0oAAAdKAAAGQUCYR4oAAAIQAJjGlACZB9QAAAIQAJmGlACZx9QAAAFGQIUBRkCFQcZAhYHGQIXBxkCGAcZAhkPGQIaDxkCGxoXAnEaGQJyGhwCcxodAnQcCgMWHAMAABwSAAASAwMXDwMDGA8DAxkDMAAAAzAAAAMwAAADMAAAEgMDGhIDAxsAAAAAAAV7QAAG2hAABzM5AAeJdwAHw/AAB8PyAAit0AAJIsAACYBMAAmXsAAJl7IACdInAAoMoAAKgZAACvaAAAwa1wAMVVIADMpAAA0EtwANPzAADVaUAA20IAAOY4cADp4AAA+H4AAQccAAESzbABFboAASRYAAFQMgABfAwAAY2WUAAAAAAACs8gABmZsAAgbVAAuOOQAMAAAAAAAAAATM0AAI7K4ACZmgAA5mcAAQAA4AEccpABKGTgAYAAwAHB/uABzM4AAjjlIAJbmOAC9TLgAAAAAAAzKQAAdPAAAAAAwAAAANMABAQjEAQUMyADQ2MwA1NwAANDYAADU3MgAANjMAADc4PDo+OT07PjgAOj45ADs+AAAAPwAAAHcAAAA+eAB5PzgAOz45ADo+AAAAQgAAAEN2AHR1fgB/d3gAAD8AAHk/fgAAdwAAf3cAAAAAAAAAAAAAAAAAAAAAAAbjjgAQccAAAAAAAACs8gABxxwAAqqrAAMzNAAJrdQAAccc","cmff10":"AUsAEgAAAH8AMAAOAAsAAQBYAAoAAAAHjRUb6wCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNRkYAAAAAAAAAAAAAAAAAAAAAAADqG6AAACqgAAAnoAAAGqAAAB2gAAAaoAAAI6AAACegAAAjoAAAJ6AAACOgAAAYkAEKF5AAABeQAAArkAAAK5AAAAJQAAAFWAAAEpAAABKQAAAScAAAEpAAABKAAAAekAAADQcAABGQAAAjUAAAJ1AAABK1AAAsoAAALqAAACfTAAACUAEAAZABFxKQAAAqmQAAEsIAACrCAAAlkAAAA5ABEgrKAAAKygAAEsAAACdEAAADFgAACFABFQMQAAASygAAEmAAABJgAAASYAAAEmAAABJgAAASYAAAEmAAABJgAAASYAAAEmAAAANQAAADVgAAATgAACchAAAOOAAADpABGCeQAAAgoAFMH6AAACOgAAAkoAE1IqAAAB+gASQmoAAAGqAAAAagAVcPoAAAI6ABKhugAVIooAAAGqAAACqgATUboAEeKqYAACKgAUwWoAAAJ6ABLhygAAAgoAEkLaABJCCgASogoAEvGaAAAATKAAASkAAABMoAABKQAAADkAAAA5ABERBQAUgVkAFCDVABQBWQAAANUAAAB5ABAhJYAVYVkAE6ApAAAAWYAAAUkAEZApAAAClQAToVUAE6ElABQhVYAUITWAAACVAAAAtQAAAKkAFKFVABSxRQARkhUAEaFFAAABRYAR8MUAAAElABFi9QAAASkAAAEpAAABKQAAAAAAAAAAMFsAADd3gAA7u7AAPHHQAD0n4ABBbAAAQWwgAEccYABQWwAAUn0gAFOgYABczLAAXd3QAGOOMABmZlAAZxxgAGccgABpPoAAaqqgAGqqsABwWwAAdJ8wAHVVUAB9J9AAf//gAIWwMACIiGAAi2CAAItgoACOOLAAjjjQAJEQ4ACSfSAAk+kgAJbBUACZmYAAn//gAKC14ACiIgAAp9JQAKk+gACtgrAAsREAALYLMADJ9GAAzMygANJ9AAAAAAAAEn0wAE9J4ABVVWAAa2CgAIccYACVVVAAlxyAAJniUACccdAAoAAAAKqqoACqqrAAsccgAAAAAAABESAADjjgABHHIAAdJ9AAI44wADHHIAA+OOAARxxgAE45AABccdAAAAAABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj//IiI//w44wAA444AAWwW//9J9f//pPr//u7u//6T6gAAWwYAALYL//5mYAAEccYAAiIiAAFsFgAIccYADSfQAAFsFg==","cmfi10":"AWQAEgAAAH8AMgAOAAsAJABNAAkAAAAHEwuEjgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNRkkAAAAAAAAAAAAAAAAAAAAAAADqF6CAAC2gAAAooCQAGKAAABugWAAaoAAAI6BoACigOAAjoAgAKKA4ACOgMAAVmI0IEJhwABOYcAApmHAALJhwAANQcAAFWAAAD5AAAA+QAAAPcAAAD5AAAA+AKAAikAAACwcAABKYAAAjUCwAI1AsAA+0TAAuoGgAMKBoACjTJAABUAEPApARFw+QAAAtmQQAHpAAAC3CHAAokAAAA5ABEgjKVAAIygAAD8A8AChGAAADFQAAB1ABFQMQAAAPylQAD2BIAA9gSAAPYEgAD2BIAA9oSAAPYEgAD2BIAA9oSAAPYEgAD2BIAANQAAADVQAAAjgAACghBAAPOAAAD5ANGCiQIAAhoAEwH6AwACOgUAAloCUrIKBoAByggRonoAAAGqAAAAagXAAOoAAAJKBRIBegAUEroAAAGqAAACqgJSsZoDEqKqUkACKgATAUoBQAJqCBJB2gAAAhoIUaL6CFKiGgXSAhoIklFqBQAAPKdAAPkGQAA8oAAA+QAAADkAAAA5ABEQ9QcAALkBlFC1ABRQ+QcRkLUC1FBJiNAAtYNAAPkHAAA5BwAAOYRAALkGAAAZBxGS1QcAAUUHFMD1AZRQ9YGUULWDQAClBhRQhQQAAFkHAAEVBwAAtQYAAbUGEZDFB4AA1YNAAJUHwAD1BtFjFQbAAPkAwAD5AMAA+QAAAAAAAAAAPpPQAEIiAABNgrAATYLQAFT6MABWwTAAXHGgAGtggABrYKAAbxxQAHpPYAB6T4AAgcbgAIZmIACJPlAAjBagAJC10ACQteAAk44AAJgtMACbBYAApxwgAK+koACwWqAAszLQALPo0AC2CwAAtxwgALmZIAC6T2AAuqpQAL6TgAC/SYAAwiGwAMT54ADGwQAAyZkwANBaoADSfLAA0+jQAN1VAADfSYAA4LWAAOEQsADi17AA7u5gAQn0AAEMzDABEnygAAAAAAASfTAAT0ngAFVVYACAtdAAhxxgAJVVUACXHIAAmphgAJxx0ACgAAAAqqqgAKqqsACxxyAAAAAAAAERIAAOOOAAEccgACOOMAAxxyAAMn0AAD444ABHHGAATjkAAFxx0AAAAAAAAHZgAACIoAAAtlAAALZgAAERYAAB/eAAAiJgAAN8IAADu+AABEKwAASBAAAEiLAABJ+gAAVVgAAF3iAABgugAAbBsAAHd7AAB3fQAAiI0AAJmdAACsZQAAxEoAANgyAADibgAA45MAAP0VAAD+HQABERUAARPtAAEWxgABH1AAATvAAAFrigABrYYAaQAMAGYACwBsAA0AJ4AAAD+AAAAhgAAAKYAAgF2AAABpAA4AbAAPACeAAAA/gAAAIYAAACmAAIBdgAAAbIABgEyAAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+gGyABABvgAUAZYAFAHWABQBygAUAYYAFAEGABgBPgAcAQ4AHAEeAB4BRgAcAeYAFAGWABQBvgAUAcoAFAGGABQB1gAWAQYAFAFiABwBXgAcAQYAHAFaAB4BZgAcAboAHAGyABwBygAcAdYAHAG2ABwB0gAcAaYAHAEOABwBPgAcAR4AHAGiABwBigAcAVYAHAGuABwB2gAcAd4AHAFGABwBUgAUAWYAFAFaABgBXgAYAZYAIAGGACABvgAgAZIAIAGOACABngAiAcYAIgCeABgAA1Vb//BbD//tVWAAB3d0AAO7u//6Zmv/+IiP//4iI//8REgABmaAABccaAALMywAB3d0ACHHGABEnygAB3d0=","cmfib8":"AUAAEgAAAH8AJQAOAAcABQBYAAoAAAAHza9mPQCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNRklCAAAAAAAAAAAAAAAAAAAAAADuF8AAACLAAAAfwAAAGcAAABnAAAAcwAAAHMAAAB/AAAAcwAAAH8AAABzAAAAWwBEKFMAAABTAAAAhwAAAIcAAAAEwAAAENgAAEMAAABDAAAAQgAAAEMAAABBgAAAcwAAACwUAAA/AAAAcMAAAHzAAABBDAAAjwAAAJMAAAB/SAAABMAEAAsABFxDAAAAixgAAEMAAACLAAAAewAAAAsABEgfGAAAHxgAAEMAAAB+UAAACFgAABjABFQIQAAAQxgAAEMAAABDAAAAQwAAAEMAAABDAAAAQwAAAEMAAABDAAAAQwAAAEMAAAAIwAAACNgAAAlYAAB8hAAANVgAADcABGB/AAAAcwAFMGsAAABzAAAAdwAE1GcAAABjAASQfwAAAHMAAAAbAAVcQwAAAHcABKhfAAVIjwAAAHMAAAB/AATUZwAEeH8YAABzAAUwVwAAAHMABLhzAAAAcwAUkJMAFJBzAASocwAkvF8AAAAPGAAAQwAAAA8YAABDAAAACsAAAAsABEQ4wAUgTwAFCCzABQBPAAAAMMAAABcARAhA2BVYTwAE6AbAAAAS2AAASwAEZAcAAACAwAToTMAE6EDABQhM2AUIRNgAACDAAAAkwAAAHcAFKEzABSxIwBRkbMAUaEjAAABI2BR8KMAAAEDANFiQwDAAQwAAAEKAAABCwAAAAAAAAAAWcbgAF1VIABdVUAAYxxAAGaqgABv/8AAgqpgAIMcQACEiEAAlHFgAJVVAACYqmAAnqpgAKGN4ACmOKAAp/+gAK3GoACtxsAAtxwAALjjIAC6qkAAw/+gAM1U4ADWqkAA3/+AAOlU4ADvG+AA8qogAPv/gAEDjaABBVTAARRxIAEWOEABF/9gASqqAAFP/0AAAAAAAB444AB3pQAAgAAAAJhxwACeOQAAru7gALbbgAC7VWAAvxxAAMX4AADIMOAAzxyAANtVYAAAAA//2WwAAAw44AAYccAAIONAACrHIAAw44AAAAAAAASqoAAIZmAACVVgABmOQAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//pjkv/5scoAAZjkAAJVVP/+1Vb//2qq//5AAP/9qqwAAJVWAAEqqgAAAAAABv/8AAN//gACVVQACAAAABT/9AACVVQ=","cminch":"AHsAEgAwAFoAEQACAAIAAwAVAAQAAAAH3j5hywaBGaAVQVNDSUkgY2FwcyBhbmQgZGlnaXRzAAAAAAAAAAAAAAAAAAAAAAAABkNNSU5DSAAAAAAAAAAAAAAAAAAAAAAuAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKEAELCxAAAAkQAAAOEAEGBhAAAAUQAQELEAAADRAAAAEQARQCEAAADBABAgQQARAPEAAADRAAAA4QAQYIEAEADhEAAAgQAAAFEAAACxABAAwQAAAKEAUBEBAFAQoQAQIKEAkABxAAAAAAAAAABUn1AAhPpQAIzM0ACUn0AAnHHAAKREQACsFsAAs+lAALPpQAC7u7AAu7vAAMOOMADLYLAAy2CwAPpPoAEJ9KAAAAAAALHHIAAAAAAAGwWwAAAAAAAD6UAABwpIBBgAAAQYAAAE+AAQBDgAEAR4ABgFGAAQBYgAEAV4ABAEGAAQBWgAGAWYABAEOAAQBPgAEAR4ABAFWAAQBRgAEAVIAAAFmAAgBWgACAV4ACgEmAA//+iIj//4LY//4LYQAAfSgAAAAAAAXd3gAC7u8AAfSfAAdVVQARmZkAAfSf","cmitt10":"AMAAEgAAAH8AAgAPAAwAAgACAAAAAAAH3+o8eACgAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNSVRUAAAAAAAAAAAAAAAAAAAAAADqAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABOwQAATsEAAFQBAABWwQAAcAEAAHABAABsAQAAcAEAAGgBAABwAQAAQoEAAHLBAABUAQAAVAEAAGIBAABwAQAAcAEAAHUBAABKAQAAcAFAAHABAABwAQAAcAEAAHmBAABwAQAAcAEAAHlBAAB5QQAAWAEAAFyBAABGQQAAXIEAAEQBAAB5QQAAcAEAAHABAABwAQAAcAEAAHLBAABwAQAAcAEAAHLBAABwAQAAcAEAAFQBAABWQQAAZMEAAFBBAABkwQAAcAFAQHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAckEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHlBAAB5QQAAeUEAAHABAABBwQAAcAEAAFQBAABwAQAAVAEAAHABAABUAQAAcsEAAFbBAABwAQAAcAEAAHLBAABwAQAAcAEAAFQBAABUAQAAVAEAAFbBAABWwQAAVAEAAFQBAABwAQAAVAEAAFQBAABUAQAAVAEAAFbBAABUAQAAeUEAAHlBAAB5QQAAcAEAAHABAAAAAAAAAhmYgAAAAAAAgAAAAOC2AAGOOMABqZlAAbjjgAIVVYACH0mAAiqqwAI444ACQyDAAkOOgAJxx0ACqqrAAsccgAAAAD//N9I//62Cv//HHIAAOOOAAFVUwABVVUAAYWtAAHHHQACOOMAAxxzAAOOOgAAAAAAAscdgGAADoBgAA8ABAAAAAhmYgAAAAAAAAAAAAbjjgAQzMMACGZi","cmmi10":"AX4AEgAAAH8AYgAPAAkAIAA6AAwAAAAGC6BiPgCgAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAADqPLBxHVywASdRsBUYSbABJ02wTRhbsFkQVLA9GDKwcQxFsAEYOrBpCFKwLRhAQAUDK8cxGCRHNAASwCEJCkABCxDHSRggRx0LGcAVGAVAAQswQAAANMAAADlHAQMfQEEBEMcpISxAHAAjRwEYLUAdLw9AbQEpQB0DN8cBGD5HAQtDxx0hPUAcABdAARg2wAEYWUAUACNHARgHRlUYREcBGGEyAABhMgAAYTIAAGEyAAABUwAAAVMAACFkAAAhZAAAIUAAACFAAAAhQAAAIUcAACFHAAAhRwAAIZAAACFHAAAhkAAAIUcAAAEQAAABFwAAU3UAACHoATRTdQAAIWQAACjANRhOsAEiT7AtGEqwRRVYsBULTLA9GEKwcR1VsAEYW7BZEBGwUSEqsF0rXbBFCEawAQNgsGUZV7BlFFGwFRhBsHEdVrcBGFCwCRg7sD0ZNbBxFUiwZQQzsHkxX7BxMVqwURQxsHkxR7BFGQngAAAJxwAACccAAGEhAABhIQAADMABISdAAAANwAAADkABCyXAASMWQAELHcdhKBpHHQMwwAEABKAAAAunOS8mwBgAAsANGF5AAAA4QAAAG0ABCyJHARgTRx0YFEAVCRhAAQsGgAEYL0ABAxxAHQNLQBEYLkABAx5HHQsVQCULA0ABAwhHARg/RwEhIdB0AAHAfAAAAAAAAARxyAAExioABSjIAAWDIAAFqboABcceAAXOOgAGJP0ABjjlAAZ+lQAGlsMABqquAAbd3gAG7JIABv6WAAcAAgAHCIoABxxyAAckgwAHN/MAB3DYAAdzNQAHdgoAB4AAAAeC2AAHoaoAB8FtAAfBbgAH1VgAB9gyAAfnWwAH8csACAACAAgMzgAIRbIACEigAAhT6wAIVGUACHUbAAh+lQAIpP0ACN9KAAkMzgAJHtUACSSDAAkk+wAJKMoACTfzAAlJ9gAJVVUACVVWAAlVWAAJWZsACXaKAAmIigAJmpAACaQLAAnLqgAJz6YACdguAAn1kwAKAtYACi7wAAo8OAAKRbAACkn2AApsGgAKd3gACqqrAArjkAAK7BgACuyoAAsccwALb4AAC3RmAAvPpgAL4LgADAACAAwi2wAMJg0ADDRVAAxbvgAMccoADHpSAAyUegAMph0ADNsGAA0/JgANQAUADUFuAA1MzgANVVgADZbDAA4MWAAPHHMAD4WyABAAAwAAAAAAAbBbAAW45QAF3rgABuOOAAdrgwAHccgACKAlAAnXXgAKT6UACo1qAAru7gALHHIAC25dAAwAAAAAAAD//bjl//3euP//a4P//3HIAACgJQABjjoAAxxyAAQAAAAAAAAAAA8qAAAfpQAAUJoAAG44AABxyAAAgPIAAJL2AACbBQAAtCUAALxyAADNggAA2C4AAOOOAADqeAAA7BYAAQS+AAEk+gABLjgAATYLAAFBawABRxsAAUzLAAGJ9QABuOUAAb6TAAHCkAABz6YAAjjlAAJ2CwADjjoABmQygH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAJAFqAAQBqgAMAZoAKgH+ACwA7gAEAOoABgH+ACwA9gAEAO4ADADqAA4B/gAsAO4ABgDqAAQA7gAoAOoAKgD2AAwABgAEAQYABAE2AAQBOgAEAWYAJgFqAAf//jjj//xxyAABxyP/+OOMAAOOQ//6qqgABVVgAAccgAAI46AAA447//VVVAAKqsAAEAAAAAAAAAAAAAAAAAAAABuOOABAAAw==","cmmi12":"AX0AEgAAAH8AYQAPAAkAIQA6AAsAAAAGt+FnowDAAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAADmO7B1HVuwASdQsBUYSLABJ0ywURhYsFUQU7BBGDOwdQxEsAEYObBtCFGwLRg+QAUDK8c1GCRHMAASwCEJCkABCxDHTRgfRx0LF8AVGAVAAQswQAAAM8AAADhHAQMgQEUBEMcpISxAHAAjRwEYLkAdLw9AcQEpQB0DNscBGD1HAQtCxx0hPEAcABhAARg1wAEYV0AUACNHARgHRl0YQ0cBGGAyAABgMgAAYDIAAGAyAAABUwAAAVMAACFkAAAhZAAAIUAAACFAAAAhQAAAIUcAACFHAAAhRwAAIZAAACFHAAAhkAAAIUcAAAEQAAABFwAAUnUAACHoATRSdQAAIWQAACjAMRhNsAEiTrAtGEqwSRVasBULS7BBGEGwdR1UsAEYWLBVEBGwWSEqsGErXLBJCEawAQNfsGUZVrBlFFCwFRhAsHUdVbcBGE+wCRg6sD0ZNLB1FUWwZQQysH0xXrB1MVmwWRQxsH0xR7BJGQngAAAJxwAACccAAGAhAABgIQAADMABISdAAAANwAAADkABCyXAASMVQAELHsdpKBpHHQMwwAEABKAAAAunOS8mwBgAAsANGF1AAAA3QAAAG0ABCyJHARgTRx0YFEAVCRlAAQsGgAEYL0ABAxxAHQNJQBEYLUABAx1HHQsWQCULA0ABAwhHARg/RwEhIdB4AAHAgAAAAAAAAARaEAAEqqgABP/8AAVYNAAFiXgABahIAAWqpQAGC9gABhewAAZTbAAGe0AABpL0AAapOQAGvhUABs27AAbXsAAG6OEABvBVAAbyPAAHD2QAB0LUAAdHGAAHTQQAB1TYAAdhLAAHgHQAB4gJAAeS8QAHo4kAB7jgAAe6xAAHvZ0AB9VQAAfc5wAIFJsACCBQAAgkAwAIJegACDlXAAhFMQAIccEACKjDAAjYKAAI4xAACOcYAAjnkAAI6qQACQS4AAkW+QAJIh0ACSOIAAkurAAJO7UACUWpAAlaDAAJbQQACZGNAAmilwAJtNgACcFlAAnQkwAJ9vcACflXAAoZHAAKJEAACi9hAApDSQAKccAACqPdAAqovwAKuRsACt+9AAsy7wALNWcAC5jdAAuooAALvo0AC+bZAAvsuAAL+QwADB9DAAwvYAAMQK8ADFuQAAxodAAMi5gADPFHAAz7AAANAJEADQH3AA0OMAANVCAADbQcAA7KZQAPKAgAD6qgAAAAAAABjjkABbjkAAXGQQAG448AB0FrAAdxyAAIbTsACddfAApPpQAKfUwACu7vAAsccQALZ4kADAAAAAAAAP/9uOT//cZB//9Ba///ccgAAG07AAGOOQADHHEABAAAAAAAAAAAGhQAACG4AABaFAAAbjkAAG9oAACJfAAAkvcAAJmZAAC2hQAAxe8AAM6zAADe0AAA4xUAAOZvAADudQAA8B8AAQJfAAEmKQABNVcAATbgAAE8cwABQgQAAUl8AAF7QwABq9sAAbVUAAG/AwAByXwAAi0IAAJ2CwADe0AABkivgH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAEAFqAAQBqgAMAZoAJgH+ACgA7gAEAOoABgH+ACgA9gAEAO4ADADqAA4B/gAoAO4ABgDqAAQA7gAkAOoAJgD2AAwABgAEAQYABAE2AAQBOgAEAWYAEgFqAAf//kJj//yEwAABvaP/+QmAAAN7Q//6xyAABTjgAAb2gAAItCP/9Y5AAApxwAAQAAAAAAAAAAAAAAAAAAAAG448AD6qg","cmmi5":"AXkAEgAAAH8AYAAPAAkAHgA6AAsAAAAGTw3aXABQAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAAD0MrBtHVuwASdPsBkYR7ABJ0uwSRhXsE0QUrAtGDOwbQxFsAEYP7BlCFCwJRhAQAEDKcctGCRHPAAPwBUJC0ABCxHHMRgjRx0LFsAZGARAAQsuQAAAM8AAADZHAQMcQEEBEccNITBAHAAeRwEYLEAdLxdAXQErQB0DNMcBGDlHAQtCxx0hPUAcABRAARg3wAEYWkAYAB5HARgHRUUYQUcBGF8yAABfMgAAXzIAAF8yAAABZAAAAWQAACBTAAAgUwAAIEAAACBAAAAgQAAAIEcAACBHAAAgRwAAIJAAACBHAAAgkAAAIEcAAAEQAAABFwAAVXYAACDoATRVdgAAIFMAACXAPRhNsAEiTrAlGEiwORVWsBkLSbAtGDqwbR1RsAEYV7BNEAywUSEnsFUrWbA5CEawAQNesFkZU7BZFE+wGRg7sG0dVLcBGEywBRg4sCkZMbBtFUSwWQQvsHExXbBtMViwURQtsHExQ7A5GQrgAAAKxwAACscAAF8hAABfIQAACcABIShAAAANwAAADkABCyHAASMVQAELGMdhKBpHHQMuwAEAA6AAAAinNS8mwAgAAsABGFxAAAA8QAAAG0ABCyJHARgQRx0YE0AZCRJAAQsGgAEYNUABAx1AHQNKQBEYKkABAx9HHQsZQCELA0ABAwVHARg+RwEhINBoAAHAdAAAAAAAAAdVWgAHr20ACImDAAjL4AAI2woACQTGAAlABgAJaUMACY49AAmOQAAJ0RYACgcjAAoiJgAKZA0ACnd9AAqK7QAKqrMACrjqAAq9qgAKy2YACtUQAArVWgAK590ACvHNAAsExgALNZoACz6aAAtkigALjkMAC53mAAuwZgALxyYAC9XWAAvV2gAL5nMAC/NTAAv7wAAMIToADF3mAAxkEAAMpnAADKqzAAyqtgANCvAADTBmAA09rQANPqAADUxgAA1RHQANUoYADXHTAA13gAANiYoADZizAA2vdgANs0AADdVgAA3gwAAOAXYADhfDAA4ugwAOOl0ADku2AA6c9gAOsGYADuOdAA8W0AAPGjYADxyAAA9KAwAPd4YAD++QABAcgAAQJM0AEEiWABB6ugAQk/oAEJeGABDCnQAQ+D0AEQZQABELcAARNhoAEVDWABFVZgARwg0AEcRTABHOSgASOPYAElEjABJx2gATpgMAFHeNABSLcwAVxzMAAAAAAAH0oAAFuOMABletAAbjjQAHccYACDymAAmdWgAJ110ACk+mAAqp2gAK7vAACxxzAAuPIwAMAAAAAAAA//244//+V63//3HGAAA8pgABjjoAAZ1aAAMccwAEAAAAAAAAAAAGwAAAQl0AAEqqAABuOgAAhEMAAI46AACS9gAAl7MAAL9KAADPowAA0n0AANjjAADxkwABFsAAARxzAAEhMAABKqoAASwWAAEwWgABOlAAAYWwAAG+kwAB2wYAAeOQAAHtPQACdg0AAscgAARxzQAJTXOAf4AAADuAAQA6gAGAf4ACADuAAwA6gAMAPYABgH+AAgA9gAEAO4ABADqAAYB/gAQAPYABADuAAwA6gAOAf4AEAD2AAQA7gAEAOoABgH+ABAA9gAUAPYAAADuAAQA6gAGAf4AGAD2AAQA7gAEAOoABgH+ABgA9gAEAO4ADADqAA4B/gAaAf4AHgH+ACABZgAQAWoABAGqAAwBmgAmAf4AKADuAAQA6gAGAf4AKAD2AAQA7gAMAOoADgH+ACgA7gAGAOoABADuACQA6gAmAPYADAAGAAQBBgAEATYABAE6AAQBZgASAWoAB//9xxv/+440AAI46//3HGgABHHP//lVTAAGqrQACOOYAAscg//yqpgADVVoABAAAAAAAAAAAAAAAAAAAAAbjjQAXjk0=","cmmi6":"AXoAEgAAAH8AXwAPAAkAIAA6AAsAAAAGEM2+zgBgAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAADyNLB1HVqwASdOsBUYRrABJ0qwTRhWsFUQULA1GDGwdQxCsAEYPbBtCE+wKRg/QAEDKsctGCNHQAAPwBkJC0ABCxHHPRgiRyELF8AVGARAAQssQAAAMcAAADVHAQMcQEUBEccRIS5AIAAgRwEYK0AhLxNAaQEoQB0DM8cBGDhHAQtBxx0hO0AcABVAARg2wAEYWEAUACBHARgHRlEYQEcBGF4yAABeMgAAXjIAAF4yAAABZAAAAWQAAB9TAAAfUwAAH0AAAB9AAAAfQAAAH0cAAB9HAAAfRwAAH5AAAB9HAAAfkAAAH0cAAAEQAAABFwAAUnUAAB/oATRSdQAAH1MAACTAQRhMsAEiTbApGEewSRVVsBULSbA1GDqwdR1RsAEYVrBVEAywWSEnsF0rWbBJCEWwAQNdsGEZVLBhFE6wFRg8sHUdU7cBGEuwBRg3sDEZMLB1FUSwYQQvsHkxXLB1MVewWRQtsHkxQ7BJGQjgAAAIxwAACMcAAF4hAABeIQAACsABISZAAAANwAAADkABCyHAASMWQAELGcdlKBpHIQMswAEAA6AAAAmnOS8lwAgAAsABGFtAAAA5QAAAG0ABCyFHARgQRyEYEkAVCRRAAQsFgAEYMkABAx1AHQNIQA0YKUABAx5HIQsYQCULA0ABAwZHARg+RwEhH9BwAAHAfAAAAAAAAAYS9QAGbQsAByEwAAd2hQAHoS0AB6qrAAfONQAIJesACC9oAAhL2wAIX0gACMNQAAjDUwAI8kAACQ8rAAkhpQAJJesACUcbAAlQGwAJWhMACWMQAAlskAAJccsACYl7AAmccAAJuVUACczNAAnxwwAJ//0ACiErAAo44AAKOWAACkeVAApNuwAKbogACon1AAqS9QAKzFMACufTAAsJeAALKqgACyslAAt2+wALnHAAC59FAAugsAALrI0AC7K1AAvHGAALy9gAC9/DAAvhpQAMAAAADALVAAwbfQAMRxgADFCVAAxmYwAMeksADHrFAAx/yAAMmCsADN9IAAz8MAANHG0ADVVQAA1nVQANaNgADYpoAA2/gAAOI6AADkqlAA5lcAAOhLsADsELAA7I+wAO0y0ADvHwAA8i0wAPOdMADz8gAA9oRQAPdq0AD3lYAA/49QAP/hUAEAWrABBZkwAQaTgAEHHAABF/+wASaisAEpXIABOOMAAAAAAAAe0LAAW45QAGPSgABuONAAdxyAAIEIAACWhlAAnXXQAKT6UACpm9AAru8AALHHMAC4ZDAAwAAAAAAAD//bjl//49KP//ccgAABCAAAFoZQABjjsAAxxzAAQAAAAAAAAAAA8NAABVUwAAbjgAAHCbAACEvQAAjcAAAJL1AACS+AAAoS0AAMQIAADSewAA2SAAANsFAADtjQAA9VgAAQl7AAEXtQABG4AAAS9oAAE0JQABNRsAATytAAGDUwABudgAAdVYAAHaEwAB3wMAAnYLAAKXswAEJesACAsQgH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAEAFqAAQBqgAMAZoAJgH+ACgA7gAEAOoABgH+ACgA9gAEAO4ADADqAA4B/gAoAO4ABgDqAAQA7gAkAOoAJgD2AAwABgAEAQYABAE2AAQBOgAEAWYAEgFqAAf//e0P//vaFAACEvf/97QsAAQl7//5xyAABjjgAAhL1AAKXs//845AAAxxwAAQAAAAAAAAAAAAAAAAAAAAG440AFHHA","cmmi7":"AX4AEgAAAH8AYgAPAAkAIAA6AAwAAAAGMGWXcgBwAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAADwOLBxHVywASdRsBUYSbABJ02wTRhZsFEQU7A1GDSwcQxFsAEYPbBpCFKwKRhCQAEDK8ctGCVHPAAQwCEJC0ABCxHHQRghRx0LGMAVGAVAAQsvQAAANcAAADlHAQMeQEUBEccZIS5AHAAjRwEYLUAdLxNAbQEqQB0DNscBGDxHAQtExx0hPkAcABZAARg3wAEYW0AUACNHARgHRlUYQ0cBGGEyAABhMgAAYTIAAGEyAAABZAAAAWQAACBTAAAgUwAAIEAAACBAAAAgQAAAIEcAACBHAAAgRwAAIJAAACBHAAAgkAAAIEcAAAEQAAABFwAAVXUAACDoATRVdQAAIFMAACfAPRhOsAEiULApGEqwSRVYsBULTLA1GD+wcR1UsAEYWbBREA6wWSEpsF0rXbBJCEiwAQNgsGEZV7BhFFGwFRhAsHEdVrcBGE+wBRg6sDEZMrBxFUawYQQxsHkxX7BxMVqwWRQwsHkxR7BJGQngAAAJxwAACccAAGEhAABhIQAADMABIShAAAANwAAAD0ABCyTAASMXQAELGsdlKBtHHQMvwAEABKAAAAqnOS8mwAwAAsAJGF5AAAA7QAAAHEABCyJHARgSRx0YFEAVCRVAAQsGgAEYM0ABAx1AHQNLQBEYLEABAx9HHQsZQCULA0ABAwhHARhBRwEhINB0AAHAfAAAAAAAAAVtuQAFx8sABmDeAAZ3iwAGw74ABueiAAcHHgAHElAAB2WZAAeQRwAHnkkAB6agAAgJwgAIGdIACCsnAAhO1wAIUUcACGCpAAht7gAIfKIACKCFAAiiwAAIrBsACLTSAAi7oAAI6a4ACOrSAAkFsgAJJJcACSoCAAlFGwAJXXkACWrlAAlsKwAJe8AACYPgAAmZ6QAJt44ACcLZAAnqJQAKHNsACiCHAApdRwAKXXkACpeFAAqwUAAKs34ACr6bAArLMgAKy8sACs6XAArXXgAK12IACv2SAAsJpQALGZ4ACx0nAAs5UAALTI4AC2uyAAt4XgALg9AAC5eXAAujKQALrosAC+IFAAwFtQAMGGcADFFHAAxzlQAMdDsADIouAAzDEgANHDcADTkVAA1rSwANgxAADb8CAA3FDgANz5IADeciAA4UpQAOLlcADjsXAA5JKQAOZRsADnpVAA7x9QAO+E4ADv1iAA8zBwAPRRkAD1veABA4PgARMMkAEW4lABI46QAAAAAAAddeAAW45QAGJTAABuOOAAdxxwAH5uUACTX3AAnXXgAKT6UACpZZAAru8AALHHIAC3/rAAwAAAAAAAD//bjl//4lMP//ccf//+blAAE19wABjjkAAxxyAAQAAAAAAAAAABT5AAAXtwAAYuAAAG45AAB9+QAAi64AAJL3AACUhQAAp/UAAMdpAADSfgAA3+UAAOEeAADssgAA+/AAAQmlAAEQ8AABHuAAATHHAAE5SQABOusAAT5gAAGCcAABt0IAAcsuAAHU2QAB2WkAAnXZAAJ2CwAD78AAB2XVgH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAJAFqAAQBqgAMAZoAKgH+ACwA7gAEAOoABgH+ACwA9gAEAO4ADADqAA4B/gAsAO4ABgDqAAQA7gAoAOoAKgD2AAwABgAEAQYABAE2AAQBOgAEAWYAJgFqAAf//ggf//wQQAAB9+f/+CCAAAPvy//6GFwABeesAAfflAAJ13gAA+/D//QwwAALz1wAEAAAAAAAAAAAAAAAAAAAABuOOABK68g==","cmmi8":"AXwAEgAAAH8AYQAPAAkAIAA6AAsAAAAG1wEXMgCAAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAADuOLBxHVuwASdQsBUYSLABJ0ywTRhYsFEQUrA1GDSwcQxEsAEYO7BpCFGwKRhBQAEDK8ctGCVHPAARwB0JCkABCxDHRRghRxkLGcAVGAVAAQsvQAAANMAAADdHAQMeQEEBEMchIS5AGAAjRwEYLUAZLxJAbQEpQBkDNccBGDxHAQtDxxkhPUAYABVAARg2wAEYWkAUACNHARgHRlkYQkcBGGAyAABgMgAAYDIAAGAyAAABZAAAAWQAACBTAAAgUwAAIEAAACBAAAAgQAAAIEcAACBHAAAgRwAAIJAAACBHAAAgkAAAIEcAAAEQAAABFwAAU3UAACDoATRTdQAAIFMAACfAPRhNsAEiT7ApGEmwSRVXsBULS7A1GD6wcR1UsAEYWLBREA+wVSEqsF0rXLBJCEewAQNfsGEZVrBhFFCwFRhAsHEdVbcBGE6wBRg6sDEZMrBxFUWwYQQzsHkxXrBxMVmwVRQxsHkxRrBJGQngAAAJxwAACccAAGAhAABgIQAADMABIShAAAANwAAADkABCyTAASMXQAELG8dlKBpHGQMvwAEABKAAAAunOS8mwAwAAsAJGF1AAAA5QAAAHEABCyJHARgTRxkYFEAVCRZAAQsGgAEYMEABAx1AGQNKQBEYLEABAx9HGQsYQCULA0ABAwhHARg/RwEhINB0AAHAfAAAAAAAAAS46AAFEvoABZe4AAXJtAAGBMIABiOUAAY46gAGZyAABpx4AAbfUAAG4AQABvHMAAdFuAAHXPIAB172AAd47AAHhbgAB4toAAeXBgAHq+AAB9mgAAfceAAH4uAAB+hSAAfuPgAIFwYACCqwAAg3gAAIRyQACFtKAAhnJAAIgAgACIfaAAiOugAItKYACL9QAAjBjAAI2hoACPSmAAkHngAJOOwACUlGAAmJ/AAJkc4ACbcIAAnDHgAJy+IACde8AAnaWgAJ5boACeZwAAnqtAAKGxAAChz0AAo6GgAKSUYAClCgAApWygAKeewACo5AAAqSDgAKwioACsZwAArHJAAK6y4ACxP0AAscfAALVWAAC4BAAAuFBAALj7AAC8oAAAwdxAAMMwIADHVgAAyI7gAMu8gADM26AAzSiAAM5igADREcAA0s2AANOPAADT8wAA1fDAANfkQADfJkAA33KAAN+24ADh00AA4quAAOVhgADwmIABAKBAAQU5wAEQAQAAAAAAABxxwABbjkAAYMPAAG444AB3HIAAe8TgAJApAACddeAApPpgAKk9AACu7uAAsccgALeJwADAAAAAAAAP/9uOT//gw8//9xyP//vE4AAQKQAAGOOgADHHIABAAAAAAAAAAAGWwAADCWAABtCgAAbjgAAHjkAACS9gAAmZgAAJ/+AACtCgAAyfQAANJ8AADk+gAA5bAAAOwQAADxyAABC9oAARjiAAEhbAABM44AATtgAAE/pAABQAAAAYC2AAG0RAABw44AAc08AAHY5AACXHQAAnYMAAPHIAAGsQCAf4AAADuAAQA6gAGAf4ACADuAAwA6gAMAPYABgH+AAgA9gAEAO4ABADqAAYB/gAQAPYABADuAAwA6gAOAf4AEAD2AAQA7gAEAOoABgH+ABAA9gAUAPYAAADuAAQA6gAGAf4AGAD2AAQA7gAEAOoABgH+ABgA9gAEAO4ADADqAA4B/gAaAf4AHgH+ACABZgAQAWoABAGqAAwBmgAmAf4AKADuAAQA6gAGAf4AKAD2AAQA7gAMAOoADgH+ACgA7gAGAOoABADuACQA6gAmAPYADAAGAAQBBgAEATYABAE6AAQBZgASAWoAB//+HHP//DjgAAHjk//4ccAAA8cj//pVUAAFqrAAB45AAAlx0//0qqAAC1VgABAAAAAAAAAAAAAAAAAAAAAbjjgARABA=","cmmi9":"AX0AEgAAAH8AYQAPAAkAIQA6AAsAAAAGNfmeIgCQAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAADsObB1HVuwASdQsBUYSLABJ0ywURhZsF0QUrA5GDOwdQxEsAEYO7BtCFGwLRhBQAUDK8cxGCRHPAASwCEJCkABCxDHTRggRx0LGcAVGAVAAQswQAAAM8AAADdHAQMfQEUBEMclIS5AHAAjRwEYLUAdLxFAcQEpQB0DNscBGD1HAQtCxx0hPEAcABVAARg1wAEYWkAUACNHARgHRlkYQ0cBGGAyAABgMgAAYDIAAGAyAAABZAAAAWQAACFTAAAhUwAAIUAAACFAAAAhQAAAIUcAACFHAAAhRwAAIZAAACFHAAAhkAAAIUcAAAEQAAABFwAAU3UAACHoATRTdQAAIVMAACfAPRhNsAEiT7AtGEmwSRVXsBULS7A5GECwdR1UsAEYWbBdEA+wVSEqsGErXLBJCEewAQNfsGUZVrBlFFCwFRg/sHUdVbcBGE6wCRg6sDUZNLB1FUWwZQQysH0xXrB1MViwVRQxsH0xRrBJGQngAAAJxwAACccAAGAhAABgIQAADMABIShAAAANwAAADkABCyXAASMWQAELHMdpKBpHHQMwwAEABKAAAAunQS8mwBgAAsANGF1AAAA4QAAAG0ABCyJHARgTRx0YFEAVCRhAAQsGgAEYL0ABAx1AHQNKQBEYLEABAx5HHQsXQCkLA0ABAwhHARg+RwEhIdB4AAHAgAAAAAAAAASRYAAE6EsABVoSAAWghAAF0isABfAwAAX9ngAGQ/IABmUgAAapjAAGuOIABspEAAcMAAAHHnwABzAwAAc1twAHPSQAB0s1AAdY9AAHa3QAB6JHAAelIAAHpesAB6kVAAeykAAH114AB/XgAAf7QAAH/NQACBlFAAgcbgAINgkACDjgAAhBQgAIeJIACH5XAAiFNAAIj8sACLMHAAi2MAAI5rQACQ97AAlEawAJUisACWcsAAlpYgAJdoIACXmrAAmLXAAJlxAACZewAAmX2QAJwHcACcmgAAnoSQAJ63IACgsMAAoLrgAKGRAACjsVAApAxwAKc9IACn/UAAp//AAKifAACrp0AAq8+wAK9oAACy9UAAswBwALMKcAC2rOAAu86wALyRIADBnnAAwrcAAMVK4ADHErAAxxhQAMg1QADKxOAAzJoAAMykAADOBQAAz4RAANJUcADY9nAA2VUAANmjcADaPZAA20IAAN7QUADnzSAA+HQAAP4ucAEHHAAAAAAAABunkABbjkAAX06QAG444AB3HHAAeTVwAI0MkACddeAApPpQAKjq4ACu7uAAsccgALcusADAAAAAAAAP/9uOT//fTp//9xx///k1cAANDJAAGOOQADHHIABAAAAAAAAAAAAykAABzgAABD9AAAbjkAAHTwAAB4GQAAkvcAAJpkAACvzgAAsPwAAMvuAADVpQAA6O4AAOk+AADp4AAA6skAAQfnAAEjZQABJL4AATTwAAFAogABQ/QAAUWJAAGGUgABunkAAb2iAAHHUAAB1VUAAkiwAAJ2CwADp4AABoZQgH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAEAFqAAQBqgAMAZoAJgH+ACgA7gAEAOoABgH+ACgA9gAEAO4ADADqAA4B/gAoAO4ABgDqAAQA7gAkAOoAJgD2AAwABgAEAQYABAE2AAQBOgAEAWYAEgFqAAf//ixD//xYgAAB08P/+LEAAAOng//6hMAABXtAAAdPAAAJIsP/9QmAAAr2gAAQAAAAAAAAAAAAAAAAAAAAG444AEHHA","cmmib10":"AX0AEgAAAH8AYgAPAAkAIAA6AAsAAAAGREaJlACgAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNTUlCAAAAAAAAAAAAAAAAAAAAAADqLKB1HVqgASdPoBkYSKABJ02gTRhdoFkQVKA1GDCgdQxFoAEYPKBpCFOgLRhEQAEDLscdGCBHQAASwCUJDEABCw3HORgiRyELGsAZGAVAAQsvQAAAMMAAADlHAQMeQEUBDccVITRAIAAmRwEYNUAhLxFAbQEoQCEDOscBGD5HAQtDxyEhPUAgABRAARg3wAEYXEAYACZHARgHRlUYQUcBGGEyAABhMgAAYTIAAGEyAAABZAAAAWQAAB1TAAAdUwAAHUAAAB1AAAAdQAAAHUcAAB1HAAAdRwAAHZAAAB1HAAAdkAAAHUcAAAEQAAABFwAAVnUAAB3oATRWdQAAHVMAACfAQRhRoAEiTqAtGEqgSRVXoBkLSaA1GDagdR1VoAEYXaBZEA6gUSEpoF0rW6BJCEKgAQNgoGUZWaBlFEygGRg/oHUdUKcBGFKgBRg4oDEZK6B1FUegZQQyoHkxX6B1MVigURQxoHkxRqBJGQngAAAJxwAACccAAGEhAABhIQAAC8ABISpAAAAQwAAAD0ABCyXAASMYQAELHMdhKBdHIQMvwAEABLAAAAq3PS8kwAwAAsAJGF5AAAA7QAAAH0ABCyNHARgWRyEYE0AZCRVAAQsGgAEYM0ABAxtAIQNLQBEYLUABAyFHIQsZQCkLA0ABAwhHARhARwEhHdBwAAHAfAAAAAAAAAUccAAFkgMABkvaAAZ6CwAGl7MABqT4AAbHGgAHBbAAByfQAAeIiAAHk+oAB7u6AAgiIAAILYIACDb7AAhVUgAIVVMACFsCAAh1kgAIdgoACIAAAAisjQAIt+0ACNuVAAjhqAAI/SUACREOAAkWwwAJMzAACTrGAAlbAgAJcMMACXHFAAmZmAAJnWIACajDAAnBagAJyfMACg41AAoWvgAKGZgACiA6AAovoAAKgtUACotgAAqONgAKrnMACru4AArLEwAK2CsACuVyAArrIgAK+VoACwWtAAsQlQALFVMAC1NuAAtmYgALaEoAC2yiAAt8MAALfSYAC5HFAAvYKgAL9JoADBa9AAwiHgAMK5oADERAAAxcbgAMze0ADOOKAAz2CAANEjAADU29AA1i+AANdb4ADdzKAA3gIAAN5dAADek6AA31JQAOD/0ADik7AA4wDgAOT6AADwKLAA8nzgAPNJsAD1VQAA+J8AAPmZYAD7dzABCEugARfSMAEkWrABJmYAAAAAAAAn0oAAXHHQAGQf4ABxxyAAeOOgAICRsACV5wAAooowAKT6UACvpQAAsXkwALHHIAC5dTAAwAAAAAAAD//ccd//5B/v//jjoAAAkbAAFecAABjjoAAxxyAAQAAAAAAAAAABE+AAAkCAAAS9oAAHHGAAB7vQAAgtgAAItiAACXtQAAnHIAAKyQAADGCwAA3HIAAN9KAAD+lQAA/sgAAQWwAAEajQABHd4AATF+AAE+kwABREUAAVESAAGccgABxEUAAdPqAAHdTgACJ9MAAnpQAAKOOAAEFsAABzMygH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAEAFqAAQBqgAMAZoAJgH+ACgA7gAEAOoABgH+ACgA9gAEAO4ADADqAA4B/gAoAO4ABgDqAAQA7gAkAOoAJgD2AAwABgAEAQYABAE2AAQBOgAEAWYAEgFqAAf//fSj//vpQAACC2P/99KAAAQWw//53eAABiIgAAgtgAAKOOP/87vAAAxEQAAQAAAAAAAAAAAAAAAAAAAAHHHIAEmZg","cmmib6":"AXsAEgAAAH8AYQAOAAkAHwA6AAwAAAAGMdAa6ABgAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNTUlCIFYyLjIAAAAAAAAAAAAAAADyJ6BxHVugASdPoCEYSKABJ0ugQRhaoFEQVKA1GDGgcQxFoAEYPaBlCFOgLRhDQAEDLLcVGB9HTAAPsCUJC0ABCxG3KRgkRx0LGbAhGAVAAQswQAAAMrAAADlHAQMbQEkBEbcNITVAHAAgRwEYM0AdLxZAaQEqQB0DNrcBGDtHAQtEtx0hPEAcABJAARg3sAEYXEAgACBHARgHRUUYQEcBGGAyAABgMgAAYDIAAGAyAAABZAAAAWQAAB5TAAAeUwAAHkAAAB5AAAAeQAAAHkcAAB5HAAAeRwAAHpAAAB5HAAAekAAAHkcAAAEQAAABFwAAVYYAAB7YATRVhgAAHlMAACWwTRhRoAEiTqAtGEmgPRVWoCELR6A1GC2gcR1SoAEYWqBREAygVSEmoFkrWaA9CEGgAQNfoF0ZV6BdFEqgIRg4oHEdUKcBGE2gARg0oDEZKKBxFUagXQQvoHUxXqBxMVigVRQuoHUxQqA9GQnQAAAJtwAACbcAAGAhAABgIQAACrABISlAAAANsAAADkABCyKwASMYQAELFbdhKBdHHQMwsAEAA7AAAAi3OS8jsAgAArAFGF1AAAA/QAAAHEABCyJHARgURx0YE0AhCRBAAQsGcAEYOkABAx1AHQNMQBEYK0ABAyFHHQsaQBkLA0ABAwRHARg+RwEhHsBsAAGweAAAAAAAAAaXswAHJ9MACFdAAAhZIwAIWwgACK2FAAi0IAAI8rsACP4YAAkDzQAJkgMACZPrAAogPQAKKbgACjb9AAo38AAKPKsAClENAAqA9QAKjjgACqT9AAq37QAKu7gACs3wAArTcAAK9KMACy2AAAtTcAALXOsAC2R9AAuLTQALoD0AC8NTAAvu8AAL9KAADAHlAAwGowAMEJUADFzrAAxsUAAMiIsADJAdAAyeWAAMskMADPaFAA0YdQANJ9AADSfTAA0xRQANMUsADUFrAA1dYwANgPAADbnVAA26UwANu3sADbu9AA29pQAN440ADhH9AA4x2AAOPKsADlc9AA6A8AAOsj0ADt1gAA7u8AAO9oMADv4TAA9aPQAPesgAD441AA/XYwAQHMgAECedABBPowAQkgAAEJprABCwsAAQtmMAEMFoABDp4AAQ6/MAEPnTABFkewARy4sAEfI7ABH6TQASbYAAEovVABKXrQAS5XAAFFc7ABT0mAAVi9MAFjFFAAAAAAACqqsABccdAAawXQAHHHMAB447AAjASwAKKKUACjoIAApPpQAK+lAACxxzAAu84AAMAAAAAAAA//3HHf/+sF3//447AADASwABjjsAAjoIAAMccwAEAAAAAAAAAAAAAwAAA8gAACC4AABxyAAAhbAAAJXNAACXtQAAmZsAAKA9AAC6UAAAuqsAAMWwAADIiAABAAAAARJ9AAEpiAABLYMAATFQAAEzMwABNoUAATjjAAGXOwAB0CAAAeZlAAH/bQACLYUAAnpQAAMAAAAEzMsACMkFgH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAJAFqAAQBqgAMAZoAKgH+ACwA7gAEAOoABgH+ACwA9gAEAO4ADADqAA4B/gAsAO4ABgDqAAQA7gAoAOoAKgD2AAwABgAEAQYABAE2AAQBOgAEAWYAJgFqAAf//ZmX//szNAACZm//9mZsAATM1//4zMwABzNAAAmZrAAMABQABMzP//GZoAAOZoAAEAAAAAAAAAAAAAAAAAAAABxxzABbI+w==","cmmib7":"AXkAEgAAAH8AYAAOAAkAHwA6AAsAAAAGACrX0wBwAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNTUlCIFYyLjIAAAAAAAAAAAAAAADwKqBxHVmgASdOoBkYR6ABJ0qgSRhaoFUQU6AxGDCgcQxEoAEYPKBlCFGgKRhCQAEDLLcVGB9HQAAQsCUJC0ABCw63NRgkRx0LGLAZGARAAQsuQAAAMLAAADdHAQMbQEUBDrcNITRAHAAhRwEYMkAdLxRAaQEoQB0DOLcBGDpHAQtBtx0hO0AcABJAARg2sAEYW0AYACFHARgHRU0YP0cBGF8yAABfMgAAXzIAAF8yAAABZAAAAWQAAB1TAAAdUwAAHUAAAB1AAAAdQAAAHUcAAB1HAAAdRwAAHZAAAB1HAAAdkAAAHUcAAAEQAAABFwAAVHYAAB3YATRUdgAAHVMAACWwQRhQoAEiTKApGEigPRVVoBkLRqAxGC2gcR1SoAEYWqBVEAygUSEmoFkrWKA9CECgAQNeoF0ZVqBdFEmgGRg5oHEdT6cBGE2gBRgzoC0ZJ6BxFUWgXQQxoHUxXaBxMVegURQvoHUxQ6A9GQjQAAAItwAACLcAAF8hAABfIQAACrABISlAAAAPsAAADUABCyKwASMXQAELGbdhKBZHHQMusAEAA7AAAAm3OS8jsAgAArABGFxAAAA9QAAAHkABCyJHARgVRx0YE0AZCRFAAQsGgAEYNUABAxxAHQNLQBEYK0ABAyBHHQsaQCELA0ABAwVHARg+RwEhHcBsAAGweAAAAAAAAAXvwAAGdmUAB3vQAAeZVwAHxYAAB89iAAfjkAAINaUACFb5AAhsGQAIwxAACPanAAlZIgAJW9cACV/pAAluiQAJhoUACYbrAAmxuQAJvV4ACcnVAAnnFQAJ/rcACg8LAAoa1wAKIrAACmD+AApqeQAKe4kACoLbAAqqewAK1PAACt/rAAr8fgALAi4ACwtiAAs2DgALORkAC39JAAuNawALjfcAC5MZAAvMaQAL0BIADCSSAAwlIAAMJXkADC/1AAw0BwAMWHcADGxOAAx6MAAMmRIADKZZAAzFOwAMyMAADNU+AAznpQANBScADRQSAA0qiwANR4cADXd5AA2jWwAN01AADdPbAA3X+wAN5GAADkvpAA50BQAOeekADrmgAA8DFwAPEMAADxwwAA9/WQAPgY4AD47gAA+UkAAPnNsAD8YOAA/QLgAP1/sAECpFABCsawAQ0ksAENfHABFE4gARTTcAEWPFABGdrgAS2UcAE5cuABQ7IgAUtg4AAAAAAAKaaQAFxx4ABpLwAAcccgAHjjkACJCrAAoBTgAKKKUACk+lAAr6UAALHHIAC7GpAAwAAAAAAAD//cce//6S8P//jjkAAJCrAAGOOQACAU4AAxxyAAQAAAAAAAAAAARyAAAdhwAAQTkAAHHHAACFsAAAkXkAAJe1AACd8AAAnuIAAL67AADN0AAA0KkAANKyAAEAAAABFo4AASLyAAEpLgABLGAAATWlAAE66wABOyAAAZW+AAHMmQAB2jcAAfNAAAIxlQACelAAAtdeAASLyQAIF5WAf4AAADuAAQA6gAGAf4ACADuAAwA6gAMAPYABgH+AAgA9gAEAO4ABADqAAYB/gAQAPYABADuAAwA6gAOAf4AEAD2AAQA7gAEAOoABgH+ABAA9gAUAPYAAADuAAQA6gAGAf4AGAD2AAQA7gAEAOoABgH+ABgA9gAEAO4ADADqAA4B/gAaAf4AHgH+ACABZgAQAWoABAGqAAwBmgAmAf4AKADuAAQA6gAGAf4AKAD2AAQA7gAMAOoADgH+ACgA7gAGAOoABADuACQA6gAmAPYADAAGAAQBBgAEATYABAE6AAQBZgASAWoAB//9uh//+3Q4AAJF5//26GwABIvL//kuVAAG0awACReUAAtde//yXKQADaNcABAAAAAAAAAAAAAAAAAAAAAcccgAU9xI=","cmmib8":"AX4AEgAAAH8AYwAOAAkAIAA6AAwAAAAGojUtLgCAAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNTUlCIFYyLjIAAAAAAAAAAAAAAADuLKB1HVugASdQoB0YSaABJ06gTRhdoFkQVqA1GDCgdQxGoAEYP6BpCFSgLRhFQAEDLbcZGCBHQAARsCUJDEABCw63ORglRyELGrAdGAVAAQsvQAAAMbAAADpHAQMdQEkBDrcRITZAIAAkRwEYNUAhLxRAbQEpQCEDO7cBGD1HAQtEtyEhPkAgABJAARg5sAEYXkAcACRHARgHRVEYQkcBGGIyAABiMgAAYjIAAGIyAAABZAAAAWQAAB5TAAAeUwAAHkAAAB5AAAAeQAAAHkcAAB5HAAAeRwAAHpAAAB5HAAAekAAAHkcAAAEQAAABFwAAV3YAAB7YATRXdgAAHlMAACiwQRhToAEiT6AtGEugRRVYoB0LSqA1GDSgdR1VoAEYXaBZEA2gVSEnoF0rXKBFCEOgAQNhoGEZWaBhFEygHRg8oHUdUacBGFKgCRg3oDEZKqB1FUigYQQzoHkxYKB1MVqgVRQyoHkxR6BFGQnQAAAJtwAACbcAAGIhAABiIQAAC7ABIStAAAAQsAAAD0ABCyKwASMYQAELG7dlKBdHIQMvsAEABLAAAAq3PS8msAwAArAFGF9AAABAQAAAH0ABCyNHARgWRyEYFUAdCRNAAQsGgAEYOEABAxxAIQNNQBUYLkABAyFHIQsZQCkLA0ABAwhHARhBRwEhHsBwAAGwfAAAAAAAAAVxygAF8VAABtdCAAbhrAAHCBQAByjMAAdHIAAHT6gAB59OAAfbCAAH7BoACDHKAAiGaAAIszgACLyyAAjPqAAI2DAACO9MAAkBbAAJAXIACRZMAAkvbAAJQHwACWHcAAl3BAAJe74ACaT4AAm0pgAJwH4ACczSAAnmagAKAdoAChsOAApGqAAKRqoACkiMAApLagAKTFoACpYOAAqZnAAKy2gACs2IAArSCgAK+8AACyZsAAsu8gALYxwAC27yAAtu9gALbzwAC30sAAuHIgALoqAAC64EAAu3fgALvawAC9dkAAwFPgAME+4ADCiMAAwqrgAMO4QADD3AAAxJDAAMiI4ADLBgAAzYNAAM+OwADP+OAA0RFgANE/AADX+8AA2qsAANrvYADeNMAA4vzgAONZwADj+aAA6rDgAOtX4ADrswAA67OgAOwXIADumiAA785AAO/pwADz6cAA/VEgAP+OgAD/3kABBVXgAQZm4AEIRKABCgwAARutYAEpEYABM9LgATmaQAAAAAAAKOOAAFxx4ABnXEAAcccgAHjjoACGFKAAnI0gAKKKQACk+mAAr6UAALHHIAC6awAAwAAAAAAAD//cce//51xP//jjoAAGFKAAGOOgAByNIAAxxyAAQAAAAAAAAAAAACAAAJxgAAMNIAAFmYAABxxgAAhbAAAItiAACXtAAAnd4AAKQGAADBxgAA0+gAANbAAADk+AABAAAAARbCAAEZmAABIxYAAS6AAAE7ugABPHIAAT0mAAGTNAAByIgAAdESAAHqGAACLYQAAnpQAAK45gAEWwgAB5KCgH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAJAFqAAQBqgAMAZoAKgH+ACwA7gAEAOoABgH+ACwA9gAEAO4ADADqAA4B/gAsAO4ABgDqAAQA7gAoAOoAKgD2AAwABgAEAQYABAE2AAQBOgAEAWYAJgFqAAf//dJ7//uk+AACLYv/90nwAARbE//5d3AABoiYAAi2IAAK46gABFsL//Lu6AANETAAEAAAAAAAAAAAAAAAAAAAABxxyABOZpA==","cmmib9":"AX4AEgAAAH8AYwAOAAkAIAA6AAwAAAAGV8o2zQCQAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNTUlCIFYyLjIAAAAAAAAAAAAAAADsLKB1HVugASdQoB0YSaABJ06gTRheoFkQVaA1GDCgdQxGoAEYPKBpCFSgLRhFQAEDLbcZGCBHQAARsCUJDEABCw63ORgiRyELGrAdGAVAAQsvQAAAMbAAADpHAQMdQEkBDrcRITVAIAAmRwEYN0AhLxJAbQEpQCEDO7cBGD1HAQtEtyEhP0AgABNAARg5sAEYXUAcACZHARgHRVUYQkcBGGIyAABiMgAAYjIAAGIyAAABZAAAAWQAAB5TAAAeUwAAHkAAAB5AAAAeQAAAHkcAAB5HAAAeRwAAHpAAAB5HAAAekAAAHkcAAAEQAAABFwAAV3YAAB7YATRXdgAAHlMAACewQRhSoAEiT6AtGEugRRVYoB0LSqA1GDSgdR1WoAEYXqBZEA2gUSEooF0rXKBFCEOgAQNhoGUZWqBlFE2gHRhAoHUdUacBGFOgBRg4oDEZK6B1FUigZQQzoHkxYKB1MVmgURQyoHkxR6BFGQnQAAAJtwAACbcAAGIhAABiIQAAC7ABISpAAAAQsAAAD0ABCyWwASMYQAELHLdhKBdHIQMvsAEABLAAAAq3PS8ksAwAArAJGF9AAAA+QAAAH0ABCyNHARgWRyEYFUAdCRRAAQsGgAEYNkABAxtAIQNMQBUYLkABAyFHIQsZQCkLA0ABAwhHARhBRwEhHsBwAAGwfAAAAAAAAAVCWwAFvFkABonJAAar7AAGyaAABtm+AAb/+QAHJowAB1zlAAetLgAHuxcAB/NZAAhVAgAIYpQACHWMAAiSAAAIlckACKHLAAir5wAIv9QACMNOAAjp3AAI8W4ACRpnAAkkBAAJO7kACVm8AAlimwAJdi4ACXdwAAmfRQAJsTcACbz7AAnolwAJ68AACfFwAAn67AAKBVsAClJ5AApTQAAKZwIACnJkAAp1wgAKuIkACtUAAAraYAAK/rUACwtVAAsLWQALFAQACyF5AAs/LAALQbcAC0WCAAtHuQALXVwAC2jnAAuibAALudAAC8mHAAvKPgALzCQAC9EwAAvUwAAMJoUADEgFAAxsrgAMgYwADIzuAAyfPgAMrfQADSAUAA08BAANSCwADW8UAA20vgANvfQADc9rAA44bAAOPucADkSXAA5JSQAOU3cADnCsAA6IBAAOiwsADrnLAA9gEgAPhusAD477AA/HEAAP6+UAEA6AABAVngARDn4AEfe7ABK2ywAS7uAAAAAAAAKEvgAFxxwABlsHAAcccgAHjjkACDRXAAmSxwAKKKQACk+lAAr6UAALHHIAC54nAAwAAAAAAAD//ccc//5bB///jjkAADRXAAGOOQABkscAAxxyAAQAAAAAAAAAAA3uAAAPLgAAP9cAAGySAABxxwAAhbAAAIakAACXtAAAnRUAAKjFAADEJQAA2KcAANt+AADzNAABAAAAAQ1FAAEb9wABHlcAATArAAE9oAABQHkAAUtgAAGatQAByfQAAdIEAAHi/AACKlsAAnpQAAKhLgAENRUAB12LgH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAJAFqAAQBqgAMAZoAKgH+ACwA7gAEAOoABgH+ACwA9gAEAO4ADADqAA4B/gAsAO4ABgDqAAQA7gAoAOoAKgD2AAwABgAEAQYABAE2AAQBOgAEAWYAJgFqAAf//eVz//vK7AACGpP/95XUAAQ1H//5sFwABk+sAAhqOAAKhMgABDUX//NgwAAMn1QAEAAAAAAAAAAAAAAAAAAAABxxyABLu4A==","cmr10":"AUQAEgAAAH8AJAAQAAoABQBYAAoAAAAHS/FgeQCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADqEsAAAB7AAAAcwAAAFsAAABTAAAAawAAAGMAAABzAAAAYwAAAHMAAABjAAAAQ0BEKD9AAAA/QAAAe0AAAHtAAAAEwAAACOAAACtAAAArQAAAKkAAACtAAAApgAAAa0AAACAYAAAvQAAAYMAAAHDAAAApVAAAfwAAAIsAAABziAAABMAEAAdABFwrQAAAe1wAACvMAAB7zAAAc0AAAAdABEgX5AAAF+QAACvAAABx0AAABGAAAAzABFQEQAAAK+QAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAEwAAABOAAAAUgAABwhAAAJSAAACdABGBzQAAAawAFMF8AAABjAAAAbwAE1FcAAABPAASQdwAAAGsAAAATAAVcMwAAAHMABKhLAAVIgwAAAGsAAABzAATUVwAEeHMgAABnAAUwPwAAAGMABLhrAAAAawAUkI8AFJBrAASoawAkvEcAAAAH5AAAK0AAAAfkAAArQAAABsAAAAdABEQowAUgP0AFCCDABQA/QAAAIMAAAAtARAgo4BVYP0AE6AbAAAAK4AAAO0AEZAdAAAB4wAToPMAE6CjABQg84AUINOAAABjAAAAcwAAAFgAFKDzABSw4wBRkYMAUaDjAAAA44BR8IMAAACjANFiEwDAAK0AAACrAAAAqwAAAAAAAAAARxyAAE45AABVVWAAXHHQAGOOUABkRGAAZPpgAHHHMAB447AAgAAgAIAAMACDjlAAhxyAAIccoACOOQAAlVWAAJxx4ACgACAApxygAKqq0ACuOQAAsccwALVVgAC447AAvHHgAMAAIADDjmAAxxygAMjjsADVVYAA5xygAOqq0AEAADABA45gAQccoAAAAAAAGwWwAF3rgABuOOAAgAAAAIccgACRWdAAlVVgAJ114ACg46AApPpQAKr40ACu7uAAsccgALtgsADAAAAAAAAP/93rgAAMcdAADjjgABVVYAAY46AAK44wADHHAAAxxyAAQAAAAAAAAAADjjAABmZgAAccgAAT6VAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/7jjj/+uONAAE+lQABxx3//xxy//+OOP/+qqr//jjjAABxyAAA444AAAAAAAVVVgACqqsAAccdAAbjjgAQAAMAAccd","cmr12":"AUIAEgAAAH8AIgAQAAoABQBYAAoAAAAHWKtRCwDAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADmD8AAABzAAAAawAAAE8AAABHAAAAXwAAAFcAAABrAAAAVwAAAGsAAABXAAAAN0BEKDNAAAAzQAAAc0AAAHNAAAAEwAAACOAAACdAAAAnQAAAJkAAACdAAAAlgAAAX0AAABwYAAAnQAAAVMAAAGjAAAAlVAAAdwAAAIMAAABriAAABMAEAAdABFwnQAAAc1wAACfMAABzzAAAa0AAAAdABEgX5AAAF+QAACfAAABp0AAABGAAAAzABFQEQAAAJ+QAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAEwAAABOAAAAUgAABohAAAISAAACNABGBrQAAAXwAFMFMAAABXAAAAYwAE1EsAAABDAASQbwAAAF8AAAATAAVcKwAAAGcABKg/AAVIewAAAF8AAABrAATUSwAEeGsgAABbAAUwMwAAAFcABLhfAAAAXwAUkIcAFJBfAASoXwAkvDsAAAAH5AAAJ0AAAAfkAAAnQAAABsAAAAdABEQkwAUgM0AFCBzABQAzQAAAHMAAAAtARAgk4BVYM0AE6AbAAAAK4AAAL0AEZAdAAABwwAToMMAE6CTABQgw4AUILOAAABTAAAAYwAAAFgAFKDDABSwswBRkVMAUaCzAAAAs4BR8HMAAACTANFh8wDAAJ0AAACbAAAAmwAAAAAAAAAARaEAAEyXgABTjgAAWm3QAGF7AABi34AAb2gAAHZegAB9VQAAgMTwAIRLgACLQgAAkjiAAJkvAACcnvAAo5VwAKccAACqi/AArfvQALGCcAC1CQAAuHjwALvo0AC/b3AAwt9QAML2AADErgAA0OMAAOI/8ADlr9AA+qoAAP4Z8AEBidAAAAAAABjjkABcZBAAbjjwAIAAAACHHIAAkJeQAJOOAACddfAAoOOQAKT6UACp58AAru7wALHHEAC7YLAAwAAAAAAAD//cZBAADHHAAA448AATjgAAGOOQACuOMAAxxwAAMccQAEAAAAAAAAAAA3tAAAZEQAAG9oAAEdoQBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+6Xw//r/iQABHaEAAb2g//8hMP//kJj//rHI//5CYAAAb2gAAN7QAAAAAAAFOOAAApxwAAG9oAAG448AD6qgAAG9oA==","cmr17":"AUMAEgAAAH8AJAAQAAkABQBYAAoAAAAHRNPtdAEUeuAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADbEMAAAB7AAAAbwAAAFMAAABLAAAAYwAAAFsAAABvAAAAWwAAAG8AAABbAAAAO0BEKDNAAAAzQAAAd0AAAHdAAAAEwAAACNwAACdAAAAnQAAAJkAAACdAAAAlgAAAY0AAABwYAAAnQAAAWMAAAGzAAAAlVAAAfwAAAIsAAABviAAABMAEAAdABFwnQAAAe1wAACfMAAB7zAAAb0AAAAdABEgX4AAAF+AAACfAAABt0AAABFwAAAzABFQEQAAAJ+AAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAEwAAABNwAAAUcAABshAAAIRwAACNABGBvQAAAYwAFMFcAAABbAAAAZwAE1E8AAABHAASQcwAAAGMAAAATAAVcKwAAAGsABKhDAAVIgwAAAGMAAABvAATUTwAEeG8cAABfAAUwNwAAAFsABLhjAAAAYwAUkI8AFJBjAASoYwAkvD8AAAAH4AAAJ0AAAAfgAAAnQAAABsAAAAdABEQkwAUgN0AFCBzABQA3QAAAHMAAAAtARAgk3BVYN0AE6AbAAAAK3AAAL0AEZAdAAAB4wAToNMAE6CTABQg03AUILNwAABTAAAAYwAAAFgAFKDTABSwswBRkWMAUaCzAAAAs3BR8HMAAACTANFiEwDAAJ0AAACbAAAAmwAAAAAAAAAAP+igAEaYkABNSIAAU94gAFqoUABb/sAAaAgwAG64IAB1aAAAeLLgAHwX8AB/0VAAgsfgAIaBQACQJ7AAk3KAAJoicACdh5AAoNJgAKQdMACnglAAqudgAK4yMACxfRAAtOIgALgs8AC4R0AAueygAL+58ADFpxAA1lHAANmckADq0BAA8RFwAPRcQAAAAAAAFPzgAFsHMABuNLAAf/vAAIcaYACPPgAAkDzwAJ1v4ACg4oAApQVAAKfuUACu5bAAsccgALtYkAC/xQAAAAAP/9sLcAAMcuAADf3gABBBMAAY5bAAK5HwADHLUAA/yTAAAAAAAANX8AAGBMAABq/wAA8swAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//wBdv/7YcoAAPLMAAGr+///KgP//5UB//6/BP/+VAUAAGr/AADV/QAAAAAABNSIAAKB+AABq/sABuNLAA6tAQABq/s=","cmr5":"ATEAEgAAAH8AIQAQAAoABQBJAAkAAAAHhgObWgBQAAAcVGVYIHRleHQgd2l0aG91dCBmLWxpZ2F0dXJlcwAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAAD0DsAAABvAAAAZwAAAEsAAABDAAAAWwAAAFMAAABnAAAAUwAAAGcAAABTAAAAJ2AAACdgAAAHQAAABSAAACEgAAAEwAAACOAAACdAAAAnQAAAJkAAACdAAAAlgAAAW0AAABwcAAAnQAAAUMAAAGTAAAAlUAAAcwAAAHsAAABniAAABMAEAAdABCAnQAAAb2AAACfMAABvzAAAZ0AAAAdABAwX5AAAF+QAACfAAABm2AAABGAAAAzABBgEQAAAJ+QAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAEwAAABOAAAGXUAABkhAAAZdQAACNABCRnQAAAWwAE9E8AAABTAAAAXwAEmEcAAAA/AARUawAAAFsAAAATAAUgKwAAAGMABGw7AAUMdwAAAFsAAABnAASYRwAEPGcgAABXAAT0MwAAAFMABHxbAAAAWwAUVH8AFFRbAARsWwAkgDcAAAAH5AAAJ0AAAAfkAAAnQAAABwAAAAdABAgkwATkM0AEzBzABMQzQAAAHMAAAAtAQAAk4BUcM0AErAcAAAALIAAAL0AEKAdAAABswASsMMAErCTABMww4ATMLOAAABTAAAAYwAAAFgAE7DDABPAswBQoUMAULCzAAAAs4BRAHMAAACTANByAwDAAJ0AAACcAAAAnAAAAAAAAAAAZxzQAHAAYAB45AAAfpRgAIqrMACMcmAAnHJgAKVWAACuOaAAsRHQALcdMADAANAA0cgAANSgMADdg9AA448wAOZnYADpP6AA70sAAPVWYAD4LqAA+wbQAQESMAED6mABBx2gAQiJ0AEY5NABLYQwATBcYAFREqABU+rQAVxzMAAAAAAAH0oAAGV60ABuONAAgAAAAIccYACUnzAAmdWgAJ110ACg46AApPpgAKqrMACuBNAAsccwALtg0ADAAAAAAAAP/+V60AAMcdAADjjQABjjoAAZ1aAAKqswACuOYAAxxzAAQAAAAAAAAAAEcdAACAAAAAjjoAAWk9AGyAAIBMgAGAYABcACcAIgA/gAKAIYACgC0Ae4AtAHyAYAAOgGAADwBhgAMAZYAEAGGABABvgASAY4AEAEGABQBvgAQAZYAEAGGABAAugAWALIAFAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABABDgAQAR4AEgFGABAB5gAQAZYAFAG+ABQBygAUAYYAFAEGABYB1gAUAWIAEAFeABABBgAQAVoAEgFmABAB0gAQAdYAEAGKABAB5gAQAdoAEgHeABABogASAa4AEAGWABwBvgAcAeIAEAGSABwBjgAcAcYAHAHaABABqgAgAeYAEgHeABAB0gAQAQ4AEAE+ABABHgAQAVYAEAFGABABUgAUAWYAFAFaABoBXgAaAaoAHgEmAB//5jjP/+NJ2AAI45v/+443//3HG//5VU//9xxoAAI46AAEccwAAAAAAB45AAANVWgACOOYABuONABXHMwACOOY=","cmr6":"AUUAEgAAAH8AJQAQAAoABQBYAAoAAAAHuUFhqABgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADyEcAAAB7AAAAcwAAAFcAAABPAAAAZwAAAF8AAABzAAAAXwAAAHMAAABfAAAAP0BEKDtAAAA7QAAAf0AAAH9AAAAEwAAACOAAACtAAAArQAAAKgAAACtAAAApgAAAZ0AAABwYAAArQAAAXMAAAHDAAAApUAAAgwAAAIsAAABziAAABMAEAAdABFwrQAAAe1wAACvMAAB7zAAAc0AAAAdABEgX5AAAF+QAACvAAAByVAAABGAAAAzABFQEQAAAK+QAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAEwAAABOAAAAUgAABwhAAAJSAAACdABGBzQAAAZwAFMFsAAABfAAAAawAE1FMAAABLAASQdwAAAGcAAAATAAVcLwAAAG8ABKhHAAVIhwAAAGcAAABzAATUUwAEeHMgAABjAAUwNwAAAF8ABLhnAAAAZwAUkI8AFJBnAASoZwAkvEMAAAAH5AAAK0AAAAfkAAArQAAABsAAAAdABEQowAUgN0AFCBzABQA3QAAAIMAAAAtARAgo4BVYN0AE6AbAAAAK4AAAM0AEZAdAAAB4wAToNMAE6CjABQg04AUIMOAAABTAAAAYwAAAFcAFKDTABSwwwBRkXMAUaDDAAAAw4BR8HMAAACjANFiQwDAAK0AAACrAAAAqwAAAAAAAAAAWhKwAGJegABqqlAAcU1QAHtCAAB86tAAi9mwAIvZ0ACUJYAAnHFQAJ/C0ACkvTAArQkAALQlUAC8cTAAvaCwAMDyMADJPgAAzjhQANGJ0ADU21AA2dWwAN7QAADiIYAA5XMAAOptUADtvtAA72ewAPEQgAD//1ABDjgAARPogAEXOgABNRfQAThpUAE44rAAAAAAAB7QsABj0oAAbjjQAIAAAACHHIAAlCXQAJ110ACg47AAo44AAKT6UACs3jAAru8AALHHMAC7YNAAwAAAAAAAD//j0oAADHHQAA440AAY47AAI44AACuOUAAxxwAAMccwAEAAAAAAAAAABCYAAAd3gAAIS9AAFL2ABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+l7V//mlAAABS9gAAhL1//72hf//e0P//nHI//3tCwAAhL0AAQl7AAAAAAAGqqUAAxxwAAIS9QAG440AE44rAAIS9Q==","cmr7":"AUUAEgAAAH8AJgAQAAkABQBYAAoAAAAH2ZOgUgBwAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADwEsAAAB/AAAAdwAAAFsAAABTAAAAawAAAGMAAAB3AAAAYwAAAHcAAABjAAAAQ0BEKD9AAAA/QAAAg0AAAINAAAAEwAAACNwAACdAAAAnQAAAJkAAACdAAAAlgAAAa0AAABwYAAArQAAAYMAAAHTAAAAlUAAAhwAAAI8AAAB3iAAABMAEAAdABFwnQAAAf1wAACfMAAB/zAAAd0AAAAdABEgX4AAAF+AAACfAAAB2FAAABFwAAAzABFQEQAAAJ+AAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAEwAAABNwAAAUcAAB0hAAAIRwAACNABGB3QAAAawAFMF8AAABjAAAAbwAE1FcAAABPAASQewAAAGsAAAATAAVcLwAAAHMABKhLAAVIiwAAAGsAAAB3AATUVwAEeHccAABnAAUwOwAAAGMABLhrAAAAawAUkJcAFJBrAASoawAkvEcAAAAH4AAAJ0AAAAfgAAAnQAAABsAAAAdABEQkwAUgO0AFCBzABQA7QAAAHMAAAAtARAgk3BVYO0AE6AbAAAAK3AAAN0AEZAdAAAB8wAToOMAE6CTABQg43AUIMNwAABTAAAAYwAAAFcAFKDjABSw0wBRkYMAUaDTAAAA03BR8HMAAACTANFiQwDAAJ0AAACbAAAAmwAAAAAAAAAAUstQAFqq4ABiilAAaabgAHJJUABz3HAAgghQAInn4ACRx1AAkcdwAJVVkACZprAAmabgAKGGUACllpAArXYgALFFUAC005AAvLMgAMEEUADEkpAAyCDgAMxyIADQw1AA1FGQANff4ADcMSAA379wAOCCUADiSXAA8EFQAPhh4AEDjpABBxzgASMMkAEjjpABJprgAAAAAAAddeAAYlMAAG444ACAAAAAhxxwAJL/AACddeAAnnoAAKDjkACk+lAArDDgAK7vAACxxyAAu2DgAMAAAAAAAA//4lMAAAxx4AAOOOAAGOOQAB56AAArjlAAMccgAEAAAAAAAAAAA++wAAcWAAAH35AAFHHgBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+tNL//ocbgABRx4AAffg//8EEP//ggf//oYX//4IIAAAffkAAPvwAAAAAAAGKKUAAvPQAAH34AAG444AEjjpAAH34A==","cmr8":"AUMAEgAAAH8AIwAQAAoABQBYAAoAAAAHfHtZBwCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADuEMAAAB3AAAAbwAAAFMAAABLAAAAYwAAAFsAAABvAAAAWwAAAG8AAABbAAAAO0BEKDdAAAA3QAAAd0AAAHdAAAAEwAAACOAAACtAAAArQAAAKkAAACtAAAApgAAAY0AAACAYAAArQAAAWMAAAGzAAAApUAAAewAAAIcAAABviAAABMAEAAdABFwrQAAAd1wAACvMAAB3zAAAb0AAAAdABEgX5AAAF+QAACvAAABt1AAABGAAAAzABFQEQAAAK+QAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAEwAAABOAAAAUgAABshAAAJSAAACdABGBvQAAAYwAFMFcAAABbAAAAZwAE1E8AAABHAASQcwAAAGMAAAATAAVcLwAAAGsABKhDAAVIfwAAAGMAAABvAATUTwAEeG8gAABfAAUwNwAAAFsABLhjAAAAYwAUkIsAFJBjAASoYwAkvD8AAAAH5AAAK0AAAAfkAAArQAAABsAAAAdABEQowAUgN0AFCCDABQA3QAAAIMAAAAtARAgo4BVYN0AE6AbAAAAK4AAAM0AEZAdAAAB0wAToNMAE6CjABQg04AUIMOAAABjAAAAcwAAAFgAFKDTABSwwwBRkWMAUaDDAAAAw4BR8IMAAACjANFiAwDAAK0AAACrAAAAqwAAAAAAAAAAS46AAFMcwABaqwAAYfUAAGnHgABqAGAAa0pgAHjkAACAckAAiACAAIulgACPjsAAlx0AAJ6rQACmOYAAqd6AALFswAC1VgAAuPsAALygAADAiUAAxHKAAMgXgADLvIAAz6XAANNKwADTjwAA1WGAAOKrgAD1bQAA+RIAARABAAETpgABF0sAAAAAAAAcccAAYMPAAG444ACAAAAAhxyAAJLYIACaqwAAnXXgAKDjoACk+mAAq67AAK7u4ACxxyAAu2CgAMAAAAAAAA//4MPAAAxxwAAOOOAAGOOgABqrAAArjkAAMccAADHHIABAAAAAAAAAAAPHIAAGzOAAB45AABQ44AbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//tHGP/6k+QAAUOOAAHjkP//Djj//4cc//6VVP/+HHAAAHjkAADxyAAAAAAABaqwAALVWAAB45AABuOOABEAEAAB45A=","cmr9":"AUMAEgAAAH8AJAAQAAkABQBYAAoAAAAHb7SLxwCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADsEcAAAB7AAAAcwAAAFcAAABPAAAAZwAAAF8AAABzAAAAXwAAAHMAAABfAAAAP0BEKDtAAAA7QAAAe0AAAHtAAAAEwAAACNwAAC9AAAAvQAAALkAAAC9AAAAtgAAAZ0AAACAYAAAvQAAAXMAAAHDAAAAtVAAAfwAAAIsAAABziAAABMAEAAdABFwvQAAAe1wAAC/MAAB7zAAAc0AAAAdABEgX4AAAF+AAAC/AAABx0AAABFwAAAzABFQEQAAAL+AAAC6AAAAugAAALoAAAC6AAAAugAAALoAAAC6AAAAugAAALoAAAC6AAAAEwAAABNwAAAUcAABwhAAAKRwAACtABGBzQAAAZwAFMFsAAABfAAAAawAE1FMAAABLAASQdwAAAGcAAAATAAVcMwAAAG8ABKhHAAVIgwAAAGcAAABzAATUUwAEeHMcAABjAAUwOwAAAF8ABLhnAAAAZwAUkI8AFJBnAASoZwAkvEMAAAAH4AAAL0AAAAfgAAAvQAAABsAAAAdABEQswAUgO0AFCCDABQA7QAAAJMAAAAtARAgs3BVYO0AE6AbAAAAK3AAAN0AEZAdAAAB4wAToOMAE6CzABQg43AUINNwAABjAAAAcwAAAFgAFKDjABSw0wBRkXMAUaDTAAAA03BR8IMAAACzANFiEwDAAL0AAAC7AAAAuwAAAAAAAAAASRYAAFBlAABXtAAAXvjgAGZSAABm6cAAZ8hAAHTwAAB1CVAAfD8AAIOOAACHMHAAit0AAJIsAACZewAAoMoAAKRscACru3AAr2gAALMKcAC2rOAAullwAL4GAADBqHAAxUrgAMj3cADMmeAAzKQAAM51QADbQgAA7YJwAPEk4AEHHAABCr5wAQ5g4AAAAAAAG6eQAF9OkABuOOAAgAAAAIcccACSF+AAl7QAAJ114ACg45AApPpQAKtJsACu7uAAsccgALtgsADAAAAAAAAP/99OkAAMccAADjjgABe0AAAY45AAK45AADHHIABAAAAAAAAAAAOnkAAGk+AAB08AABQMkAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//tuoP/6v4kAAUDJAAHTwP//FiD//4sQ//6hMP/+LEAAAHTwAADp4AAAAAAABXtAAAK9oAAB08AABuOOABBxwAAB08A=","cmsl10":"AXkAEgAAAH8AJQAQAAoAOQBYAAoAAAAHcK4wSgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU0wAAAAAAAAAAAAAAAAAAAAAAADqEsCkAB/AAAAcwGAAFsAAABTAwAAawMwAGMCEABzAkAAYwDAAHMCQABjAgAAQ0OEKD9BMAA/QTAAf0EwAH9BMAAEwAAACOAAACtAAAArQOAAKkBgACtBUAApgZAAe0AAACAYAAAvQiAAYMHgAHDB4AApVBAAgwIQAI8CEABziYAABMAEAAdB9FwrQAAAf1zwACvOoAB/zmAAc0FgAAdB9EgX5xAAF+RQACvCwABx0FAABGAAAAzAJFQEQAAAK+cQACqCoAAqgqAAKoKgACqCoAAqgqAAKoKgACqCoAAqgqAAKoKgACqCoAAEwEAABOBAAAUgsABwhPAAJSAAACdC9GBzQbAAawAFMF8CAABjAuAAbwGE1FcCEABPApSQdwCgAGsDMAATAyVcMwKwAHMC5KhLAAVIhwMwAGsDMABzAYTUVwIEeHMhgABnAAUwPwIQAGMClLhrAzAAawNkkJMDZJBrAySoawN0vEcC4AAH51AAK0NAAAflAAArQDAABsGgAAdB9EQowAUgP0CFCCDCNQA/QTAAIMHgAAtDhAgo4tVYP0AE6AbBoAAK4RAAO0I0ZAdBMAB8wAToPMAE6CjBdQg84NUINOCQABjCcAAcwUAAFgB1KDzABSw4wtRkYMLUaDjCUAA44tR8IMHAACjChFiIwoAAK0IgACrB0AAqwSAAAAAAAAARxyAAE45AABVVWAAXHHQAGOOUABkRGAAZPpgAHHHMAB447AAgAAgAIAAMACDjlAAhxyAAIccoACOOQAAlVWAAJxx4ACgACAApxygAKqq0ACuOQAAsccwALVVgAC447AAvHHgAMAAIADDjmAAxxygAMjjsADPA2AA1VWAAOccoADqqtABAAAwAQOOYAEHHKAAAAAAABsFsABd64AAbjjgAIAAAACHHIAAkVnQAJVVYACddeAAoOOgAKT6UACq+NAAru7gALHHIAC7YLAAwAAAAAAAD//d64AADHHQAA444AAVVWAAGOOgACuOMAAxxwAAMccgAEAAAAAAAAAAAHmAAAITAAACT9AAA3AgAAOOUAAFIGAABZIwAAWhUAAF7VAABguAAAZmoAAHd4AAB8NgAAhMAAAIiuAACK0wAAjw0AAKAeAAChMwAAqMgAALJDAADK6wAAzcIAANTFAADY8gAA2QIAANoVAADhqwAA5GIAAOVzAADrKAAA7BgAAO7yAAD2iAAA+G0AAQNtAAEajgABHHYAASXwAAEncgABJ9YAAUYtAAFSfgABVVoAAV7TAAFguAABe0YAAYLbAAGOPQABmZ0AAbu9AAHDVQACAAUAAgtjAAI45gADGKsAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//uOOP/6440AAT6VAAHHHf//HHL//444//6qqv/+OOMAAHHIAADjjgACqrAABVVWAAKqqwABxx0ABuOOABAAAwABxx0=","cmsl12":"AXgAEgAAAH8AIwAQAAoAOgBYAAoAAAAHfWgh0wDAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU0wAAAAAAAAAAAAAAAAAAAAAAADmD8CoAB3AAAAawGQAE8AAABHAxAAXwMwAFcCIABrAlAAVwDQAGsCUABXAgAAN0OUKDNBMAAzQTAAd0EwAHdBMAAEwAAACOAAACdAAAAnQPAAJkBwACdBUAAlgaAAc0AAABwYAAAnQkAAVMGwAGjBsAAlVBAAewIgAIcCIABriZAABMAEAAdB5FwnQAAAd1zgACfOwAB3znAAa0FgAAdB5EgX5yAAF+RQACfC0ABp0FAABGAAAAzAJFQEQAAAJ+cgACaCwAAmgsAAJoLAACaCwAAmgsAAJoLAACaCwAAmgsAAJoLAACaCwAAEwEAABOBAAAUgoABohOAAISAAACNDBGBrQcAAXwAFMFMCAABXAvAAYwGU1EsCIABDAqSQbwCwAF8DMAATA0VcKwKwAGcC9Kg/AAVIfwMwAF8DMABrAZTUSwIEeGshkABbAAUwMwIQAFcCpLhfAzAAXwN0kIsDdJBfA0SoXwOEvDsC8AAH52AAJ0NQAAflEAAnQDAABsGAAAdB5EQkwAUgM0BlCBzCNQAzQTAAHMGwAAtDlAgk4uVYM0AE6AbBgAAK4QAAL0I0ZAdBMAB0wAToMMAE6CTBdQgw4MUILOCAABTCkAAYwUAAFgCVKDDABSwswuRkVMLkaCzCYAAs4uR8HMHQACTChFiAwoAAJ0JAACbB8AAmwSAAAAAAAAARaEAAEyXgABTjgAAWm3QAGF7AABi34AAb2gAAHZegAB9VQAAgMTwAIRLgACLQgAAkjiAAJkvAACcnvAAo5VwAKccAACqi/AArfvQALGCcAC1CQAAuHjwALvo0AC/b3AAwt9QAML2AADErgAAyuwQANDjAADiP/AA5a/QAPqqAAD+GfABAYnQAAAAAAAY45AAXGQQAG448ACAAAAAhxyAAJCXkACTjgAAnXXwAKDjkACk+lAAqefAAK7u8ACxxxAAu2CwAMAAAAAAAA//3GQQAAxxwAAOOPAAE44AABjjkAArjjAAMccAADHHEABAAAAAAAAAAACq8AACOQAAAnIAAAL20AADtEAABQmwAAVCsAAFx1AABdaAAAXtUAAGjJAAByBwAAedgAAIb7AACL3wAAjDUAAI18AACW4QAAoTQAAKtkAAC0KwAAzNAAAM3BAADOlQAA1yUAANp7AADaywAA3HQAAOMYAADjlAAA5kgAAO54AADzsQAA9wMAAPlgAAD7RwABBcwAARrMAAEhNAABJREAASXwAAEutwABN/cAAUiMAAFY6AABXaQAAWMZAAF7RQABhIUAAZCcAAGZJQABms0AAcPPAAIABAACCjUAAjbFAAL3uABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+6Xw//r/iQABHaEAAb2g//8hMP//kJj//rHI//5CYAAAb2gAAN7QAAKqsAAFOOAAApxwAAG9oAAG448AD6qgAAG9oA==","cmsl8":"AXgAEgAAAH8AJAAQAAoAOQBYAAoAAAAHoTgpzwCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU0wAAAAAAAAAAAAAAAAAAAAAAADuEMCcAB7AAAAbwFwAFMAAABLAwAAYwMgAFsB8ABvAkAAWwDAAG8CQABbAgAAO0OEKDdBIAA3QSAAe0EgAHtBIAAEwAAACOAAACtAAAArQLAAKkBQACtBQAApgZAAd0AAACAYAAArQiAAWMIQAGzCEAApUAAAfwHwAIsB8ABviXAABMAEAAdBxFwrQAAAe10AACvOsAB7zlAAb0FQAAdBxEgX5xAAF+RAACvCwABt1EAABGAAAAzAJFQEQAAAK+cQACqCsAAqgrAAKoKwACqCsAAqgrAAKoKwACqCsAAqgrAAKoKwACqCsAAEwDAABOAwAAUggABshQAAJSAAACdC9GBvQaAAYwAFMFcCAABbAtAAZwF01E8B8ABHAnSQcwBgAGMDIAATAzVcLwKQAGsC1KhDAAVIgwMgAGMDIABvAXTUTwIEeG8hcABfAAUwNwHgAFsCdLhjAyAAYwNkkI8DZJBjAzSoYwN0vD8C0AAH51AAK0NAAAfk0AArQBAABsFgAAdBxEQowAUgN0CVCCDCNQA3QSAAIMIQAAtDhAgo4uVYN0AE6AbBYAAK4PAAM0I0ZAdBIAB4wAToNMAE6CjBhQg04OUIMOCgABjCgAAcwTAAFgB1KDTABSwwwuRkWMLkaDDCYAAw4uR8IMHQACjCpFiEwqAAK0IgACrBsAAqwRAAAAAAAAAS46AAFMcwABaqwAAYfUAAGnHgABqAGAAa0pgAHjkAACAckAAiACAAIulgACPjsAAlx0AAJ6rQACmOYAAqd6AALFswAC1VgAAuPsAALygAADAiUAAxHKAAMgXgADLvIAAz6XAANNKwADTjwAA1WGAANq/wADiq4AA9W0AAPkSAAEQAQABE6YAARdLAAAAAAAAHHHAAGDDwABuOOAAgAAAAIccgACS2CAAmqsAAJ114ACg46AApPpgAKuuwACu7uAAsccgALtgoADAAAAAAAAP/+DDwAAMccAADjjgABjjoAAaqwAAK45AADHHAAAxxyAAQAAAAAAAAAABjmAAAaFAAAJe4AADHIAABF8AAASqwAAExWAABVVgAAVoYAAFe2AABvagAAcFwAAHieAAB6ygAAgrgAAIkoAACNYgAAkvgAAKD2AACoTgAAxToAAMnUAADNqAAAzcAAANJCAADS+AAA2A4AANoUAADdaAAA4LgAAOIkAADk/AAA5XQAAOhOAAD1lAAA/FAAAQ48AAEZ2gABHpYAASXwAAEthAABLowAAT8QAAFKrgABWZwAAWJiAAF7RgABfeAAAYcgAAGUoAABlg4AAcHoAAIABAACDvIAAj9OAAMdpABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+0cY//qT5AABQ44AAeOQ//8OOP//hxz//pVU//4ccAAAeOQAAPHIAAKqsAAFqrAAAtVYAAHjkAAG444AEQAQAAHjkA==","cmsl9":"AXgAEgAAAH8AJQAQAAkAOQBYAAoAAAAHlHFbmACQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU0wAAAAAAAAAAAAAAAAAAAAAAADsEcCcAB/AAAAcwFwAFcAAABPAwAAZwMwAF8CEABzAkAAXwCwAHMCQABfAgAAP0OEKDtBIAA7QSAAf0EgAH9BIAAEwAAACNwAAC9AAAAvQMAALkBgAC9BQAAtgZAAe0AAACAYAAAvQiAAXMHgAHDB4AAtVBAAgwIQAI8CEABziXAABMAEAAdB1FwvQAAAf1zwAC/OsAB/zlAAc0FQAAdB1EgX4xAAF+BQAC/CwABx0FAABFwAAAzAJFQEQAAAL+MQAC6CsAAugrAALoKwAC6CsAAugrAALoKwAC6CsAAugrAALoKwAC6CsAAEwEAABNxAAAUcoABwhPAAKRwAACtC9GBzQaAAZwAFMFsCAABfAtAAawF01FMCEABLAnSQdwCAAGcDMAATAyVcMwKgAG8C1KhHAAVIhwMwAGcDMABzAXTUUwIEeHMdcABjAAUwOwHwAF8CdLhnAzAAZwNkkJMDZJBnAySoZwN0vEMC0AAH41AAL0NAAAfg4AAvQDAABsGAAAdB1EQswAUgO0CVCCDCNQA7QSAAJMHgAAtDhAgs3uVYO0AE6AbBgAAK3QAAN0I0ZAdBIAB8wAToOMAE6CzBZQg43NUINNygABjCgAAcwTAAFgB1KDjABSw0wuRkXMLkaDTCYAA03uR8IMHAACzClFiIwpAAL0IgAC7BsAAuwRAAAAAAAAASRYAAFBlAABXtAAAXvjgAGZSAABm6cAAZ8hAAHTwAAB1CVAAfD8AAIOOAACHMHAAit0AAJIsAACZewAAoMoAAKRscACru3AAr2gAALMKcAC2rOAAullwAL4GAADBqHAAxUrgAMj3cADMmeAAzKQAAM51QADUTiAA20IAAO2CcADxJOABBxwAAQq+cAEOYOAAAAAAABunkABfTpAAbjjgAIAAAACHHHAAkhfgAJe0AACddeAAoOOQAKT6UACrSbAAru7gALHHIAC7YLAAwAAAAAAAD//fTpAADHHAAA444AAXtAAAGOOQACuOQAAxxyAAQAAAAAAAAAAAGXAAAeBwAAH54AAC9sAAA1vAAATKcAAFN0AABWnAAAWH4AAF7VAAB0UAAAe0cAAHuUAACCvAAAiTkAAIy+AACXzAAAngwAAKVOAACt2QAAyGQAAM3CAADRnAAA0kUAANYwAADW7AAA3ukAAN/FAADjlAAA5XUAAOigAADo8AAA6UIAAPA3AAD3KwABAEQAARYkAAEaPgABI7kAASXwAAEqmQABP9wAAUMEAAFQmwABXZAAAWBpAAF7RQABgKQAAYsUAAGYBwABqCkAAcK0AAIABAACDPkAAju+AAMa4ABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+26g//q/iQABQMkAAdPA//8WIP//ixD//qEw//4sQAAAdPAAAOngAAKqsAAFe0AAAr2gAAHTwAAG444AEHHAAAHTwA==","cmsltt10":"AMEAEgAAAH8AAgAQAAwAAgACAAAAAAAH3+o8eACgAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNU0xUVAAAAAAAAAAAAAAAAAAAAADqAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAABOwQAATsEAAFQBAABWwQAAdAEAAHQBAABwAQAAdAEAAGwBAAB0AQAAQoEAAHQBAABUAQAAVAEAAGIBAAB0AQAAdAEAAHkBAABKAQAAdAFAAHQBAAB0AQAAfYEAAH2BAAB0AQAAdAEAAH1BAAB9QQAAWAEAAFyBAABGQQAAXIEAAEQBAAB9QQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAFQBAABWQQAAaMEAAFBBAABowQAAdAFAQHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdkEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAH1BAAB9QQAAfUEAAHQBAABBwQAAdAEAAFQBAAB0AQAAVAEAAHQBAABUAQAAdAEAAFbBAAB0AQAAdAEAAHbBAAB0AQAAdAEAAFQBAABUAQAAVAEAAFbBAABWwQAAVAEAAFQBAABkAQAAVAEAAFQBAABUAQAAVAEAAFbBAABUAQAAfUEAAH1BAAB9QQAAdAEAAHQBAAAAAAAAAhmYgAAAAAAAgAAAAOC2AAGOOMABqZlAAbjjgAIVVYACH0mAAiqqwAI23IACOOOAAkMgwAJDjoACccdAAqqqwALHHIAAAAA//zfSP/+tgr//xxyAADjjgABVVMAAVVVAAGFrQABxx0AAjjjAAMccwADjjoAAAAAAAHaFoBgAA6AYAAPAAKqsAAIZmIAAAAAAAAAAAAG444AEMzDAAhmYg==","cmss10":"AUkAEgAAAH8ANAAQAAsABQBOAAgAAAAHbSO9UgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADqF9AAAC7QAAAr0AAAHdAAACDQAAAm0AAAJ9AAACvQAAAn0AAAK9AAACfQAAAa0BEKFtAAABbQAAAt0AAALdAAAAEwAAACOQAAFNAAABTQAAAUkAAAFNAAABSAAAAh0AAADgcAABLQAAAnMAAAKzAAABRVAAAv0AAAMtAAACviAAABMAEAB9ABFxTQAAAu2AAAFPMAAC7zAAAq0AAAA9ABEgz6AAAM+gAAFPAAACt0AAADFgAACDABFQMQAAAU+gAAFKAAABSgAAAUoAAAFKAAABSgAAAUoAAAFKAAABSgAAAUoAAAFKAAAAMwAAADNgAAB0kAACshAAAQSQAAENABGCDQAAAh0AFCIdAAAB7QAAAo0AE0G9AAABnQASMg0AAAJtAAAATQAU0Q0AAAJdABKRfQAUgw0AAAJtAAACnQATQe0AEdKdYAAB/QAAAY0AAAItABLSTQAAAh0AUjMdAFIyHQASkh0AkuHNAAAAX6AAAU0AAABfoAABTQAAADwAAAA9ABEREwAT8V0AE5DjAAABXQAAAOMAAABtARAhQ5BUwV0AAAAcAAAALJAAAT0AEZAdAAACwwAAAVMAAAFDABORU5ATkVOQAACTAEAAswAAAKYAFAFTABQQ8wBAAjMAUZDzAAAA85BR4NMAAAFDANFjMwDAAU0AAAFLAAABTAAAAAAAAAAAPSfgAEREYABHHIAARxygAEn0sABOOQAAUccwAFVVYABXd6AAXHHQAGIiMABjjlAAb0oAAHHHMAB2C4AAeOOwAHsF0AB7BeAAfSgAAIAAIACERGAAiT6wAIqq0ACOOQAAkcdQAJVVgACY47AAnHHgAJxyAACjjmAApVWAAKqq0ACqquAArjkAAK7vIACwAFAAscdgALVVoAC447AAuOPQALxx4ADCIlAAxxygAMtg4ADQWzAA1VWAANxyAADgAFAA8cdgAPjj0AEAADAAAAAAABVVUABeuFAAcccgAIAAAACKqrAAkklQAJVVYACb4AAAoccgAKfSgACtNOAArergALHHIAC+OOAAwAAAAAAAD//euFAADHHQAA444AAVVWAAGOOgACAAAAArjjAAMccAADHHIABAAAAAAAAAAAOOMAAGZmAABxyAABHHIAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb//C2C//vd2wABHHIAAccd//+OOP/+qqoAAHHI//444wAAAAAABVVWAAKqqwABxx0ABxxyABAAAwABxx0=","cmss12":"AUsAEgAAAH8ANgAQAAsABQBOAAgAAAAHgs5SNgDAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADmF9AAADDQAAAt0AAAHNAAACPQAAAo0AAAKtAAAC3QAAAq0AAALdAAACrQAAAa0BEKFtAAABbQAAAv0AAAL9AAAAEwAAACOQAAFNAAABTQAAAUkAAAFNAAABSAAAAh0AAADgcAABLQAAAqMAAALTAAABRVAAAx0AAANNAAAC3iAAABMAEAB9ABFxTQAAAw2AAAFPMAADDzAAAs0AAABNABEgz6AAAM+gAAFPAAAC10AAAEFgAACDABFQQQAAAU+gAAFKAAABSgAAAUoAAAFKAAABSgAAAUoAAAFKAAABSgAAAUoAAAFKAAAAQwAAAENgAAB0kAAC0hAAARSQAAEdABGCPQAAAh0AFCItAAAB/QAAAp0AE0G9AAABnQASMj0AAAKNAAAAPQAU0Q0AAAJ9ABKRfQAUgy0AAAKNAAACvQATQe0AEdK9YAACDQAAAY0AAAJtABLSXQAAAh0AUjM9AFIyHQASkh0AkuHdAAAAX6AAAU0AAABfoAABTQAAAEwAAABNABERIwAT8V0AE5DjAAABXQAAAOMAAABtARAhQ5BUwV0AAAAcAAAALJAAAT0AEZAdAAAC4wAAAVMAAAFDABORU5ATkVOQAACTAEAAswAAAKYAFAFTABQQ8wBAAkMAUZDzAAAA85BR4NMAAAFDANFjUwDAAU0AAAFLAAABTAAAAAAAAAAAOvZQAEHs0ABEJbAARaEAAEhxsABMl4AAT7QAAFOOAABVLzAAWoSAAGAWgABhewAAbL1QAG9oAAByqlAAdaDQAHZegAB3/7AAeaDQAH1VAACAl1AAheywAIdn0ACLQgAAjl5QAJI4gACVVNAAl7OwAJkvAACfZ9AAoCWAAKFU0ACloLAApl5QAKccAACqXlAAqqowAKr2AACslzAAr7OwALRLUAC1CQAAuOMAAL2gsADC9gAAxjhQAMuNsADQ4wAA1xvQANl6sADrQbAA8vXQAPqqAAAAAAAAFL2wAF0nwABxxxAAgAAAAIqqsACSSVAAk44AAJudUAChxxAAp7QwAKzpAACtgLAAsccQAL440ADAAAAAAAAP/90nwAAMccAADjjwABOOAAAY45AAIAAAACuOMAAxxwAAMccQAEAAAAAAAAAAA3tAAAZEQAAG9oAAEWhABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AZYAEAGGABABvgASAY4AEAEGABQBvgAQAZYAEAGGABAAugAWALIAFAG+ABABlgAQAdYAEAHKABABhgAQAQYAFAE+ABABDgAQAR4AEgFGABAB5gAUAZYAFAG+ABQBygAUAYYAFAEGABYB1gAUAWIAEAFeABABBgAQAVoAEgFmABABlgAYAb4AGAHiABABkgAYAY4AGAHGABgBygAQAeYAEgHeABAB0gAQAQ4AEAE+ABABHgAQAVYAEAFGABABUgAUAWYAFAFaAB4BXgAeAaoAGgEmABv/8UJv//AcgAAEWhAABvaD//5CY//6xyAAAb2j//kJgAAAAAAAFOOAAApxwAAG9oAAHHHEAD6qgAAG9oA==","cmss17":"AUoAEgAAAH8ANgAQAAoABQBOAAgAAAAHBdbGHwEUeuAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADbF9AAADDQAAAt0AAAHNAAACPQAAAo0AAAKtAAAC3QAAAq0AAALdAAACrQAAAa0BEKFtAAABbQAAAv0AAAL9AAAAEwAAACOAAAFNAAABTQAAAUkAAAFNAAABSAAAAh0AAADgcAABLQAAAqMAAALTAAABRVAAAx0AAANNAAAC3iAAABMAEAB9ABFxTQAAAw2AAAFPMAADDzAAAs0AAABNABEgz5AAAM+QAAFPAAAC10AAAEFgAACDABFQQQAAAU+QAAFLAAABSwAAAUsAAAFLAAABSwAAAUsAAAFLAAABSwAAAUsAAAFLAAAAQwAAAENgAAB0gAAC0hAAARSAAAEdABGCPQAAAh0AFCItAAAB/QAAAp0AE0G9AAABnQASMj0AAAKNAAAAPQAU0Q0AAAJ9ABKRfQAUgy0AAAKNAAACvQATQe0AEdK9YAACDQAAAY0AAAJNABLSbQAAAh0AUjM9AFIyHQASkh0AkuHdAAAAX5AAAU0AAABfkAABTQAAAEwAAABNABERIwAT8V0AE5DjAAABXQAAAOMAAABtARAhQ4BUwV0AAAAcAAAALIAAAT0AEZAdAAAC4wAAAVMAAAFDABORU4ATkVOAAACTAEAAswAAAKYAFAFTABQQ8wBAAlMAUZDzAAAA84BR4NMAAAFDANFjUwDAAU0AAAFKAAABTAAAAAAAAAAAOP7gAD+uwABCQSAAQt8wAEXbEABJjyAATL+gAFA/EABR/tAAVu8AAFxIkABdnuAAaIagAGr+wABufkAAcV+gAHGusABzbnAAdS4gAHhekAB73hAAgM5AAII+4ACFvnAAiO7QAIxuYACPnsAAkoAwAJMeQACZfyAAmc4wAJs+0ACf4AAAoC8QAKB+IACj/ZAAo/2gAKTQQACmj/AAqcBwAK2O4ACt3fAAsV1gALZNoAC7PdAAvr1QAMOtcADInaAAzv6AANHf8ADiv0AA6b4wAPC9MAAAAAAAFJOAAFsHMABuNLAAf/vAAIcaYACNsaAAkDzwAJmc4ACg4oAAp7mgAKfmsACoIwAAsccgAL46AAC/xQAAAAAP/9sLcAAMcuAADf3gABBBMAAY5bAAIBlQACuR8AAxy1AAP8kwAAAAAAADV/AABgTAAAav8AAQt9AGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//xwEv/8JgAAAQt9AAGr+///lQH//r8EAABq///+VAUAAAAAAAUD8QACgfgAAav7AAbjSwAPC9MAAav7","cmss8":"AUQAEgAAAH8ALwAQAAsABQBOAAgAAAAHxnM2kQCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADuFdAAACnQAAAm0AAAGtAAAB3QAAAi0AAAI9AAACbQAAAj0AAAJtAAACPQAAAY0BEKFNAAABTQAAAo0AAAKNAAAAEwAAACOQAAEtAAABLQAAASkAAAEtAAABKAAAAd0AAADQcAABDQAAAjMAAAJjAAABJUAAAq0AAALdAAACbiAAABMAEABtABFxLQAAAp2AAAEvMAACnzAAAl0AAAA9ABEgv6AAAL+gAAEvAAACZ1AAADFgAABzABFQMQAAAS+gAAEqAAABKgAAASoAAAEqAAABKgAAASoAAAEqAAABKgAAASoAAAEqAAAAMwAAADNgAABkkAACYhAAAPSQAAD9ABGB3QAAAd0AFCHdAAABvQAAAj0AE0GdAAABfQASMd0AAAItAAAAPQAU0P0AAAIdABKRXQAUgr0AAAItAAACTQATQb0AEdJNYAABzQAAAW0AAAH9ABLSDQAAAd0AUjLNAFIx3QASkd0AkuGtAAAAT6AAAS0AAABPoAABLQAAADwAAAA9ABERAwAT8T0AE5DTAAABPQAAANMAAABdARAhI5BUwT0AAAAcAAAALJAAAR0AEZAdAAACcwAAATMAAAEjABORM5ATkTOQAACDAEAAowAAAJYAFAEzABQQ4wBAAeMAUZDjAAAA45BR4MMAAAEjANFi4wDAAS0AAAErAAABLAAAAAAAAAAAQOPAAEhyAABLjoAATxzAAFMcwABWOSAAWqsAAFzj4ABiOUAAaESgAGnHgAB2OUAAeOQAAH1VwACAckAAgqsgAITkAACIAIAAjHJAAJHHoACUAKAAlx0AAJuO4ACeq0AAox0gAKY5gACtx8AAsACgALVWAAC5x8AAucfgALqrYAC85EAAwACgAMRygADI5GAAzjmgANOPAADYAMAA3VYgAOKrgADqOcAA7VYgAQDkgAEIcsABEAEAAAAAAAAXHIAAYaLAAHHHIACAAAAAiqrAAJJJYACaqwAAnVVAAKHHIACoAAAArhiAAK9t4ACxxyAAvjjgAMAAAAAAAA//4aLAAAxxwAAOOOAAGOOgABqrAAAg44AAK45AADHHAAAxxyAAQAAAAAAAAAADxyAABszgAAeOQAAS46AGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//vxxP/7nG4AAS46AAHjkP//hxz//pVUAAB45P/+HHAAAAAAAAWqsAAC1VgAAeOQAAcccgARABAAAeOQ","cmss9":"AUoAEgAAAH8ANgAQAAoABQBOAAgAAAAH0m/HdwCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADsGNAAADDQAAAt0AAAHtAAACLQAAAo0AAAKdAAAC3QAAAp0AAALdAAACnQAAAb0BEKF9AAABfQAAAv0AAAL9AAAAEwAAACOAAAFdAAABXQAAAVkAAAFdAAABWAAAAk0AAADgcAABPQAAApMAAALTAAABVVAAAx0AAANNAAAC3iAAABMAEAB9ABFxXQAAAw2AAAFfMAADDzAAAs0AAAA9ABEgz5AAAM+QAAFfAAAC10AAADFgAACDABFQMQAAAV+QAAFaAAABWgAAAVoAAAFaAAABWgAAAVoAAAFaAAABWgAAAVoAAAFaAAAAMwAAADNgAAB0gAAC0hAAARSAAAEdABGCLQAAAk0AFCI9AAAB/QAAAq0AE0HNAAABrQASMi0AAAKNAAAATQAU0S0AAAJ9ABKRjQAUgy0AAAKNAAACvQATQg0AEdK9YAACHQAAAZ0AAAJdABLSbQAAAk0AUjM9AFIyTQASkk0AkuHdAAAAX5AAAV0AAABfkAABXQAAADwAAAA9ABERMwAT8W0AE5DjAAABbQAAAPMAAABtARAhU4BUwW0AAAAcAAAALIAAAU0AEZAdAAAC4wAAAWMAAAFTABORY4ATkWOAAACTAEAAswAAAKYAFAFjABQRAwBAAlMAUZEDAAABA4BR4NMAAAFTANFjUwDAAV0AAAFbAAABXAAAAAAAAAAAPtBwAEYfcABJFgAASXsgAExxsABQZQAAU1uQAFe0AABZ4EAAXwMAAGTb4ABmUgAAcl6QAHTwAAB08CAAeUhwAHw/AAB8cZAAfmtAAICXcACDjgAAh+ZwAI0JQACPaAAAkiwAAJa3AACZewAAngYAAKDKAAChLyAAqBkAAKhLkACqd8AAr2gAAK+akACvzSAAs8BwALTv4AC3HCAAuhKwAL4GAAC+OJAAwl5wAMeBQADMpAAA0PxwANYfQADbQgAA4sOQAOXssAD44yAA//+QAQccAAAAAAAAFh+QAGAkcABxxyAAgAAAAIqqsACSSVAAl7QAAJzrIAChxyAAp4GQAK2aAACuyXAAsccgAL444ADAAAAAAAAP/+AkcAAMccAADjjgABe0AAAY45AAIGUgACuOQAAxxyAAQAAAAAAAAAADp5AABpPgAAdPAAASRZAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//wS+f/7vaQAASRZAAHTwP//ixD//qEwAAB08P/+LEAAAAAAAAV7QAACvaAAAdPAAAcccgAQccAAAdPA","cmssbx10":"AT4AEgAAAH8ALAANAAsABQBOAAgAAAAH8WtBSACgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNU1NCWAAAAAAAAAAAAAAAAAAAAADqF6AAACWgAAAioAAAG6AAAB2gAAAgoAAAIKAAACKgAAAgoAAAIqAAACCgAAAaoBEKGKAAABigAAAkoAAAJKAAAAEwAAACOQAAE6AAABOgAAATgAAAE6AAABOQAAAdoAAADQcAABagAAAgMAAAIjAAABNUAAAmoAAAKqAAACKyAAABMAEAB6ABFxSgAAAlqAAAE8MAACjDAAAhoAAAA6ABEgvKAAALygAAE8AAACJ2AAADFQAABzABFQMQAAATygAAE6AAABOgAAAToAAAE6AAABOgAAAToAAAE6AAABOgAAAToAAAE6AAAAMwAAADNQAAB0kAACIhAAAQSQAAEKABGB2gAAAdoAFCHaAAABygAAAgoAE0GqAAABmgASMdoAAAIKAAAASgAU0QoAAAH6ABKRegAUgnoAAAIKAAACCgATQcoAEdIKUAABygAAAZoAAAHaABLR+gAAAdoAUjKaAFIx2gASkdoAkuG6AAAAbKAAAUoAAABsoAABOgAAADoAAAA6ABEREwAT8VoAE5DTAAABWgAAAPMAAABaARAhM5BUwVoAAAAaAAAAKpAAASoAEZAaAAACMwAAAVMAAAEzABORU5ATkVOQAACDAEAAowAAAJYAFAFTABQQ4wBAAeMAUZDjAAAA45BR4MMAAAEzANFiswDAAToAAAE6AAABOgAAAAAAAAAAQWwwAEk+sABOOQAAVJ9gAFYLgABX0qAAXd4AAF9KIABnd6AAa/KAAG2DAAB59NAAfSgAAIAAMACC2GAAhPqAAIZmoACH0rAAjM0AAI7vIACPpTAAkLYwAJSfgACWC6AAnHIAAKREgACsFwAAs+mAALu8AAC+lDAAw46AAMthAADUn6AA2wYAAN3eMADkRKAA6qsAAPJ9gAD6UAABB3RQAQn1AAERx4ABGZoAAAAAAAAhbCAAaAAAAHVVUACAAAAAjjjgAJbboACd3gAAoqqwAKNFUACxxyAAvjjgAMAAAAAAAA//6AAAAAxx0AAOOOAAGOOgABsFsAAd3gAAK44wADHHAAAxxyAAQAAAAAAAAAAD6VAABwowAAfSgAATjlAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//vpPf/7T6MAATjlAAH0oP//gtj//oiIAAB9KP/+C2AAAAAAAAXd4AAC7vAAAfSgAAdVVQARmaAAAfSg","cmssdc10":"AUwAEgAAAH8AOgANAAsABQBOAAgAAAAHcNrjaQCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNU1NEQwAAAAAAAAAAAAAAAAAAAADqGqAAADOgAAAwoAAAIKAAACSgAAAroAAALKAAADCgAAAsoAAAMKAAACygAAAdoBEKGaAAABmgAAAyoAAAMqAAAAEwAAACOQAAFqAAABagAAAWkAAAFqAAABaAAAAmoAAADgcAABWgAAAsMAAAMDAAABZVAAA0oAAAOKAAADCyAAABMAEAB6ABFxegAAAzqAAAFsQAADbEAAAvoAAAA6ABEgzKAAAMygAAFsAAADBjAAADFgAACDABFQMQAAAWygAAFqAAABagAAAWoAAAFqAAABagAAAWoAAAFqAAABagAAAWoAAAFqAAAAMwAAADNgAAB0kAADAhAAARSQAAEaABGCSgAAAmoAFCJaAAACGgAAAtoAE0HqAAABygASMkoAAAK6AAAASgAU0SoAAAKqABKRqgAUg1oAAAK6AAAC6gATQioAEdLqYAACOgAAAboAAAKKABLSmgAAAmoAUjN6AFIyagASkmoAkuH6AAAAbKAAAXoAAABsoAABagAAADoAAAA6ABERMwAT8YoAE5DjAAABigAAAQMAAABaARAhg5AUwYoAAAAaAAAAKpAAAUoAEZAaAAADEwAAAYMAAAFjABORg5ATkYOQAACTAEAAswAAAKcAFAGDABQQ8wBAAnMAUZDzAAAA85BR4NMAAAFjANFjkwDAAWoAAAFqAAABagAAAAAAAAAAOC0wAD7uoABDjgAASIhgAEpPYABLBYAATjiwAFEQ0ABSIdAAWIhQAF050ABek6AAaT4wAGwWYABuOGAAcC0wAHLX0ABzMtAAc+jQAHT50AB30lAAeZkwAHmZUAB7uzAAgWugAIONsACHHAAAik8gAI3dYACREIAAlJ7QAJVU0ACbYDAAm7swAJ0nMACiIaAAonygAKLXoACkQ6AApPmwAKgtAACpmQAArYJQAK+kYACv/2AAsnyAALd20AC9JzAAv0kwAMT5oADKqgAA0cZgANYKsADhIyAA5mWgAOzMAADzMmAAAAAAABsFsABpdTAAeOOgAIccYACOOQAAlJ8AAJtuAACiauAAo44wALHHIAC8cdAAwAAAAAAAD//iWNAACqqwAA2CoAAOOOAAFVVgABxx0AAlVWAAKqqgACqqsAA446AAAAAAAANgsAAGFGAABsFgABDjgAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb//H0t//v6UwABDjgAAbBa//+T6v/+u70AAGwW//5PpgAAAAAABRENAAKIhgABsFoAB446AA8zJgABsFo=","cmssi10":"AXwAEgAAAH8ANQAQAAsANwBOAAgAAAAHxVWN6QCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NJAAAAAAAAAAAAAAAAAAAAAADqF9DEAC/QAAAs0FQAHdAAACDQvAAm0GgAJ9C4ACzQjAAn0DQALNCMACfQbAAa0NkKFtCkABbQnAAu0KQALtCcAAEwMAACOTAAFNAAABTQmAAUkHQAFNCcABSAhAAq0AAADgcAABLQmAAnMEwALDBMABRVOAAw0LgAM9C4ACziVAABMAEAB9BBFxTQBAAv2DwAFPOsAC/zKAAr0CQAA9BhEgz6wAAM+hwAFPCwACx0HAADFgAACDAVFQMQAAAU+sAAFKCsABSgrAAUoKwAFKCsABSgrAAUoKwAFKCsABSgrAAUoKwAFKCsAAMwGAADNhgAB0kMACwhPAAQSQAAENC1GCDQVAAh0AFCIdBsAB7QuAAo0FU0G9C4ABnQxSMg0LgAJtBoAATQxU0Q0GgAJdC5KRfQAUgx0GgAJtBoACnQVTQe0G0dKdZUAB/QbAAY0JgAItDFLSTQaAAh0NEjMtDRIyHQxSkh0NUuHNC4AAX6zAAU0MgABfp8ABTQZAADwFgAA9BhEREwCT8V0CE5DjBwABXQnAAOMEwABtDZAhQ5qUwV0BAAAcCgAALJkAAT0HEZAdCcAC0wEAAVMBAAFDBJORU5LTkVOTAACTCoAAswXAAKYFFAFTAxQQ8wqAAjMKkZDzCUAA85qR4NMIAAFDB5FjQweAAU0JgAFLCIABTARAAAAAAAAAPSfgAEREYABHHIAARxygAEn0sABOOQAAUccwAFVVYABXd6AAXHHQAGIiMABjjlAAb0oAAHHHMAB2C4AAeOOwAHsF0AB7BeAAfSgAAIAAIACERGAAiT6wAIqq0ACOOQAAkcdQAJVVgACY47AAnHHgAJxyAACjjmAApVWAAKqq0ACqquAArjkAAK7vIACwAFAAscdgALVVoAC447AAuOPQALxx4AC8zjAAwiJQAMccoADLYOAA0FswANVVgADccgAA4ABQAPHHYAD449ABAAAwAAAAAAAVVVAAXrhQAHHHIACAAAAAiqqwAJJJUACVVWAAm+AAAKHHIACn0oAArTTgAK3q4ACxxyAAvjjgAMAAAAAAAA//3rhQAAxx0AAOOOAAFVVgABjjoAAgAAAAK44wADHHAAAxxyAAQAAAAAAAAAAAzzAAAoKwAAQYgAAEjSAABPsgAAZoAAAGfgAAB9NQAAfUAAAIAOAACfVgAAqsMAALyFAADGhQAA0FoAAOrSAAEFhQABDt0AARWeAAEn7QABNXAAAT5oAAE+rQABQCgAAUdAAAFLhgABU6sAAVVuAAFZYwABYO0AAWUlAAFmgAABZ3IAAWmAAAFx5gABd0sAAXeQAAF5CwABhGsAAY4NAAGPzQABu9UAAcj2AAHiTQAB464AAerSAAIM9QACGzAAAiO2AAJF2AACjPgAApV9AALDAAADeQsAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb//C2C//vd2wABHHIAAccd//+OOP/+qqoAAHHI//444wADZqAABVVWAAKqqwABxx0ABxxyABAAAwABxx0=","cmssi12":"AX8AEgAAAH8ANwAQAAsAOABOAAgAAAAH2gMizQDAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NJAAAAAAAAAAAAAAAAAAAAAADmF9DIADHQAAAu0FQAHNAAACPQwAAo0HAAKtC8AC7QjAAq0DQALtCMACrQaAAa0N0KFtCoABbQoAAw0KgAMNCgAAEwMAACOTAAFNAAABTQlAAUkHQAFNCcABSAfAAr0AAADgcAABLQlAAqMEwALjBMABRVOAAy0LwANdC8AC7iVAABMAEAB9BBFxTQBAAx2DwAFPOwADHzJAAt0CgABNBhEgz6xAAM+hgAFPC4AC50GAAEFgAACDARFQQQAAAU+sQAFKCwABSgsAAUoLAAFKCwABSgsAAUoLAAFKCwABSgsAAUoLAAFKCwAAQwHAAENhwAB0kMAC4hPAARSQAAEdC1GCPQVAAh0AFCItBoAB/QvAAp0FU0G9C8ABnQySMj0LwAKNBwAAPQyU0Q0HAAJ9C9KRfQAUgz0HAAKNBwACzQVTQe0GkdLNZUACDQaAAY0JQAJtDJLSXQcAAh0NUjNNDVIyHQySkh0NkuHdC8AAX60AAU0MwABfqEABTQZAAEwFgABNBhERIwCT8V0CE5DjBsABXQoAAOMEwABtDdAhQ5rUwV0BQAAcCkAALJmAAT0G0ZAdCgAC8wFAAVMBQAFDBJORU5LTkVOTAACTCsAAswXAAKYFFAFTAxQQ8wrAAkMK0ZDzCQAA85rR4NMIAAFDB5FjYweAAU0JQAFLCIABTARAAAAAAAAAOvZQAEHs0ABEJbAARaEAAEhxsABMl4AAT7QAAFOOAABVLzAAWoSAAGAWgABhewAAbL1QAG9oAAByqlAAdaDQAHZegAB3/7AAeaDQAH1VAACAl1AAheywAIdn0ACLQgAAjl5QAJI4gACVVNAAl7OwAJkvAACfZ9AAoCWAAKFU0ACloLAApl5QAKccAACqXlAAqqowAKr2AACslzAAr7OwALRLUAC1CQAAt8QAALjjAAC9oLAAwvYAAMY4UADLjbAA0OMAANcb0ADZerAA60GwAPL10AD6qgAAAAAAABS9sABdJ8AAcccQAIAAAACKqrAAkklQAJOOAACbnVAAoccQAKe0MACs6QAArYCwALHHEAC+ONAAwAAAAAAAD//dJ8AADHHAAA448AATjgAAGOOQACAAAAArjjAAMccAADHHEABAAAAAAAAAAAFuwAADd3AABLBQAAUhEAAFdfAABqQAAAaz8AAH8cAACCbwAAig8AAKCIAAC3GQAAvuUAAMztAADNZwAA9E8AAQgkAAEO3AABGIwAASnRAAE30AABP9gAAUAZAAFE5wABS8AAAVYMAAFWYQABWjwAAV3kAAFejAABah0AAWrEAAFrywABbTwAAXRHAAF3zQABfckAAYI4AAGJpAABkMEAAZUtAAGaPAABuqUAAcrvAAHjrwAB5dwAAe0xAAIOnQACHZAAAiTlAAJGUQACjPgAApRNAALA3QADcx0AbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb//FCb//wHIAABFoQAAb2g//+QmP/+scgAAG9o//5CYAADZqAABTjgAAKccAABvaAABxxxAA+qoAABvaA=","cmssi17":"AX4AEgAAAH8ANwAQAAoAOABOAAgAAAAHoI/udQEUeuAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NJAAAAAAAAAAAAAAAAAAAAAADbF9DIADHQAAAu0FwAHNAAACPQwAAo0HgAKtC8AC7QjAAq0DQALtCMACrQcAAa0N0KFtCoABbQpAAw0KgAMNCkAAEwMAACODAAFNAAABTQmAAUkIAAFNCgABSAhAAs0AAADgcAABLQmAAqMEwALjBMABRVPAAy0LwANdC8AC7iXAABMAEAB9BFFxTQBAAx2DgAFPOwADHzKAAt0CQABNBtEgz5xAAM+RgAFPC4AC50GAAEFgAACDANFQQQAAAU+cQAFLCwABSwsAAUsLAAFLCwABSwsAAUsLAAFLCwABSwsAAUsLAAFLCwAAQwHAAENhwAB0gUAC4hOAARSAAAEdC1GCPQXAAh0AFCItBwAB/QvAAp0F00G9C8ABnQySMj0LwAKNB4AAPQyU0Q0HgAJ9C9KRfQAUgz0HgAKNB4ACvQXTQe0HEdK9ZcACDQcAAY0JgAJNDJLSbQeAAh0NUjNNDVIyHQySkh0NkuHdC8AAX50AAU0MwABfmUABTQZAAEwFgABNBtERIwCT8V0CE5DjBgABXQpAAOMEwABtDdAhQ4rUwV0BAAAcCcAALIkAAT0GEZAdCkAC8wEAAVMBAAFDBJORU4LTkVODAACTCsAAswVAAKYFFAFTAxQQ8wrAAlMK0ZDzCIAA84rR4NMHQAFDBpFjYwaAAU0JgAFKB8ABTAQAAAAAAAAAOP7gAD+uwABCQSAAQt8wAEXbEABJjyAATL+gAFA/EABR/tAAVu8AAFxIkABdnuAAaIagAGr+wABufkAAcV+gAHGusABzbnAAdS4gAHhekAB73hAAgM5AAII+4ACFvnAAiO7QAIxuYACPnsAAkoAwAJMeQACZfyAAmc4wAJs+0ACf4AAAoC8QAKB+IACj/ZAAo/2gAKTQQACmj/AAqcBwAK2O4ACt3fAAsV1gALMGgAC2TaAAuz3QAL69UADDrXAAyJ2gAM7+gADR3/AA4r9AAOm+MADwvTAAAAAAABSTgABbBzAAbjSwAH/7wACHGmAAjbGgAJA88ACZnOAAoOKAAKe5oACn5rAAqCMAALHHIAC+OgAAv8UAAAAAD//bC3AADHLgAA394AAQQTAAGOWwACAZUAArkfAAMctQAD/JMAAAAAAAA4dQAAOZcAAFBnAABYVQAAXN8AAG6iAABvbQAAgCUAAITTAACG1wAAoD0AALSQAADDTgAAypQAANIXAAEFiAABBjcAAQZbAAEUzgABITQAATaaAAE7BwABPDkAAUwAAAFR4QABUqEAAVU7AAFadQABXhwAAWDCAAFkbAABZQcAAWntAAFsGQABeLAAAXmUAAF68AABhpwAAYoKAAGYuAABml4AAaQ9AAGsTAAB0AQAAeOvAAHrsQAB8ZsAAhG0AAIhMQACJxoAAkczAAKMLwACkhkAArzmAANoFwBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AZYAEAGGABABvgASAY4AEAEGABQBvgAQAZYAEAGGABAAugAWALIAFAG+ABABlgAQAdYAEAHKABABhgAQAQYAFAE+ABABDgAQAR4AEgFGABAB5gAUAZYAFAG+ABQBygAUAYYAFAEGABYB1gAUAWIAEAFeABABBgAQAVoAEgFmABABlgAYAb4AGAHiABABkgAYAY4AGAHGABgBygAQAeYAEgHeABAB0gAQAQ4AEAE+ABABHgAQAVYAEAFGABABUgAUAWYAFAFaAB4BXgAeAaoAGgEmABv/8cBL//CYAAAELfQABq/v//5UB//6/BAAAav///lQFAANmoAAFA/EAAoH4AAGr+wAG40sADwvTAAGr+w==","cmssi8":"AXcAEgAAAH8AMAAQAAsANwBOAAgAAAAHIFIWvACAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NJAAAAAAAAAAAAAAAAAAAAAADuFdDEACrQAAAn0FAAGtAAAB3QvAAi0GgAI9C4ACfQiAAj0DAAJ9CIACPQbAAY0NkKFNCgABTQnAAp0KAAKdCcAAEwLAACOSwAEtAAABLQjAASkGQAEtCYABKAfAAk0AAADQcAABDQjAAjMEgAJzBIABJUNAAr0LgALtC4ACfiUAABMAEABtA9FxLQAAAq2DgAEvOsACrzIAAm0BwAA9BVEgv6wAAL+hgAEvCwACd1GAADFgAABzARFQMQAAAS+sAAEqCsABKgrAASoKwAEqCsABKgrAASoKwAEqCsABKgrAASoKwAEqCsAAMwFAADNhQABkkIACchOAAPSQAAD9C1GB3QUAAd0AFCHdBsABvQuAAj0FE0GdC4ABfQxSMd0LgAItBoAAPQxU0P0GgAIdC5KRXQAUgs0GgAItBoACXQUTQb0G0dJdZQABzQbAAW0IwAH9DFLSDQaAAd0NEjLdDRIx3QxSkd0NUuGtC4AAT6zAAS0MgABPp0ABLQWAADwGAAA9BVERAwBT8T0CU5DTBwABPQnAANMEgABdDZAhI5qUwT0AwAAcCkAALJlAAR0HEZAdCcACgwDAATMAwAEjBFORM5KTkTOSwACDCoAAowXAAJYE1AEzAtQQ4wqAAeMKkZDjCQAA45qR4MMIAAEjCFFi8whAAS0IwAErB4ABLAQAAAAAAAAAQOPAAEhyAABLjoAATxzAAFMcwABWOSAAWqsAAFzj4ABiOUAAaESgAGnHgAB2OUAAeOQAAH1VwACAckAAgqsgAITkAACIAIAAjHJAAJHHoACUAKAAlx0AAJuO4ACeq0AAox0gAKY5gACtx8AAsACgALVWAAC5x8AAucfgALqrYAC85EAAwACgAMRygADHeWAAyORgAM45oADTjwAA2ADAAN1WIADiq4AA6jnAAO1WIAEA5IABCHLAARABAAAAAAAAFxyAAGGiwABxxyAAgAAAAIqqwACSSWAAmqsAAJ1VQAChxyAAqAAAAK4YgACvbeAAsccgAL444ADAAAAAAAAP/+GiwAAMccAADjjgABjjoAAaqwAAIOOAACuOQAAxxwAAMccgAEAAAAAAAAAAAjgAAAM04AAERAAABIlgAAWEYAAGDEAABtnAAAePIAAIF6AAClvgAApoAAALVqAAC3lAAA0ygAANyYAAEC1gABDtwAAR0iAAEiPAABLlQAATHuAAE0CgABOmoAAT9IAAFGLgABR0QAAUyQAAFSlgABWzAAAV5MAAFhvAABZRYAAWgIAAFqygABatIAAXbcAAF4LAABeQoAAYAoAAGHRAABlJ4AAb9kAAHCdgAB16IAAeOuAAHjtgACB/oAAhQUAAIgKAACRGwAAoz4AAKZDAACyWgAA4rUAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//vxxP/7nG4AAS46AAHjkP//hxz//pVUAAB45P/+HHAAA2agAAWqsAAC1VgAAeOQAAcccgARABAAAeOQ","cmssi9":"AX0AEgAAAH8ANwAQAAoANwBOAAgAAAAHK6GXFwCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NJAAAAAAAAAAAAAAAAAAAAAADsGNDEADHQAAAu0FAAHtAAACLQvAAo0GQAKdC4AC7QiAAp0DAALtCIACnQaAAb0NkKF9CgABfQnAAw0KAAMNCcAAEwLAACOCwAFdAAABXQjAAVkGwAFdCYABWAhAAr0AAADgcAABPQjAApMEgALjBIABVVNAAy0LgANdC4AC7iUAABMAEAB9A9FxXQAAAx2DgAFfOsADHzIAAt0BwAA9BVEgz5wAAM+RgAFfCwAC50GAADFgAACDARFQMQAAAV+cAAFaCsABWgrAAVoKwAFaCsABWgrAAVoKwAFaCsABWgrAAVoKwAFaCsAAMwFAADNhQAB0gIAC4hOAARSAAAEdC1GCLQUAAk0AFCI9BoAB/QuAAq0FE0HNC4ABrQxSMi0LgAKNBkAATQxU0S0GQAJ9C5KRjQAUgz0GQAKNBkACzQUTQg0GkdLNZQACHQaAAZ0IwAJdDFLSbQZAAk0NEjNNDRIyTQxSkk0NUuHdC4AAX5zAAV0MgABfl0ABXQXAADwGAAA9BVERMwBT8W0CU5DjBwABbQnAAPMEgABtDZAhU4qUwW0AwAAcCkAALIlAAU0HEZAdCcAC8wDAAWMAwAFTBFORY4KTkWOCwACTCoAAswWAAKYE1AFjAtQRAwqAAlMKkZEDCQABA4qR4NMIAAFTB5FjYweAAV0IwAFbB8ABXAQAAAAAAAAAPtBwAEYfcABJFgAASXsgAExxsABQZQAAU1uQAFe0AABZ4EAAXwMAAGTb4ABmUgAAcl6QAHTwAAB08CAAeUhwAHw/AAB8cZAAfmtAAICXcACDjgAAh+ZwAI0JQACPaAAAkiwAAJa3AACZewAAngYAAKDKAAChLyAAqBkAAKhLkACqd8AAr2gAAK+akACvzSAAs8BwALTv4AC3HCAAuhKwAL4GAAC+OJAAwfBwAMJecADHgUAAzKQAAND8cADWH0AA20IAAOLDkADl7LAA+OMgAP//kAEHHAAAAAAAABYfkABgJHAAcccgAIAAAACKqrAAkklQAJe0AACc6yAAoccgAKeBkACtmgAArslwALHHIAC+OOAAwAAAAAAAD//gJHAADHHAAA444AAXtAAAGOOQACBlIAArjkAAMccgAEAAAAAAAAAAApRAAAPmAAAEn1AABMiQAAYC4AAGS5AAB2TgAAfOcAAIJEAAClVwAArAkAALlcAADDDAAA0gcAAOerAAEIKQABDtwAARwgAAElZQABMkkAATnXAAE8xwABPrcAAUKiAAFJpQABUIQAAVDbAAFULAABY+QAAWQUAAFkhQABZd4AAWZAAAFuvgABcrsAAXdAAAF7hQABgokAAYWyAAGMBAABlM4AAb1rAAHEuwAB3ZAAAeOuAAHnqwACCr4AAhgJAAIiIgACRTcAAoz5AAKXFAACxdkAA4D0AGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//wS+f/7vaQAASRZAAHTwP//ixD//qEwAAB08P/+LEAAA2agAAV7QAACvaAAAdPAAAcccgAQccAAAdPA","cmssq8":"AUYAEgAAAH8ANQAPAAgABQBOAAgAAAAHS3RFbwCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NRAAAAAAAAAAAAAAAAAAAAAADuF6AAADCgAAAsoAAAGaAAACSgAAAhoAAAKaAAACygAAApoAAALKAAACmgAAAYsBEKFbAAABWwAAAusAAALrAAAAEwAAACNgAAE7AAABOwAAATYAAAE7AAABNwAAAfsAAADgQAABKwAAApMAAALDAAABNTAAAxoAAAM6AAACzSAAABMAEABrABFxOwAAAwtQAAE+MAADDjAAAqsAAABLABEgznAAAM5wAAE+AAACzGAAAEFgAACDABFQQQAAAT5wAAE4AAABOAAAATgAAAE4AAABOAAAATgAAAE4AAABOAAAATgAAAE4AAAAQwAAAENgAABkYAACwhAAARRgAAEbABGCSwAAAfoAFCI6AAAB6gAAAnoAE0HKAAABqgASMkoAAAIaAAAAOgAU0QoAAAJqABKRegAUgvoAAAIaAAACugATQdoAEdK6YAACKgAAAWoAAAKKABLSCgAAAfoAUjMqAFIx+gASkfoAkuG6AAAAXnAAATsAAABecAABOwAAAEsAAABLABEREwAT8UsAE5DjAAABSwAAAOMAAAB7ARAhQ2AUwUsAAAAbAAAAK2AAASsAEZAbAAAC0wAAAUMAAAEzABORQ2ATkUNgAACTAEAAswAAAKkAFAFDABQQ8wBAAlMAUZDzAAAA82BR4NMAAAEzANFjQwDAATsAAAE7AAABOwAAAAAAAAAARxygAFAAQABRx0AAWOOgAFo5AABaqsAAYcdAAGqqwABqquAAc45AAHqqwAB8ceAAicdAAI45AACOOSAAk45gAJccoACXHMAAoAAgAKAAQACo48AAscdAALVVgAC6quAAvHIAAL45IADDjmAAxxygAMjjwADMcgAAzjkgAM8cwADQAEAA0OPAANHHYADVVYAA1VWgANccwADjjoAA5VWAAOccoADwAEAA9xygAPjjwAD44+ABAcdgAQVVoAEKquABEABAASccwAEzjoABQABAAAAAAAAY44AAbgAAAIVVYACOOOAAlxyAAKaqwACn/+AAqOOAAKtuAACvHIAAsccgALHHQAC4ACAAw45AAAAAD//fxwAACOOgABHHIAAfHIAAI44AACOOQAA1VUAAAAAAAARxwAAIAAAACOOgABY44AbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb/+442//s44AABY44AAjjk//9xxv/+VVQAAI46//3HHAAAAAAABqqsAANVVgACOOQACFVWABQABAACOOQ=","cmssqi8":"AXYAEgAAAH8ANgAPAAgANABOAAgAAAAHnQUCAQCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNU1NRSQAAAAAAAAAAAAAAAAAAAADuF6C0ADGgAAAtoEwAGaAAACSgrAAhoFAAKqCkAC2geAAqoCwALaB4ACqgXAAYsM0KFbCMABWwgAAvsIwAL7CAAAEwOAACNjgAE7AAABOwdAATYHAAE7BkABNwhAAnsAAADgQAABKwdAAqMFgALTBYABNTJAAyoKQANKCkAC3STAABMAEABrA9FxOwAAAxtUAAE+OYADHjFAArsDQABLBFEgznsAAM5xgAE+CgAC3GGAAEFgAACDANFQQQAAAT57AAE4CYABOAmAATgJgAE4CYABOAmAATgJgAE4CYABOAmAATgJgAE4CYAAQwCAAENggABkYcAC0hQAARRgAAEbCpGCSwVAAfoAFCI6BcAB6gpAAooE00HKCkABqgtSMkoKQAIaBQAAOgtU0QoFAAJqClKRegAUgwoFAAIaBQACygTTQdoF0dLKZMACKgXAAWoGgAKaC1LSCgUAAfoMUjM6DFIx+gtSkfoMkuG6CkAAXnwAATsLwABedIABOwYAAEsEQABLBFEREwBT8UsCE5DjCQABSwgAAOMFgAB7DNAhQ2OUwUsBAAAbCMAAK2gAASsJEZAbCAAC4wEAAUMBAAEzBtORQ2KTkUNjgACTC4AAswiAAKkH1AFDA5QQ8wuAAlMLkZDzCcAA82uR4NMJwAEzCVFjUwlAATsHQAE7B0ABOwMAAAAAAAAARxygAFAAQABRx0AAWOOgAFo5AABaqsAAYcdAAGqqwABqquAAc45AAHqqwAB8ceAAicdAAI45AACOOSAAk45gAJccoACXHMAAoAAgAKAAQACo48AAscdAALVVgAC6quAAvHIAAL45IADDjmAAxxygAMjjwADMcgAAzjkgAM8cwADQAEAA0OPAANHHYADVVYAA1VWgANccwADa0aAA446AAOVVgADnHKAA8ABAAPccoAD448AA+OPgAQHHYAEFVaABCqrgARAAQAEnHMABM46AAUAAQAAAAAAAGOOAAG4AAACFVWAAjjjgAJccgACmqsAAp//gAKjjgACrbgAArxyAALHHIACxx0AAuAAgAMOOQAAAAA//38cAAAjjoAARxyAAHxyAACOOAAAjjkAANVVAAAAAAAADFCAABTrAAAVIAAAFSIAABjnAAAY54AAGOsAABp1gAAkCIAAJSAAACbigAAo7YAAKkAAAC+VgAA3JgAAOfeAADq0gABA7oAARKmAAEThgABGP4AASneAAEwbAABMVQAATHuAAE3FgABPWoAAT3sAAFAKAABTjQAAVOuAAFVfAABZgIAAXAeAAF5CgABjJAAAaZ4AAGwJAABtzoAAcO6AAHFTgAB464AAe/6AAIK1gACDGwAAgyQAAJAKAACmRAAApqkAALTiAADwCgAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb/+442//s44AABY44AAjjk//9xxv/+VVQAAI46//3HHAADZqAABqqsAANVVgACOOQACFVWABQABAACOOQ=","cmsy10":"ARkAEgAAAH8ALAAPABAAEgAHAAcAAAAWISIsmgCgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADqIKgAAANCAAAgqAAACGQAACCoAAAIQgAAIKgAACCoAAAgqAAAIKgAACCoAAAgqAAAIKgAACrdAAAIQgAACEIAACBTAAAgUwAAILsAACC7AAAguwAAILsAACC7AAAguwAAICEAACB1AAAghgAAIIYAACqGAAAqhgAAIIYAACCGAAAqIQAAKiEAAAjcAAAI3AAAKiEAACrcAAAq3AAAIFMAACohAAAqIQAAENwAABDcAAAqIQAAKtwAACrcAAAgMAAAApAAACowAAAUhgAAFIYAACjdAAAo3QAAAdwAAAEhAAAN0AAADdAAABQwAAAI5wAAG9AAABvQAAAg0AAAINAAABDQAAAiwAEGE8ARBAnAFQQfwA0CCsAtAxrAMQMOyRkDJsAFAwvAHQAWyUEFHsAJARfAAQQrwAEEJMA9AiHADQMYwCkCI8kBAyfAAQIPwCEEDMBFABLAMQIRwCkAKcApAhnAOQQVySkCHMAlBBSQAAAUkAAAFJAAABSQAAAUkAAAENAAABDQAAAG7gAABu4AAAbuAAAG7gAACO4AAAjuAAAE7gAABO4AAAPuAAAI7gAACO4AABDuAAAI7gAAA9wAACUfAAAdwAAAJcAAAAXdNAAUkAAAFJAAACC7AAAguwAAB90AAAbdAAAG3QAAEN0AACDaAAAg2gAAINoAACDaAAAAAAAAAAAAAAAEZmYABHHIAAY45QAGqq0ABxxzAAccdQAIAAIACGyqAAhxywAItlYACLbdAAjjkAAJhJIACbBeAAnHHgAJzfUACgNoAAqCSwAKqq0ACrGCAArYMAALCR0ACyEDAAtpqgALf/4AC447AAuYegAMAAIADDDzAAxXoAAMccoADLziAAzGigANERUADSC7AA1VWAANgyUADY9gAA445gAPzfYAEAADABM24wAAAAAAAKPWAAXeuAAG444ABxxzAAdrgwAHccgAB7reAAigJQAI45AACVVWAAos8AAK7u4ACxxyAAwAAAAAAAD//d64//8cc///a4P//3HI//+63gAAoCUAAOOOAAFVVgABjjoAAhL2AAIs8AADHHAAAxxyAAQAAAAPXCoAAAAAAAAniwAAOysAAHHIAAB8kgAA7vIAAPLoAAEuYAABMy4AAUVmAAFQyAABbloAAZbCAAHHHQACV8UAAluWAAL0ngAEERKAMIAAgDCAAYAwgAKAMIADgDCABIAwgAWAMIAGAABxyAAA45AAAVVYAAHHIAACOOgAAqqwAAMceAAEAAAAAAAAAAAAAAAAAAAABuOOABAAAwAAAAAACtL6AAZMugAHGYYACvmoAAWEeAAGmzUABc5oAASfSgACZmYAA/SaAAYtgAAAzM0AJj1wABAo9gAEAAA=","cmsy5":"ARYAEgAAAH8ALAAPAA8AEAAHAAcAAAAWsNwwbgBQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAAD0HqoAAANTAAAeqgAAB0IAAB6qAAAHUwAAHqoAAB6qAAAeqgAAHqoAAB6qAAAeqgAAHqoAACnLAAAHUwAAB1MAAB5kAAAeZAAAHtwAAB7cAAAe3AAAHtwAAB7cAAAe3AAAHiEAAB51AAAemAAAHpgAACmYAAApmAAAHpgAAB6YAAApIQAAKSEAAAfLAAAHywAAKSEAACnLAAApywAAHmQAACkhAAApIQAAEMsAABDLAAApIQAAKcsAACnLAAAeMAAAAoAAACkwAAAUmAAAFJgAACjLAAAoywAAAcsAAAEhAAAKwAAACsAAABQwAAAH5gAAG8AAABvAAAAewAAAHsAAABDAAAAisAEGErAFBAmwDQQfsAkCCLAdAxewKQMNtxUDJrABAwuwEQAVtzkFHbABARawAQQrsAEEI7A1AiCwCQMasCUCJLcBAyewAQIOsBkEDLA9AA+wKQIRsCUAKrAlAhmwMQQTtyUCGLAhBBSAAAAUgAAAFIAAABSAAAAUgAAAEMAAABDAAAAG7QAABu0AAAbtAAAG7QAAB+0AAAftAAAE7QAABO0AAAPtAAAH7QAAB+0AABDtAAAH7QAAA8sAACEeAAAcsAAAJbAAAAXLLAAUgAAAFIAAAB7cAAAe3AAABssAAAbLAAAGywAAEMsAAB7JAAAeyQAAHskAAB7JAAAAAAAAAAAAAAAHDj0AB1VaAAmOQAAKHHoACqqzAAvHJgAMVWAADINzAAzjmgANHMoADSiwAA2bXQAN45oADfrqAA4ADQAOYeoADrWGAA7fEAAPHIAAD1VjAA9vkAAPz7AAD9zKAA/yPQAP9mYAEDjzABCT+gAQ4V0AEVVmABFXsAARbUoAEY5NABHQ1gASBFYAEhyDABJx2gATHNAAEyNdABOOTQAVxzMAFeHzABkV9gAAAAAAAOVgAAZXrQAG440AB3HGAAfjkwAIPKYACJ2mAAjjkAAJnVoACqqzAAru8AALHHMAC4JWAAwAAAAAAAD//let//9xxv//45MAADymAACdpgAA440AAY46AAGdWgACEvYAAqqzAAMccwADglYABAAAAA8aoAAAAAAAAEQ9AACOOgAAnroAANWgAADYKgABFwYAAT39AAFQxgABXwAAAaT6AAI45gACV8YAAngKAAMC2gAEZmqAMIAAgDCAAYAwgAKAMIADgDCABIAwgAWAMIAGAACOOgABHHMAAaqtAAI45gACxyAAA1VaAAPjkwAEAAAAAAAAAAAAAAAAAAAABuONABeOTQAAAAAADs3KAAYzDQAIEO0AEGdjAAiCswAIDpAABnT2AAS2DQADMzMABmZmAAfpQAABmZoAH64TABa4UwAEAAA=","cmsy6":"ARcAEgAAAH8ALAAPABAAEAAHAAcAAAAWcaElCwBgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADyH6oAAANTAAAfqgAAB0IAAB+qAAAHUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACnMAAAHUwAAB1MAAB9kAAAfZAAAH90AAB/dAAAf3QAAH90AAB/dAAAf3QAAHyEAAB91AAAflwAAH5cAACmXAAAplwAAH5cAAB+XAAApIQAAKSEAAAfLAAAHywAAKSEAACnLAAApywAAH2QAACkhAAApIQAAD8sAAA/LAAApIQAAKcsAACnLAAAfMAAAAoAAACkwAAAUlwAAFJcAACjMAAAozAAAAcsAAAEhAAAKwAAACsAAABQwAAAH5gAAG8AAABvAAAAfwAAAH8AAAA/AAAAhsAEGErAFBAmwDQQesAkCCLAhAxiwKQMNuBEDJrABAwuwFQAVuDkFHbABARawAQQrsAEEI7A1AiCwCQMXsCUCJLgBAyewAQIOsBkEDLA9ABCwKQIRsCUAKrAlAhmwMQQTuCUCGrAdBBSAAAAUgAAAFIAAABSAAAAUgAAAD8AAAA/AAAAG7gAABu4AAAbuAAAG7gAAB+4AAAfuAAAE7gAABO4AAAPuAAAH7gAAB+4AAA/uAAAH7gAAA8sAACIfAAAcsAAAJbAAAAXMLAAUgAAAFIAAAB/dAAAf3QAABswAAAbMAAAGzAAAD8wAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAF2hMABhL1AAgl6wAIqqsACS9lAAo44AAKvZ0ACtqgAAtCWwALWWMAC2GAAAvygwAMMUgADEvVAAxkFQAMkEsADQM1AA0upQANVVAADYpoAA2sKwAODgMADhPgAA4jdQAOJMUADl7LAA7I+wAPBU0AD2EQAA9oRQAPkTsAD9bNAA//+AAQFzUAECIbABBxwAAQ8vgAEPtrABF7OwATjjAAE5BFABbV8AAAAAAAANOgAAY9KAAG440AB3HIAAehLQAIEIAACG34AAjjkAAJaGUACjjgAAru8AALHHMACzu9AAwAAAAAAAD//j0o//9xyP//oS0AABCAAABt+AAA440AAWhlAAGOOwACEvgAAjjgAAMccAADHHMAAzu9AAQAAAAPLGAAAAAAAABXBQAAhL0AALl7AADhGAAA9CsAASBrAAFM/QABTiAAAVpDAAGgPQACEvUAAlfIAAJujQAC/h0ABEn1gDCAAIAwgAGAMIACgDCAA4AwgASAMIAFgDCABgAAhL0AAQl7AAGOOAACEvUAApezAAMccAADoS0ABAAAAAAAAAAAAAAAAAAAAAbjjQAUccAAAAAAAA0A0AAGRv0AB8JAAA3RZQAG3q0ACAwoAAa20wAEl7UAAqqrAAVVVQAGl7AAAVVVAB+7uwAVmZsABAAA","cmsy7":"ARgAEgAAAH8ALQAPAA8AEQAHAAcAAAAWTyHihQBwAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADwIKkAAANTAAAgqQAACEIAACCpAAAIUwAAIKkAACCpAAAgqQAAIKkAACCpAAAgqQAAIKkAACvcAAAIUwAACFMAACBkAAAgZAAAIMsAACDLAAAgywAAIMsAACDLAAAgywAAICEAACB1AAAglwAAIJcAACuXAAArlwAAIJcAACCXAAArIQAAKyEAAAjcAAAI3AAAKyEAACvcAAAr3AAAIGQAACshAAArIQAAENwAABDcAAArIQAAK9wAACvcAAAgMAAAAoAAACswAAAVlwAAFZcAACncAAAp3AAAAdwAAAEhAAAM0AAADNAAABUwAAAI5gAAHNAAABzQAAAg0AAAINAAABDQAAAisAEGE7AJBAqwEQQfsA0CCbApAxmwLQMOuBUDJ7ABAwuwGQAWuD0FHrAFARewAQQssAEEI7A5AiGwDQMYsCUCJLgBAyiwAQIPsB0EDbBBABGwLQISsCUAKrAlAhqwNQQUuCUCG7AhBBWAAAAVgAAAFYAAABWAAAAVgAAAENAAABDQAAAG7QAABu0AAAbtAAAG7QAACO0AAAjtAAAE7QAABO0AAAPtAAAI7QAACO0AABDtAAAI7QAAA9wAACUeAAAdsAAAJrAAAAXcMAAVgAAAFYAAACDLAAAgywAAB9wAAAbcAAAG3AAAENwAACDaAAAg2gAAINoAACDaAAAAAAAAAAAAAAAFRRUABW25AAdlmQAH5ZsACGGJAAhhiwAJXXkACdt1AAnsRwAKWBIACllpAApdeQALBCsACzwpAAtVWQALfBsAC4TSAAwOFQAMOt4ADFFJAAyDrgAMqtsADPJJAA0X+wANGgkADSuXAA1NOQANvwIADfJlAA47MAAOSSkADn5QAA6ugAAO+BkADvmHAA8EFQAPRRkAD6iHAA+yUgAQQQkAEilnABI46QAVe6cAAAAAAADG8gAGJTAABuOOAAdxxwAHcckAB+blAAhA1QAI45AACTX3AAnnoAAK7vAACveuAAsccgAMAAAAAAAA//4lMP//ccf//3HJ///m5QAAQNUAAOOOAAE19wABjjkAAeegAAIS9wAC964AAxxyAAQAAAAPOQ4AAAAAAAAFiQAAZHAAAH35AADMkgAA53IAAQn3AAEnIAABSkcAAVbiAAFZoAABnNkAAffgAAJXxQACZ8kAAvq3AAQ1pYAwgACAMIABgDCAAoAwgAOAMIAEgDCABYAwgAYAAH35AAD78gABeesAAfflAAJ13gAC89cAA3HQAAQAAAAAAAAAAAAAAAAAAAAG444AErryAAAAAAALt44ABiR3AAeKDgAMCM4ABYHnAAgKawAG5dkABJJJAAJJJQAEkkkABaaXAAEkkgAbMzIAEoOpAAQAAA==","cmsy8":"ARgAEgAAAH8AKwAPABAAEgAHAAcAAAAWvkvICwCAAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADuH6kAAANCAAAfqQAAB1MAAB+pAAAHQgAAH6kAAB+pAAAfqQAAH6kAAB+pAAAfqQAAH6kAACndAAAHQgAAB0IAAB9kAAAfZAAAH7sAAB+7AAAfuwAAH7sAAB+7AAAfuwAAHyEAAB91AAAflwAAH5cAACmXAAAplwAAH5cAAB+XAAApIQAAKSEAAAfcAAAH3AAAKSEAACncAAAp3AAAH2QAACkhAAApIQAAD9wAAA/cAAApIQAAKdwAACncAAAfMAAAAoAAACkwAAAUlwAAFJcAACfdAAAn3QAAAdwAAAEhAAAM0AAADNAAABQwAAAH5gAAG9AAABvQAAAf0AAAH9AAAA/QAAAhwAEGEsANBAnAFQQewBECCMAtAxnAMQMNyBkDJcAFAwrAHQAVyEEFHcAJARbAAQQqwAEEI8A9AiDAEQMXwCkCIsgBAybAAQIOwCEEC8BFABHAMQIQwCkAKMApAhjAOQQTyCkCGsAlBBSAAAAUgAAAFIAAABSAAAAUgAAAD9AAAA/QAAAG7gAABu4AAAbuAAAG7gAAB+4AAAfuAAAE7gAABO4AAAPuAAAH7gAAB+4AAA/uAAAH7gAAA9wAACQfAAAcwAAAJMAAAAXdNAAUgAAAFIAAAB+7AAAfuwAABt0AAAbdAAAG3QAAD90AAB/aAAAf2gAAH9oAAB/aAAAAAAAAAAAAAAAEnHIABLjoAAaceAAHGOoAB45AAAiACAAI+OwACQCaAAleLgAJYZAACXHQAAoYgAAKS2oACmOYAAp/xAAKmuYACx1WAAtLIgALVWAAC4W8AAuw9gAL5JoADBoMAAwiKAAMN8wADEcoAAy7yAAM60wADSXiAA048AANdzoADZdcAA3iMAAN594ADiq4AA53zgAOgp4ADxyAABDfygARABAAFDt6AAAAAAAAuFIABgw8AAbjjgAHTjwAB3HIAAe8TgAIErYACOOQAAkCkAAJqrAACrKiAAru7gALHHIADAAAAAAAAP/+DDz//048//9xyP//vE4AABK2AADjjgABApAAAY46AAGqsAACEvYAArKiAAMccAADHHIABAAAAA9HrgAAAAAAAATYAAAb4AAAbn4AAHjkAADa5AAA7DoAARbEAAEsJgABSD4AAVRWAAFiRAABmlAAAeOQAAJXxgACYrQAAvguAAQmaIAwgACAMIABgDCAAoAwgAOAMIAEgDCABYAwgAYAAHjkAADxyAABaqwAAeOQAAJcdAAC1VgAA048AAQAAAAAAAAAAAAAAAAAAAAG444AEQAQAAAAAAALJCwABoqUAAdRsAAL/FoABkZQAAaljAAFpYwABI44AAIAAAAEAAAABlVWAAEAAAAXzMwAEjM0AAQAAA==","cmsy9":"ARcAEgAAAH8AKwAPAA8AEgAHAAcAAAAWqbGQygCQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADsH6gAAANCAAAfqAAAB1MAAB+oAAAHQgAAH6gAAB+oAAAfqAAAH6gAAB+oAAAfqAAAH6gAACncAAAHQgAAB0IAAB9kAAAfZAAAH7sAAB+7AAAfuwAAH7sAAB+7AAAfuwAAHyEAAB91AAAfhgAAH4YAACmGAAAphgAAH4YAAB+GAAApIQAAKSEAAAfcAAAH3AAAKSEAACncAAAp3AAAH2QAACkhAAApIQAAD9wAAA/cAAApIQAAKdwAACncAAAfMAAAApAAACkwAAAUhgAAFIYAACfcAAAn3AAAAdwAAAEhAAAM0AAADNAAABQwAAAH5wAAG9AAABvQAAAf0AAAH9AAAA/QAAAhwAEGEsARBAnAFQQewA0CCMAtAxnAMQMNyRkDJcAFAwrAHQAVyUEFHcAJARbAAQQqwAEEI8A9AiDADQMXwCkCIskBAybAAQIOwCEEC8BFABHAMQIQwCkAKMApAhjAOQQTySkCGsAlBBSQAAAUkAAAFJAAABSQAAAUkAAAD9AAAA/QAAAG7QAABu0AAAbtAAAG7QAAB+0AAAftAAAE7QAABO0AAAPtAAAH7QAAB+0AAA/tAAAH7QAAA9wAACQeAAAcwAAAJMAAAAXcNAAUkAAAFJAAAB+7AAAfuwAABtwAAAbcAAAG3AAAD9wAAB/aAAAf2gAAH9oAAB/aAAAAAAAAAAAAAAAEeBkABJFgAAZlIAAG2hIAB08AAAg44AAIrdAACK5gAAkA5QAJArAACSLAAAnGRwAJ9TwACgygAAoc8AAKRrQACscpAAr1wgAK9oAACyVFAAtTrAALd+QAC7gEAAvIBwAL3z4AC+BgAAxUrgAMg7kADLM+AAzKQAAND6cADSNLAA1t9QANeS4ADbQgAA3v0AAN+2sADp4AABBHlwAQccAAE6qkAAAAAAAArPIABfTpAAbjjgAHMpAAB3HHAAeTVwAH5jkACNDJAAjjkAAJe0AACm83AAru7gALHHIADAAAAAAAAP/99On//zKQ//9xx///k1f//+Y5AADQyQAA444AAXtAAAGOOQACEvcAAm83AAMccgAEAAAAD1MOAAAAAAAAGCIAAC1HAAB08AAAdlIAAOYLAADv8AABI+QAATAOAAFGqwABUlwAAWj8AAGYVQAB08AAAlfFAAJewAAC9jUABBqMgDCAAIAwgAGAMIACgDCAA4AwgASAMIAFgDCABgAAdPAAAOngAAFe0AAB08AAAkiwAAK9oAADMpAABAAAAAAAAAAAAAAAAAAAAAbjjgAQccAAAAAAAApZCwAGjiQABzJ8AAraAAAFbesAB6+VAAbMBwAEl7QAAcccAALQngAFoTQAAOOOACp9JwAQLYQABAAA","cmtcsc10":"AMIAEgAAAH8AAwAQAA0AAQACAAAAAAAH0zcZrQCgAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNVENTQwAAAAAAAAAAAAAAAAAAAADqAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABPAAAATwAAAFgAAABYAAAAdAAAAHQAAABwAAAAdAAAAGwAAAB0AAAAQsAAAJgAAABYAAAAWAAAAGEAAAB0AAAAdAAAAHkAAABKQAAAdABAAHQAAAB0AAAAfYAAAH2AAAB0AAAAdAAAAH1AAAB9QAAAXAAAAGSAAABGgAAAZIAAAEQAAAB9QAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWgAAAaMAAAFBAAABowAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdoAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH1AAAB9QAAAfUAAAHQAAABBwAAAdAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABaAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAfUAAAH1AAAB9QAAAdAAAAHQAAAAAAAAAAhmYgAQzMMAAAAAAAIAAAADgtgABjjjAAamZQAG444AB446AAhVVgAIccgACH0mAAjjjgAJDIMACQ46AAnHHQAKqqsACxxyAAAAAP/830j//rYK//8ccgAA444AAVVTAAFVVQABha0AAbBbAAHHHQACOOMAAxxzAAOOOgAAAACAYAAOgGAADwAAAAAACGZiAAAAAAAAAAAABuOOABDMwwAIZmI=","cmtex10":"AMAAEgAAAH8AAgAQAA4AAQAAAAAAAAAH3+o8eACgAAASVGVYIGV4dGVuZGVkIEFTQ0lJAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNVEVYAAAAAAAAAAAAAAAAAAAAAADqAWMAAAHAAAABMAAAAc0AAAFAAAABMAAAAaUAAAEwAAABwAAAAT0AAAHAAAABwAAAAYQAAAGEAAABMAAAAcAAAAGlAAABpQAAAUAAAAFAAAABwAAAAcAAAAGEAAABtgAAASEAAAEhAAAB6AAAAWMAAAHXAAAB1wAAAVIAAAFAAAABAAAAAcAAAAHAAAABwAAAAfoAAAH6AAABwAAAAcAAAAH5AAAB+QAAAXAAAAGEAAABHAAAAYQAAAEQAAAB+QAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAEwAAABPAAAAaUAAAEhAAABpQAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcwAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAH5AAAB+QAAAfkAAAHAAAABCwAAAcAAAAEwAAABwAAAATAAAAHAAAABMAAAAcAAAAE9AAABwAAAAcAAAAHNAAABwAAAAcAAAAEwAAABMAAAATAAAAE9AAABPQAAATAAAAEwAAABkAAAATAAAAEwAAABMAAAATAAAAE9AAABMAAAAfkAAAH5AAAB+QAAAcAAAAHNAAAAAAAAAAhmYgAAAAAAAgAAAAamZQAG444AB9KAAAfbAgAIJ9IACFVWAAh9JgAI23IACOOOAAmVVQAJxx0AChgrAApEOwALHHIAAAAA//zfSP/+E+X//mC1//62Cv//HHL//844AABRDgAAfR4AAVVTAAFVVQABha0AAjjjAAOOOgAAAAAAAAAAAAhmYgAAAAAAAAAAAAbjjgAQzMMACGZi","cmtex8":"AMAAEgAAAH8AAgAQAA4AAQAAAAAAAAAH30PKcwCAAAASVGVYIGV4dGVuZGVkIEFTQ0lJAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNVEVYAAAAAAAAAAAAAAAAAAAAAADuAWMAAAHAAAABMAAAAc0AAAFAAAABMAAAAaUAAAEwAAABwAAAAT0AAAHAAAABwAAAAYQAAAGEAAABMAAAAcAAAAGlAAABpQAAAUAAAAFAAAABwAAAAcAAAAGEAAABtgAAASEAAAEhAAAB6AAAAWMAAAHXAAAB1wAAAVIAAAFAAAABAAAAAcAAAAHAAAABwAAAAfoAAAH6AAABwAAAAcAAAAH5AAAB+QAAAXAAAAGEAAABHAAAAYQAAAEQAAAB+QAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAEwAAABPAAAAaUAAAEhAAABpQAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcwAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAH5AAAB+QAAAfkAAAHAAAABCwAAAcAAAAEwAAABwAAAATAAAAHAAAABMAAAAcAAAAE9AAABwAAAAcAAAAHNAAABwAAAAcAAAAEwAAABMAAAATAAAAE9AAABPQAAATAAAAEwAAABkAAAATAAAAEwAAABMAAAATAAAAE9AAABMAAAAfkAAAH5AAAB+QAAAcAAAAHNAAAAAAAAAAiACAAAAAAAAiceAAa0ngAG444AB9J+AAfpOgAIMcoACFVWAAiIJAAI23AACPHIAAmjjgAJxxwACiZkAApSdAALHHIAAAAA//ztgv/+Ih7//mqu//7BCP//Kqz//9xyAABfSAAAi1gAAVVUAAFVVgABk+QAAjjkAAOOOAAAAAAAAAAAAAiACAAAAAAAAAAAAAbjjgARABAACIAI","cmtex9":"AL8AEgAAAH8AAgAQAA0AAQAAAAAAAAAH36ROAACQAAASVGVYIGV4dGVuZGVkIEFTQ0lJAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNVEVYAAAAAAAAAAAAAAAAAAAAAADsAWMAAAHAAAABMAAAAcwAAAFAAAABMAAAAaUAAAEwAAABwAAAATwAAAHAAAABwAAAAYQAAAGEAAABMAAAAcAAAAGlAAABpQAAAUAAAAFAAAABwAAAAcAAAAGEAAABtgAAASEAAAEhAAAB6AAAAWMAAAHXAAAB1wAAAVIAAAFAAAABAAAAAcAAAAHAAAABwAAAAfkAAAH5AAABwAAAAcAAAAH5AAAB+QAAAXAAAAGEAAABGwAAAYQAAAEQAAAB+QAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAEwAAABOwAAAaUAAAEhAAABpQAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcsAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAH5AAAB+QAAAfkAAAHAAAABCgAAAcAAAAEwAAABwAAAATAAAAHAAAABMAAAAcAAAAE8AAABwAAAAcAAAAHMAAABwAAAAcAAAAEwAAABMAAAATAAAAE8AAABPAAAATAAAAEwAAABkAAAATAAAAEwAAABMAAAATAAAAE8AAABMAAAAfkAAAH5AAAB+QAAAcAAAAHMAAAAAAAAAAhmYAAAAAAAAgl8AAav4gAG444AB9KAAAfkgAAIJ9AACFVVAAh9JQAI23AACO0LAAme0gAJxxwACiGpAApNvAALHHIAAAAA//zoxf/+HWT//mC0//62Cf//Je7//9e1AABajAAAhqAAAVVVAAGPKwACOOQAA445AAAAAAAAAAAACGZgAAAAAAAAAAAABuOOABDMwAAIZmA=","cmti10":"AXIAEgAAAH8AKQAQAAoAOgBNAAkAAAAH/QAnOgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADqEsCoACDAAAAcwFQAFsAAABTAxAAawNAAGMCUABzAhAAYwBwAHMCEABjAaAAR2OUID9hsABDYbAAi2GwAJNhsAAIwOAADOAwAC9AAAAvQYAALgEAAC9CAAAtgbAAh0AAACAYAAA7YdAAYMDAAGDAwAAtVTAAjwJQAJsCUABziVAABMAEPAtClFwzQLAAg1yQAHtAAACDzsAAc0GAAAtClEgb5zAAG+QgAC/DAABxkCAACGAAABDAFFQIQAAAL+cwAC5CsAAuQrAALkKwAC5CsAAuYrAALkKwAC5CsAAuYrAALkKwAC5CsAAIwGAACOBgAAkg0ABwhJAALSAAAC9CdGBzQXAAawAEwF8BoABjAvAAbwFUrFcCUABPAqRofwEQAGsDQAAXAyAANwLQAHcC9IBLAAUElwNAAGsDQABzAVSsVwGkqHMhUABnAETAPwJAAGMCpJBrA0AAawNkaJ8DZKhrAySAawOElEcC8AAL53AAM0NQAAvl4AAvQKAACsIwAAtClEQswOAAI0CFFCDAVRQvQbRkIMDFFAtjlAAg4SAAL0DgAAqBkAAKouAAI0HwAAdBtGSAwOAAPMDlMCzAhRQs4IUUIOEgABzB9RQYwPAADcFgADjA4AAgwfAAUMH0ZCTCYAAo4SAAGMKAACzBRFigwUAAL0JwAC7CIAAuwcAAAAAAAAAQWwAAE6BoABVDGAAW5cwAGKzoABorNAAa/IwAHXCYAB2wVAAfE0wAILYAACDsoAAhmYwAIli0ACP7aAAlnhgAJ0DMACgkWAApxwwAKoY0ACtpwAAsTUwALQx0AC3LmAAurygAL5K0ADBR2AAxEQAAMTVoADE41AAxgsgANFZoADUz4AA4bSgAOH9YADk+gAA5YugAPwooAD/ttABBbAAAAAAAAAbBbAAXeuAAG444ACAAAAAhxyAAI/JUACddeAAoOOgAKT6UACnxaAAqvjQAK7u4ACxxyAAu2CwAMAAAAAAAA//3euAAAxx0AAOOOAADoGgABjjoAArjjAAMccAADHHIABAAAAAAAAAAAc8UAAJdTAACZCAAAnnAAAOeKAADuXgAA9TIAAQKOAAEPAgABEDgAAR0iAAEzxQABNXsAATo4AAFQNgABU8YAAWVDAAFqYgABeJsAAXkoAAGBIwABhI0AAYkaAAGNFgABoV4AAaQgAAGnQgABrQgAAa6lAAGvOAABuOMAAbqaAAHHHQAB2ooAAeFeAAHqYgAB7KgAAe06AAH1wwAB93gAAfyYAAIg/gACKz0AAi6mAAI+lQACUJUAAlMOAAJi/QACcnUAAodlAAKXUwACn0sAArItAALwEgADAAAAAxnwAANkIABpAAwAZgALAGwADQAngAAAP4AAACGAAAApgACAXYAAAGkADgBsAA8AJ4AAAD+AAAAhgAAAKYAAgF2AAABsgAGATIACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD6AbIAEAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABwBDgAcAR4AHgFGABwB5gAUAZYAFAG+ABQBygAUAYYAFAHWABYBBgAUAWIAHAFeABwBBgAcAVoAHgFmABwBugAcAbIAHAHKABwB1gAcAbYAHAHSABwBpgAcAQ4AHAE+ABwBHgAcAaIAHAGKABwBVgAcAa4AHAHaABwB3gAcAUYAHAFSABQBZgAUAVoAGAFeABgBlgAgAYYAIAG+ACABkgAgAY4AIAGeACIBxgAiAJ4AGAAGrPf/76UD/+t8DAAGiswAA0Vr//sX6//5dTf//l1P//y6mAAQAAAAFuXMAAnQNAAGiswAG444AEFsAAAGisw==","cmti12":"AXMAEgAAAH8AKQAQAAoAOwBNAAkAAAAHm7uIQADAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADmEsCsACDAAAAcwFQAFsAAABTAyAAawMwAGMCgABzAiAAYwBwAHMCIABjAbAAR2OkID9h0ABDYdAAi2HQAJNh0AAIwOAADOAwAC9AAAAvQYAALkEAAC9CEAAtwcAAh0AAACQYAAA3YfAAYMDQAGDA0AAtVUAAjwKAAJsCgABziVAABMAEPAtClFwvQKAAg1yQAHtAAACD0uAAc0GAAAtClEgb51AAG+QgAC/DEABxjCAACGAAABDAFFQIQAAAL+dQAC6C0AAugtAALoLQAC6C0AAuotAALoLQAC6C0AAuotAALoLQAC6C0AAIwFAACOBQAAkgwABwhJAALSAAAC9CpGBzQXAAawAEwF8BsABjAwAAbwFUrFcCgABPArRofwEgAGsDMAAXA0AAMwLAAHcDBIBLAAUElwMwAGsDMABzAVSsVwG0qHMhUABnAETAOwJgAGMCtJBrAzAAawN0aJ8DdKhrA0SAawOUlEcDAAAL54AAL0NgAAvl4AAvQLAACsIwAAtClEQswOAAJ0CFFCTAZRQvQdRkJMDVFAtjpAAk4RAAL0DgAAqBkAAKovAAJ0IAAAdB1GSAwOAAOMDlMCzAhRQs4IUUJOEQACDCBRQcwPAADgFgADTA4AAkwgAAUMIEZCTCUAAo4RAAGMJwACzBNFigwTAAL0KgAC7CQAAuwaAAAAAAAAAQAAwAEzNAABTM3AAWZnQAGB5sABmZrAAZmbAAGmZ8ABzM4AAeZnwAIAAUACDcEAAhmbAAIzNMACMzUAAkzOwAJmaAACdCfAAo3BQAKZm0ACp1sAArUawALA9MACzM7AAtqOQALoTgAC9CgAAwACAAMB58ADBVcAAwbiAAMzNUADQmEAA3M2AAN0KEADgALAA4HoAAPajwAD6E7ABAACwAAAAAAAY45AAXGQQAG448ACAAAAAhxyAAIzNAACQWwAAnXXwAKDjkACl9cAAqefAAK7u8ACxxxAAu2CwAMAAAAAAAA//3GQQAAxxwAAMzQAADjjwABjjkAArjjAAMccAADHHEABAAAAAAAAAAAdgwAAJmZAACajAAApmUAAOZnAADsFwAA93gAAPrIAAELKQABDaUAARJ8AAEtgwABMkAAATJBAAFSfQABVgsAAWdZAAFtCAABduMAAXfxAAGDaQABhbAAAYtgAAGT6AABmd8AAaHtAAGmZwABp9EAAajEAAGxfQABszEAAbjkAAG8NAAByWQAAdUhAAHa0QAB7BgAAe7vAAHxyAAB8rkAAfSfAAH6TwACJewAAiqpAAItgwACMzMAAko7AAJVVQACZmUAAnQNAAKEvAACiIgAApmZAAKyoQAC7vAAAwAAAAMX5QADYLcAaQAMAGYACwBsAA0AJ4AAAD+AAAAhgAAAKYAAgF2AAABpAA4AbAAPACeAAAA/gAAAIYAAACmAAIBdgAAAbIABgEyAAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+gGyABABvgAUAZYAFAHWABQBygAUAYYAFAEGABgBPgAcAQ4AHAEeAB4BRgAcAeYAFAGWABQBvgAUAcoAFAGGABQB1gAWAQYAFAFiABwBXgAcAQYAHAFaAB4BZgAcAboAHAGyABwBygAcAdYAHAG2ABwB0gAcAaYAHAEOABwBPgAcAR4AHAGiABwBigAcAVYAHAGuABwB2gAcAd4AHAFGABwBUgAUAWYAFAFaABgBXgAYAZYAIAGGACABvgAgAZIAIAGOACABngAiAcYAIgCeABgABp9T/+//9//r8MQABmZsAAMzN//7MzP/+ZmX//5mZ//8zMwAEAAAABZmdAAJmaAABmZsABuOPABAACwABmZs=","cmti7":"AXUAEgAAAH8ALQAQAAkAOgBNAAkAAAAHdH1cygBwAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADwFcCoACXAAAAiwFgAGsAAABjAyAAewMQAHMCUACLAhAAcwCAAIsCEABzAeAAW1+UIEtdgABPXYAAo12AAKddgAAIwTAAENwwADdAAAA3QRAANkDgADdCAAA1gfAAk0AAACgYAABDXdAAcMDQAHDA0AA1UUAAmwJQAKsCUACLiWAABMAEPAtCZFw3QGAAl1zAAH9AAACXzsAAi0EQAAtCZEgf40AAH+BAADfDAACJ1EAACFwAABTAFFQIQAAAN+NAADaC0AA2gtAANoLQADaC0AA2ntAANoLQADaC0AA2ntAANoLQADaC0AAIwFAACNxQAAkcsACIhMAANRwAADdCdGCLQXAAewAEwG8B4ABzAuAAgwFkrGcCUABfAqRojwDwAHsDEAAbAzAAOwKQAIcC5IBXAAUEnwMQAHsDEACLAWSsZwHkqIsdYAB3ACTARwJQAHMCpJB7AxAAewNkaK8DZKh7AzSAewOElFMC4AAL43AAN0NQAAvhsAA3QJAACwIwAAtCZEQ0wTAAK0ClFCjAdRQ3QYRkKMDVFA9flAAo3SAAN0EwAArBUAAK3vAAK0IgAAdBhGSUwTAARME1MDTApRQ03KUUKN0gACTCJRQcwQAAEgGQADzBMAAowiAAYMIkZCzCgAAw3SAAIMKwADTBxFiwwcAAN0JwADcCQAA3AaAAAAAAAAATz0gAF5GIABeRlAAZcqwAG1PIAB0a7AAfFggAHxYUACAGnAAi2EgAIthUACS5bAAmmogAJ34cACh7rAAoe7gAKlzIACtg5AAtQgAALh8IAC8CnAAvIxwAMOPAADHhSAAyxNwAM6hsADSmAAA1o4gANoccADdqrAA4VYAAOGhAADlL1AA5ZcgAOdeUAD0L3AA9KAgAQc3cAEKxbABD4vgARNOIAElSXABKNewATTUUAAAAAAAHXXgAGJTAABuOOAAgAAAAIcccACSsQAAmjYAAJ114ACg45AApPpQAKggkACtj+AAsccgALtg4ADAAAAAAAAP/+JTAAAMceAADjjgABjjkAAaNgAAK45QADHHIABAAAAAAAAAAAZCkAAGfSAABuHgAAh7cAAMN1AADELgAAyFUAAOWVAADwWwAA8ssAAQqQAAERAgABKqsAATPpAAE2cAABQJsAAV5FAAFergABYJcAAWTHAAFqDgABcYcAAXl+AAF8VwABfMAAAX8wAAGCWQABiMUAAY9wAAGUhQABllkAAZcpAAG3ggABuOUAAbtVAAHANQAByysAAdGuAAHWjgAB9QkAAfy7AAIHUAACDjsAAg9wAAIboAACQ3IAAkZLAAJLlQACXkIAAmeJAAJ/lwACh7cAAq8QAAL34AADAAAAAyf7AAN7iQBpAAwAZgALAGwADQAngAAAP4AAACGAAAApgACAXYAAAGkADgBsAA8AJ4AAAD+AAAAhgAAAKYAAgF2AAABsgAGATIACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD6AbIAEAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABwBDgAcAR4AHgFGABwB5gAUAZYAFAG+ABQBygAUAYYAFAHWABYBBgAUAWIAHAFeABwBBgAcAVoAHgFmABwBugAcAbIAHAHKABwB1gAcAbYAHAHSABwBpgAcAQ4AHAE+ABwBHgAcAaIAHAGKABwBVgAcAa4AHAHaABwB3gAcAUYAHAFSABQBZgAUAVoAGAFeABgBlgAgAYYAIAG+ACABkgAgAY4AIAGeACIBxgAiAJ4AGAAHCpf/7DC7/+eK5AAHhIAAA8JD//pcn//4e4P//h7f//w9wAAQAAAAG1PIAAtGwAAHhIAAG444AE01FAAHhIA==","cmti8":"AXgAEgAAAH8ALgAQAAoAOwBNAAkAAAAHI9FmkACAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADuF8CsACXAAAAiwFQAG8AAABnAyAAfwMwAHcCUACLAiAAdwBwAIsCIAB3AdAAW2OkIE9hoABTYaAAn2GgAKdhoAAIwRAAEOAwADdAAAA3QUAANgDwADdCAAA1gfAAm0AAACgYAABHYeAAdMDQAHTA0AA1VTAAowJQAK8CUACLiVAABMAEPAtChFw7QIAAl1ywAIdAAACXztAAi0FAAAtChEgf51AAH+RAADfDEACJkEAACGAAABTAFFQIQAAAN+dQADZC4AA2QuAANkLgADZC4AA2YuAANkLgADZC4AA2YuAANkLgADZC4AAIwGAACOBgAAkgwACIhLAANSAAADdCdGCLQYAAfwAEwHMB0AB3AvAAgwFUrGsCUABjArRokwEAAH8DMAAbA0AAPwLAAI8C9IBfAAUEqwMwAH8DMACLAVSsawHUqIshUAB7ACTASwJgAHcCtJB/AzAAfwN0aLMDdKh/A0SAfwOUlFcC8AAL54AAO0NgAAvlwAA3QKAACsJAAAtChEQ0wRAAK0CVFCjAVRQ3QaRkKMDVFA9jpAAo4SAAN0EQAAqBkAAKowAAK0IQAAdBpGSUwRAASMEVMDTAlRQ04JUUKOEgACTCFRQcwOAAEcFgAEDBEAAowhAAZMIUZCzCkAAw4SAAIMKgADTBdFi0wXAAN0JwADbCMAA2wbAAAAAAAAARjkAAFREYABURIAAW0ogAGJPwABpmcAAcFsgAHBbQABz3gAAfmaAAH6q4ACFbEAAjHHgAIzM4ACQFuAAk3egAJN3wACafUAAmn2gAKGDQACoiKAAqIjgAKwtoACzM2AAtpQAALo5AAC93gAAwT7AAMSfYADIRGAAy+lgAM9KIADQ46AA0qrAANLvIADUfUAA4LYgAOJuIADyRMAA8maAAPXHoAD2C4ABDn1AARIiQAEY48AAAAAAABxxwABgw8AAbjjgAIAAAACHHIAAk2CgAJ114ACg46AApPpgAKggoACrrsAAru7gALHHIAC7YKAAwAAAAAAAD//gw8AADHHAAA444AAUREAAGOOgACuOQAAxxwAAMccgAEAAAAAAAAAABsFgAAg44AAIWyAACPpAAA2C4AANsGAADtggAA9OgAAPsGAAEE/AABErQAASIiAAEzNAABSIgAAUiKAAFNggABUYwAAWZoAAF0oAABdgoAAXl0AAGAtgABgNgAAYFqAAGJwgABk+oAAZiwAAGavgABnHAAAZ9KAAGhbAABru4AAbjkAAG/bgABzgYAAdDeAAHbBAAB2wYAAeZmAAHpPgAB8RIAAgceAAITMgACFsAAAh9KAAIjjgACS2AAAk4GAAJXeAACbRYAAnbAAAKDjgACj6QAArCkAALz6gADAAAAAyDaAANvpABpAAwAZgALAGwADQAngAAAP4AAACGAAAApgACAXYAAAGkADgBsAA8AJ4AAAD+AAAAhgAAAKYAAgF2AAABsgAGATIACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD6AbIAEAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABwBDgAcAR4AHgFGABwB5gAUAZYAFAG+ABQBygAUAYYAFAHWABYBBgAUAWIAHAFeABwBBgAcAVoAHgFmABwBugAcAbIAHAHKABwB1gAcAbYAHAHSABwBpgAcAQ4AHAE+ABwBHgAcAaIAHAGKABwBVgAcAa4AHAHaABwB3gAcAUYAHAFSABQBZgAUAVoAGAFeABgBlgAgAYYAIAG+ACABkgAgAY4AIAGeACIBxgAiAJ4AGAAG2wv/7nHD/+oFqAAHBbAAA4Lb//q7u//4+lP//j6T//x9KAAQAAAAGJPwAAqIiAAHBbAAG444AEY48AAHBbA==","cmti9":"AXEAEgAAAH8AKQAQAAkAOgBNAAkAAAAHvGqRuQCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADsEsCoACDAAAAdwFQAFsAAABTAxAAawMwAGMCUAB3AiAAYwBwAHcCIABjAaAAR1+UID9dsABDXbAAi12wAJNdsAAIwOAADNxAAC9AAAAvQXAALgEAAC9CAAAtgcAAh0AAACAYAAA7XfAAYMDQAGDA0AAtVTAAjwJQAJsCUAB3iVAABMAEPAtChFwzQKAAg1ywAHNAAACDzsAAd0FwAAtChEgb40AAG+AgAC/DAAB1kCAACFwAABDAFFQIQAAAL+NAAC5CsAAuQrAALkKwAC5CsAAuXrAALkKwAC5CsAAuXrAALkKwAC5CsAAIwGAACNxgAAkcwAB0hLAALRwAAC9CdGB3QYAAawAEwF8BoABjAuAAbwFUrFcCUABPAqRofwEQAGsDMAAXAyAANwLQAHsC5IBLAAUElwMwAGsDMAB3AVSsVwGkqHcdUABnADTAPwJQAGMCpJBrAzAAawNkaJ8DZKhrAySAawOElEcC4AAL43AAM0NQAAvh4AAvQJAACsJAAAtChEQswOAAI0CFFCDAVRQvQbRkIMDVFAtflAAg3SAAL0DgAAqBkAAKnvAAI0IQAAdBtGSAwOAAPMDlMCzAhRQs3IUUIN0gABzCFRQYwPAADcFgADjA4AAgwhAAUMIUZCTCYAAo3SAAGMKQACzBRFigwUAAL0JwAC7CMAAuwdAAAAAAAAAQylQAFCYAABXT1AAXgawAGVLkABrdVAAbtEAAHjkAAB5SSAAf5tQAIZSsACHHOAAifUgAI0KAACTwVAAmniwAKEwAACk0nAAq4nAAK6esACyQSAAteOQALj4cAC8DVAAv6/AAMNSQADGZyAAyTywAMl8AADKCZAAy01AANbqsADZ1wAA57UAAOf7wADrELAA655AAQLZIAEGe5ABDKVQAAAAAAAbp5AAX06QAG444ACAAAAAhxxwAJEvcACddeAAoOOQAKT6UACnu3AAq0mwAK7u4ACxxyAAu2CwAMAAAAAAAA//306QAAxxwAAOOOAAEJgAABjjkAArjkAAMccgAEAAAAAAAAAABw/AAAlIsAAJSyAACWHgAA4fkAAOhLAADyaQABAg4AAQ1uAAEQbAABEcUAAS9nAAE1aQABQ/UAAU1uAAFQ/AABXEkAAW0JAAF4GQABe/AAAX5bAAGDKQABhLwAAYZSAAGVcgABoVcAAaRXAAGl7AABptQAAaikAAGpFQABt04AAbjkAAHEVQAB1jwAAdyOAAHk0gAB7p4AAfAyAAH2hAAB/mwAAhqMAAIodAACKRUAAi3UAAJQRwACUxQAAl7QAAJwhAAChgIAAo45AAKUiwACsZ4AAvF3AAMAAAADHHQAA2hMAGkADABmAAsAbAANACeAAAA/gAAAIYAAACmAAIBdgAAAaQAOAGwADwAngAAAP4AAACGAAAApgACAXYAAAGyAAYBMgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPoBsgAQAb4AFAGWABQB1gAUAcoAFAGGABQBBgAYAT4AHAEOABwBHgAeAUYAHAHmABQBlgAUAb4AFAHKABQBhgAUAdYAFgEGABQBYgAcAV4AHAEGABwBWgAeAWYAHAG6ABwBsgAcAcoAHAHWABwBtgAcAdIAHAGmABwBDgAcAT4AHAEeABwBogAcAYoAHAFWABwBrgAcAdoAHAHeABwBRgAcAVIAFAFmABQBWgAYAV4AGAGWACABhgAgAb4AIAGSACABjgAgAZ4AIgHGACIAngAYAAa9p//vNa//6vFkAAa3VAADW6//+vaD//lIr//+Ui///KRUABAAAAAXgawAChMAAAa3VAAbjjgAQylUAAa3V","cmtt10":"AMAAEgAAAH8AAgAQAAwAAQACAAAAAAAH3+o8eACgAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVFQAAAAAAAAAAAAAAAAAAAAAAADqAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABOwAAATsAAAFQAAABWwAAAdAAAAHQAAABwAAAAdAAAAGwAAAB0AAAAQoAAAHQAAABUAAAAVAAAAGIAAAB0AAAAdAAAAHkAAABKAAAAdABAAHQAAAB0AAAAfYAAAH2AAAB0AAAAdAAAAH1AAAB9QAAAWAAAAFyAAABGQAAAXIAAAEQAAAB9QAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWQAAAaMAAAFBAAABowAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdkAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH1AAAB9QAAAfUAAAHQAAABBwAAAdAAAAFQAAAB0AAAAVAAAAHQAAABUAAAAdAAAAFbAAAB0AAAAdAAAAHbAAAB0AAAAdAAAAFQAAABUAAAAVAAAAFbAAABWwAAAVAAAAFQAAABkAAAAVAAAAFQAAABUAAAAVAAAAFbAAABUAAAAfUAAAH1AAAB9QAAAdAAAAHQAAAAAAAAAAhmYgAAAAAAAgAAAAOC2AAGOOMABqZlAAbjjgAIVVYACH0mAAiqqwAI23IACOOOAAkMgwAJDjoACccdAAqqqwALHHIAAAAA//zfSP/+tgr//xxyAADjjgABVVMAAVVVAAGFrQABxx0AAjjjAAMccwADjjoAAAAAgGAADoBgAA8AAAAAAAhmYgAAAAAAAAAAAAbjjgAQzMMACGZi","cmtt12":"AMEAEgAAAH8AAgAQAA0AAQACAAAAAAAH34a1VADAAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVFQAAAAAAAAAAAAAAAAAAAAAAADmAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB1AAAAdQAAAHQAAABPAAAATwAAAFQAAABXAAAAdAAAAHQAAABwAAAAdAAAAGwAAAB0AAAAQsAAAHQAAABUAAAAVAAAAGJAAAB0AAAAdAAAAHlAAABKQAAAdABAAHQAAAB1AAAAfcAAAH3AAAB0AAAAdAAAAH2AAAB9gAAAWAAAAFyAAABGgAAAXIAAAEQAAAB9gAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWgAAAZMAAAFBAAABkwAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdoAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH2AAAB9gAAAfYAAAHQAAABCAAAAdAAAAFQAAAB0AAAAVAAAAHQAAABUAAAAdAAAAFcAAAB0AAAAdAAAAHcAAAB0AAAAdAAAAFQAAABUAAAAVAAAAFcAAABXAAAAVAAAAFQAAABoAAAAVAAAAFQAAABUAAAAVAAAAFcAAABUAAAAfYAAAH2AAAB9gAAAdAAAAHQAAAAAAAAAAg7vAAAAAAAAc44AAOEvQAGOOMABpzpAAbjjwAIVVcACGrgAAiqrAAI2hQACNtxAAj+GQAJDjkACcccAAqqqwALHHEAAAAA//zVzP/+o8P//xL3/////QAA448AAVVTAAFVVQABfDAAAccdAAI45AADHHMAA445AAAAAIBgAA6AYAAPAAAAAAAIO7wAAAAAAAAAAAAG448AEHd4AAg7vA==","cmtt8":"AMAAEgAAAH8AAgAQAAwAAQACAAAAAAAH30PKcwCAAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVFQAAAAAAAAAAAAAAAAAAAAAAADuAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABOwAAATsAAAFQAAABWwAAAdAAAAHQAAABsAAAAdAAAAHAAAAB0AAAAQoAAAHQAAABUAAAAVAAAAGIAAAB0AAAAdAAAAHkAAABKAAAAdABAAHQAAAB0AAAAfYAAAH2AAAB0AAAAdAAAAH1AAAB9QAAAWAAAAFyAAABGQAAAXIAAAEQAAAB9QAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWQAAAaMAAAFBAAABowAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdkAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH1AAAB9QAAAfUAAAHQAAABBwAAAdAAAAFQAAAB0AAAAVAAAAHQAAABUAAAAdAAAAFbAAAB0AAAAdAAAAHbAAAB0AAAAdAAAAFQAAABUAAAAVAAAAFbAAABWwAAAVAAAAFQAAABkAAAAVAAAAFQAAABUAAAAVAAAAFbAAABUAAAAfUAAAH1AAAB9QAAAdAAAAHQAAAAAAAAAAiACAAAAAAAAiceAAOAAAAGOOQABrSeAAbjjgAIVVYACIgkAAiqqgAI23AACPHIAAkOOAAJIiAACcccAAqqqgALHHIAAAAA//ztgv/+wQj//yqsAADjjgABVVQAAVVWAAGT5AABxxwAAjjkAAMccgADjjgAAAAAgGAADoBgAA8AAAAAAAiACAAAAAAAAAAAAAbjjgARABAACIAI","cmtt9":"AL8AEgAAAH8AAgAQAAsAAQACAAAAAAAH36ROAACQAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVFQAAAAAAAAAAAAAAAAAAAAAAADsAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABOgAAAToAAAFQAAABWgAAAdAAAAHQAAABsAAAAdAAAAHAAAAB0AAAAQkAAAHQAAABUAAAAVAAAAGHAAAB0AAAAdAAAAHkAAABJwAAAdABAAHQAAAB0AAAAfUAAAH1AAAB0AAAAdAAAAH1AAAB9QAAAWAAAAFyAAABGAAAAXIAAAEQAAAB9QAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWAAAAaMAAAFBAAABowAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdgAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH1AAAB9QAAAfUAAAHQAAABBgAAAdAAAAFQAAAB0AAAAVAAAAHQAAABUAAAAdAAAAFaAAAB0AAAAdAAAAHaAAAB0AAAAdAAAAFQAAABUAAAAVAAAAFaAAABWgAAAVAAAAFQAAABkAAAAVAAAAFQAAABUAAAAVAAAAFaAAABUAAAAfUAAAH1AAAB9QAAAdAAAAHQAAAAAAAAAAhmYAAAAAAAAgl8AAOBlQAGOOQABq/iAAbjjgAIVVUACH0lAAiqqwAI23AACO0LAAkOOQAJHHAACcccAAqqqwALHHIAAAAA//zoxf/+tgn//yXuAADjjgABVVUAAY8rAAHHHAACOOQAAxxyAAOOOQAAAACAYAAOgGAADwAAAAAACGZgAAAAAAAAAAAABuOOABDMwAAIZmA=","cmu10":"AT8AEgAAAH8AKQAQAAoABwBNAAkAAAAHEyBQ4gCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNVQAAAAAAAAAAAAAAAAAAAAAAAADqFMAAACHAAAAfwAAAGcAAABfAAAAdwAAAG8AAAB/AAAAbwAAAH8AAABvAAAAT2BkIEdgUABLYFAAi2BQAJNgUAAIwFAAEOAAADdAAAA3QAAANkAAADdAAAA1gAAAd0AAACgYAABDYAAAbMAAAGzAAAA1VAAAjwAAAJsAAAB/iAAABMAEPAtABFw3QAAAh1wAAFdAAACHzAAAf0AAAAtABEgf5AAAH+QAADfAAAB90AAACGAAABTABFQIQAAAN+QAADaAAAA2gAAANoAAADaAAAA2oAAANoAAADaAAAA2oAAANoAAADaAAAAIwAAACOAAAAkgAAB8hAAANSAAADdABGB/QAAAdwAEwGsAAABvAAAAewAErGMAAABbAARogwAAAHcAAAAbAAAAOwAAAH8ABIBTAAUElwAAAHcAAAB/AASsYwAEqH8gAABzAATARwAAAG8ABJB3AAAAdwAkaJ8AJKh3AASAdwA0lE8AAAAL5AAAN0AAAAvkAAA3QAAACsAAAAtABEQ0wFAAK0AFFCjABRQ3QFRkKMAFFA9gZAAo4AAAN0BQAArAUAAK4AAAK0AAAAdAVGSEwFAARMBVMDTABRQ04AUUKOAAACTABRQcwAAAEgBQADzAUAAowAAAXMAEZCzAUAAw4AAAIMAQADTARFigwEAAN0AAADbAAAA2wAAAAAAAAAARxxgAFVVUABVVWAAXHHQAGOOMABqqqAAcccgAHHHMAB1VWAAgAAAAIIiMACHHIAAjjjgAJHHIACVVWAAlVWAAJxx0ACjjjAAqqqwAK444ACxxyAAtVVgALjjoAC8cdAAwAAAAMOOUADHHIAAyqqwAM444ADRxzAA1VVgANccgADjjlAA9VVQAPVVYAD444AA+OOgARHHMAEVVWABHHHQAAAAAAAbBbAAXeuAAG444ACAAAAAhxyAAJFZ0ACVVWAAnXXgAKDjoACk+lAAqhUwAK7u4ACxxyAAu2CwAMAAAAAAAA//3euAAAxx0AAOOOAAFVVgABjjoAArjjAAMccAADHHIABAAAAAAAAAAAMzMAADjjAABmZgAAccgAAKT7AACqqwBpAAwAZgALAGwADQAngAAAP4AAACGAAAApgACAXYAAAGkADgBsAA8AJ4AAAD+AAAAhgAAAKYAAgF2AAABsgAGATIACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD6AbIAEAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABwBDgAcAR4AHgFGABwB5gAUAZYAFAG+ABQBygAUAYYAFAHWABYBBgAUAWIAHAFeABwBBgAcAVoAHgFmABwBugAcAbIAHAHKABwB1gAcAbYAHAHSABwBpgAcAQ4AHAE+ABwBHgAcAaIAHAGKABwBVgAcAa4AHAHaABwB3gAcAUYAHAFSABQBZgAUAVoAGAFeABgBlgAgAYYAIAG+ACABkgAgAY4AIAGeACIBxgAiAJ4AGAACqq//7jjr/+nHIAAHHHQAA447//qqq//444///jjj//xxyAAAAAAAGOOMAAqqrAAHHHQAG444AEccdAAHHHQ==","cmvtt10":"ATgAEgAAAH8AGgAOAAoABQBYAAoAAAAHwqDVmQCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNVlRUAAAAAAAAAAAAAAAAAAAAAADqEKAAABegAAAWoAAAEqAAABKgAAAUoAAAFKAAABagAAAUoAAAFqAAABSgAAAPoBEKDqAAAA6gAAAXoAAAF6AAAAFAAAADSQAACqAAAAqgAAAKkAAACqAAAAqAAAAUoAAABwgAAAugAAAUQAAAFkAAAApmAAAYoAAAGaAAABbDAAABQAEAAaABFwqgAAAXoAAACtUAABfVAAAWoAAAAaABEgXUAAAF1AAAClAAABayAAABFwAABEABFQEQAAAK1AAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAFAAAABRwAAASkAABYxAAAIKQAACKABGBKgAAAUoAFME6AAABSgAAAVoAE1EqAAABGgASQWoAAAFKAAAASgAVcKoAAAFaABKhCgAVIYoAAAFKAAABagATUSoAEeFqcAABSgAUwOoAAAFKABLhSgAAAUoAUkGaAFJBSgASoUoAkvEKAAAALUAAAKoAAAAtQAAAqgAAABoAAAAaABEQlAAUgOoAFCB0ABQA6gAAAHQAAAA6ARAgpJBVYOoAE6AaAAAAOpAAANoAEZAaAAABdAAToOQAE6CkABQg5JAUIMSQAABUAAAAZAAAAFcAFKDkABSw1ABRkUQAUaDUAAAA1JBR8HQAAACkANFhlADAAKoAAACqAAAAqgAAAAAAAAAASqqAAEwWsABSIgAAWZlgAGiIUABqBqAAd3cwAH7usACCqmAAhmYgAIZmMACN3YAAjd2gAJVVAACczIAApEPgAKu7YACzMtAAuqpQAMIhsADJmTAA0RCgAN//gADu7mABDMwwAAAAAAAZmaAAY44wAGpmUABuOOAAhVVgAIqqsACNtyAAkMgwAJDjoACccdAAp9JQAKqqsACxxyAAAAAP/830gAALYIAADjjgABVVMAAVVVAAHHHQACOOMAAxxzAAOOOgAAAAAAADu7AABrhQAAd3gAATBbAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/7VVj/+t3gAAEwWwAB3d3//xES//+IiP/+mZr//iIjAAB3eAAA7u4AAAAAAAWZlgACzMsAAd3dAAbjjgAQzMMAAd3d","euex10":"AMoAEgAIAH0ADgAIAA8AAwAAAAAABwANYgdhMQCgAAAYZXVsZXIgc3Vic3RpdHV0aW9ucyBvbmx5AAAAAAAAAAAAAAAAAAAACUVVRVggVjIuMgAAAAAAAAAAAAAAAADqBRgCCgUYAgsGGgIMBhoCDQcdAg4HHQIPCB4COAgeAjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApBAAAKQQAACkEAAApBAAAAAAAAAAAAAAAAAAAAAAAACkEAAApBAAADYgAAA2IAAApBAAAKYgAACmIAAAAAAAAKQQAACkEAAAZiAAAGYgAACkEAAApiAAAKYgAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQUDAAkFAwEJBQMCCQUDAwkLAAAJCwAACQQDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQHBkkBDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwYCWAsGAlkEBwZaAAAAAAAAAAAAAAAAAAAAAAAAAAANOQAADDkAAAEMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGAmEMOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzAAAGcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAIgAAACIAAAAiAAAAAAAAAABxxzAAczOAAIAAIACHHIAAlVWAAKqq0ADAACAAzjkwAOOOYAEAADABDjkgAWk+0AFxx2AAAAAAAAo9YAAY44AAGZmwAF3rgABuOOAAsccgAMAAAAAAAA//3euAADHHAABAAAAATM0AAOZnAAEAAOABHHKAASj2oAGAANABwpCgAczOAAI45SACXCqgAvXEoAAAAAAABxyAABxx04PDo+OT07PjgAOj45ADs+AAAAPjgAOz45ADo+AAAAAAAAAAAAAAAAAAAAAAAG444AEAADAAAAAAAAo9YAAccdAAKqqwADMzMACZmaAAGZmg==","euex7":"AMoAEgAIAH0ADgAIAA8AAwAAAAAABwANaxPfkQBwAAAYZXVsZXIgc3Vic3RpdHV0aW9ucyBvbmx5AAAAAAAAAAAAAAAAAAAACUVVRVggVjIuMgAAAAAAAAAAAAAAAADwBRgCCgUYAgsGGgIMBhoCDQcdAg4HHQIPCB4COAgeAjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApBAAAKQQAACkEAAApBAAAAAAAAAAAAAAAAAAAAAAAACkEAAApBAAADYgAAA2IAAApBAAAKYgAACmIAAAAAAAAKQQAACkEAAAZiAAAGYgAACkEAAApiAAAKYgAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQUDAAkFAwEJBQMCCQUDAwkLAAAJCwAACQQDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQHBkkCDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwYCWAsGAlkEBwZaAAAAAAAAAAAAAAAAAAAAAAAAAAANKQAADCkAAAIMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGAmEMKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzAAAGcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAEwAAABMAAAATAAAAAAAAAAB3Q+AAgghQAJHHUACZprAAqWXgAMEEUADYorAA6GIAAQAAUAEfflABLz1QAZQDsAGddlAAAAAAAAxvIAAZmbAAGmmQAGJTAABuOOAAsccgAMAAAAAAAA//4lMAADHHIABAAAAATM0AAOZnAAEAAOABHHKQASbE4AGAAOABwF7gAczOAAI45SACWfjgAvOS4AAAAAAAB9+QAB9+A4PDo+OT07PjgAOj45ADs+AAAAPjgAOz45ADo+AAAAAAAAAAAAAAAAAAAAAAAG444AEjjpAAAAAAAAxvIAAccbAAKqqwADMzIACccbAAJJJQ==","euex8":"AMoAEgAIAH0ADgAIAA8AAwAAAAAABwANJAX55wCAAAAYZXVsZXIgc3Vic3RpdHV0aW9ucyBvbmx5AAAAAAAAAAAAAAAAAAAACUVVRVggVjIuMgAAAAAAAAAAAAAAAADuBRgCCgUYAgsGGgIMBhoCDQcdAg4HHQIPCB4COAgeAjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApBAAAKQQAACkEAAApBAAAAAAAAAAAAAAAAAAAAAAAACkEAAApBAAADYgAAA2IAAApBAAAKYgAACmIAAAAAAAAKQQAACkEAAAZiAAAGYgAACkEAAApiAAAKYgAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQUDAAkFAwEJBQMCCQUDAwkLAAAJCwAACQQDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQHBkkCDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwYCWAsGAlkEBwZaAAAAAAAAAAAAAAAAAAAAAAAAAAANKQAADCkAAAIMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGAmEMKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzAAAGcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAEwAAABMAAAATAAAAAAAAAABzM4AAeOQAAIgAgACPjsAAnqtAALVWAADMAMAA2x1AAPHIAAEQAQABHx2AAX/T4AGI5QAAAAAAAAuFIAAZmaAAGccAAGDDwABuOOAAsccgAMAAAAAAAA//4MPAADHHAABAAAAATM0AAOZnAAEAAOABHHKAASeu4AGAAMABwUjgAczOAAI45SACWuLgAvR84AAAAAAAB45AAB45A4PDo+OT07PjgAOj45ADs+AAAAPjgAOz45ADo+AAAAAAAAAAAAAAAAAAAAAAAG444AEQAQAAAAAAAAuFIAAcccAAKqqgADMzQACbjkAAIAAA==","euex9":"AMsAEgAIAH0ADwAIAA8AAwAAAAAABwANhtgXiQCQAAAYZXVsZXIgc3Vic3RpdHV0aW9ucyBvbmx5AAAAAAAAAAAAAAAAAAAACUVVRVggVjIuMgAAAAAAAAAAAAAAAADsBRgCCgUYAgsGGgIMBhoCDQcdAg4HHQIPCB4COAgeAjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApBAAAKQQAACkEAAApBAAAAAAAAAAAAAAAAAAAAAAAACkEAAApBAAADYgAAA2IAAApBAAAKYgAACmIAAAAAAAAKQQAACkEAAAZiAAAGYgAACkEAAApiAAAKYgAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQUDAAkFAwEJBQMCCQUDAwkLAAAJCwAACQQDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQHBkkCDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwYCWAwGAlkEBwZaAAAAAAAAAAAAAAAAAAAAAAAAAAAOOQAADTkAAAIMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAmENOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzAAAGcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEgAAABIAAAASAAAAAAAAAABzM5AAdPAAAIOOAACK3QAAmXsgAK9oAADFVSAA0/MAAOngAAEHHAABFboAARW6IAFzRsABfAwAAAAAAAAKzyAAGUiQABmZsABfTpAAbjjgALHHIADAAAAAAAAP/99OkAAxxyAAQAAAAEzNAADmZwABAADgARxykAEoZOABgADAAcH+4AHMzgACOOUgAluY4AL1MuAAAAAAAAdPAAAdPAODw6Pjk9Oz44ADo+OQA7PgAAAD44ADs+OQA6PgAAAAAAAAAAAAAAAAAAAAAABuOOABBxwAAAAAAAAKzyAAHHHAACqqsAAzM0AAmt1AABxxw=","eufb10":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAW2JYM5wCgAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADqGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABAFoAAQOeAAEFQAABBuIAAU+0wAFTTIABU6AAAVjZgAFllgABjMYAAY3AwAGSpsABkvqAAZc5QAG2P0AB1eyAAdaTgAHYNYAB2tKAAdsmAAHjUAACFzyAAisoAAJTpoACWYdAAlrVgAJbKUACXCQAAl7AwAJhCgACYgTAAmk0AAJqLsACatYAAm+8AAJ2RAACm9IAAp10AAKebsAC1+iAAuMCwALkpMAC6DyAAyFigAMlTYADKD4AAyjlQANjrUADZaLAA2bxQAN8K0ADkmAAA6uFQAOvcIADtaTAA+fvQAPoloAD6T2AA+nkwAPsLgAD7SjAA+18gAPuI4AD7x6ABCzWwATwxsAE9QWAAAAAAABuoAAB5sAAAhtLgAJU0oAChGQAAsQAAAL/dgAAAAAAACa4AABAiAAAVS6AAIEQAADBmAAA/9IAAAAAAAAAAAABVVVAAAAAAAAAAAAB5sAABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eufb5":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWouDdiQBQAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAAD0GVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAAB8bwAAfVUAAH3IAAB+OwAAkkQAAJNBAACTWAAAlMgAAJhJAACjEQAAo1YAAKSvAACkxgAApfEAAK56AAC3MQAAt18AALfSAAC4igAAuKEAALrgAADJKQAAzqQAANnIAADbZgAA28IAANvZAADcHgAA3NYAAN13AADdvAAA37YAAN/7AADgKQAA4YIAAONOAADtowAA7hYAAO5bAAD+KwABATkAAQGsAAECqQABEmIAARN2AAEURQABFHMAASSfAAElKQABJYUAAStcAAExeAABOGMAATl3AAE7LAABSQIAAUkwAAFJXgABSYwAAUotAAFKcgABSokAAUq3AAFK/AABW/cAAZHfAAGTCgAAAAAAABvQAAB6YAAAh5YAAJYMYACiAgAAsgAAAMDzAAAAAAAACbwAABA5YAAVamAAIHKgADCsAABAUQAAAAAAAAAAAABVVWAAAAAAAAAAAAB6YAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eufb6":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWONiU4gBgAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADyGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABd8tAAXtCAAF8/UABfrjAAcv1QAHPxMAB0B1AAdWoAAHjKgACDLoAAg3EAAIS9gACE07AAhfPQAI4tsACWk9AAlsAwAJcvAACX4FAAl/aAAJogsACn5TAArS1QALfqAAC5eQAAudGwALnn0AC6KlAAutuwALt20AC7uVAAvaEAAL3jgAC+D9AAv1xQAMEXsADLDNAAy3uwAMu+MADa+4AA3e0wAN5cAADfT9AA7ncAAO+BAADwSIAA8HTQAQAK0AEAj9ABAOiAAQaJUAEMbLABExeAARQhgAEVxrABIxxQASNIsAEjdQABI6FQASQ8gAEkfwABJJUwASTBgAElBAABNWGAAWlVgAFqdbAAAAAAABuasAB5dVAAhpIAAJTssACgy1AAsKqwAL+BAAAAAAAACalQABAaMAAVQVAAIDSAADBOsAA/1bAAAAAAAAAAAABVVVAAAAAAAAAAAAB5dVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eufb7":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWjMZs2QBwAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADwGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABR5nAAUrtQAFMlsABTkCAAZhrgAGcFAABnGlAAaG7gAGutAAB1p1AAdecgAHcmcAB3O7AAeFBwAIA2kACIR1AAiHHgAIjcUACJhpAAiZvgAIuwAACY6HAAnfrgAKhKUACpyXAAqh6QAKoz4ACqc7AAqx4AAKuzAACr8uAArccgAK4HAACuMZAAr3DgALEakAC6qnAAuxTgALtUsADJ9wAAzMqwAM01IADOH1AA3KxQAN2rsADea1AA3pXgAO2NUADuDQAA7mIgAPPJsAD5cSAA/9ggAQDXkAECbAABDzoAAQ9kkAEPjyABD7mwARBOsAEQjpABEKPgARDOcAERDlABIMVQAVKosAFTvXAAAAAAAButsAB5ySAAhu7gAJVTcAChOlAAsSSQAMAFIAAAAAAACbAAABAlUAAVUAAAIEqwADBwAABAAbAAAAAAAAAAAABVVVAAAAAAAAAAAAB5ySABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eufb8":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWsafUNwCAAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADuGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABAxyAAQZpgAEIEAABCbaAAVNSAAFW84ABV0gAAVyQAAFpb4ABkQuAAZIJAAGW/IABl1EAAZubgAG69wAB2vuAAdukgAHdSwAB3+8AAeBDgAHohAACHP+AAjEiAAJaEAACYAEAAmFTAAJhp4ACYqUAAmVJAAJnmIACaJYAAm/ZAAJw1oACcX+AAnZzAAJ9DQACowKAAqSpAAKlpoAC376AAur3gALsngAC8D+AAyoDAAMt+QADMPGAAzGagANtBIADbv+AA3BRgAOFxgADnDgAA7WigAO5mIADv94AA/KzAAPzXAAD9AUAA/SuAAP2/YAD9/sAA/hPgAP4+IAD+fYABDhYgAT+ZIAFAq8AAAAAAABu8AAB6CAAAhzSAAJWggAChjYAAsYAAAMBoQAAAAAAACbUAABAtoAAVWwAAIFtgADCJAABAIsAAAAAAAAAAAABVVWAAAAAAAAAAAAB6CAABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eufb9":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWTTF9WgCQAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADsGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABADcAAQN6wAEFHIABBr5AAU+HAAFTHkABU3HAAViqwAFlZUABjJAAAY2KwAGScAABksOAAZcBwAG2A4AB1ayAAdZTgAHX9UAB2pHAAdrlQAHjDkACFvOAAircgAJTVUACWTVAAlqDgAJa1wACW9HAAl5uQAJgtwACYbHAAmjgAAJp2sACaoHAAm9nAAJ17kACm3cAAp0ZAAKeE4AC14VAAuKeQALkQAAC59cAAyD1QAMk4AADJ9AAAyh3AANjNwADZSyAA2Z6wAN7scADkeOAA6sFQAOu8AADtSOAA+dnAAPoDkAD6LVAA+lcgAPrpUAD7KAAA+zzgAPtmsAD7pVABCxFQATwGsAE9FkAAAAAAABuasAB5dVAAhpIAAJTssACgy1AAsKqwAL+BAAAAAAAACalQABAaQAAVQVAAIDRwADBOsAA/1bAAAAAAAAAAAABVVVAAAAAAAAAAAAB5dVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","eufm10":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWjyVusgCgAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADqGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAANkaAADb3gAA3UAAARxOgAEdsIABHj4AAR+gAAEu1gABThaAAVEhQAFVAIABVUdAAVYbgAFzJYABgzAAAY35QAGOhsABjs2AAY/owAGaJIABxUlAAfSUAAH02sAB/W2AAf5CAAH+iMAB/s+AAf+kAAIAeIACAL9AAgHagAIDg0ACA8oAAgwWAAINeAACEZ4AAhXEAAIbTAACNZIAAjfIgAJodUACcdyAAnM+gAKVQsACpq9AAqoAwAKsfgACrQuAAt7TgALgfIAC4ZeAAvORgAMGYAADESlAAxgTQAMkPoADTtWAA09jQANP8MADUH6AA1NCgANTiUADVBbAA1TrQAOJMIAELyCABDK4wAAAAAAAbqAAAXmCAAHmwAACGIgAAlTSgAJ8GAACxAAAAv92AAAAAD//ed4AACa4AABAiAAAVS6AAIEQAADBmAAA/9IAAAAAAAAAAAABVVVAAAAAAAAAAAAB5sAABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eufm5":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWuMmv1ABQAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAAD0GGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAAcrIAAHOGAABz8AAAhtGgAIc7oACHZgAAh9AAAIxeAACVuaAAlqLQAJfLoACX4NAAmCBgAKDSYACloAAAqNrQAKkFMACpGmAAqW8wAKx/oAC5atAAx5QAAMepMADKOmAAynoAAMqPMADKpGAAyuQAAMsjoADLONAAy42gAMwM0ADMIgAAzp4AAM8IAADQRgAA0YQAANMsAADbCgAA27OgAOpG0ADtF6AA7YGgAPexMAD86NAA/ecwAP6mAAD+0GABDbhgAQ43oAEOjGABE+5gARmQAAEcytABHtzQASKBoAEvQmABL2zQAS+XMAEvwaABMJWgATCq0AEw1TABMRTQAUC7oAFya6ABc38wAAAAAAAb0AAAXukAAHpgAACG5AAAlgxgAJ/sAACyAAAAwPMAAAAAD//eRwAACbwAABA5YAAVamAAIHKgADCsAABAUQAAAAAAAAAAAABVVWAAAAAAAAAAAAB6YAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eufm6":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWZRZ7xABgAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADyGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAAVXjQAFZCgABWp1AAaJ1QAGkCMABpKoAAaY9QAG3kgAB2y1AAd6kwAHjDgAB417AAeRQwAIFZsACF61AAiP3QAIkmMACJOlAAiYsAAIx1MACYvzAApjewAKZL0ACovQAAqPmAAKkNsACpIdAAqV5QAKma0ACprwAAqf+wAKp4sACqjNAArOnQAK1OsACufTAAr6uwALE/AAC4utAAuVwwAMc5gADJ5zAAykwAANP8gADY8wAA2eUAANqagADawtAA6PDQAOlp0ADpuoAA7tlQAPQ0sAD3RzAA+T9QAPy2sAEI2FABCQCwAQkpAAEJUVABChsAAQovMAEKV4ABCpQAARl3gAFIu4ABScGwAAAAAAAbmrAAXjMAAHl1UACF4VAAlOywAJ65UACwqrAAv4EAAAAAD//eh7AACalQABAaMAAVQVAAIDSAADBOsAA/1bAAAAAAAAAAAABVVVAAAAAAAAAAAAB5dVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eufm7":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWWO0mAgBwAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADwGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAASaewAEpnIABKxuAAW9NwAFwzIABcWXAAXLkgAGDWAABpSSAAahuwAGsnsABrOuAAa3RQAHNOUAB3pJAAeo8gAHq1cAB6yJAAexUgAH3ZcACJg7AAlk0gAJZgUACYsbAAmOsgAJj+UACZEXAAmUrgAJmEUACZl3AAmeQAAJpW4ACaagAAnKhQAJ0IAACeJyAAn0ZQAKDFIACn37AAqHjgALWiAAC4LOAAuIyQAMG/IADGdSAAx1rgAMgHIADILXAA1aMgANYWAADWYpAA2z7gAOBUkADjPyAA5R2wAOhoAADz7AAA9BJQAPQ4kAD0XuAA9R5QAPUxcAD1V7AA9ZEgAQOzIAEwkOABMYmwAAAAAAAbrbAAXnQAAHnJIACGPbAAlVNwAJ8m4ACxJJAAwAUgAAAAD//ecJAACbAAABAlUAAVUAAAIEqwADBwAABAAbAAAAAAAAAAAABVVVAAAAAAAAAAAAB5ySABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eufm8":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWXJeCJQCAAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADuGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAAOFhgADkQIAA5bAAAScmAAEolYABKSiAASqYAAE6YoABWtQAAV38gAFiAYABYksAAWMngAGBTQABkfQAAZ0mgAGduYABngMAAZ8pAAGpyIAB1pKAAgerAAIH9IACENsAAhG3gAISAQACEkqAAhMnAAIUA4ACFE0AAhVzAAIXLAACF3WAAiASgAIhggACJdCAAiofAAIv3QACSyOAAk1vgAJ/94ACibqAAosqAAKueoACwJEAAsQDAALGmIACxyuAAvrZgAL8koAC/biAAxBiAAMj6AADLxqAAzZIAANC6gADbyEAA2+0AANwRwADcNoAA3O5AAN0AoADdJWAA3VyAAOrtYAEV/mABFu1AAAAAAAAbvAAAXqTAAHoIAACGgwAAlaCAAJ95AACxgAAAwGhAAAAAD//eX0AACbUAABAtoAAVWwAAIFtgADCJAABAIsAAAAAAAAAAAABVVWAAAAAAAAAAAAB6CAABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eufm9":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAW+DPzrwCQAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADsGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAAN4lAADg+UAA4mOAASLpAAEkUwABJOQAASZOQAE13sABVdkAAVj1wAFc7AABXTSAAV4NwAF7xIABjC5AAZc3gAGXyIABmBEAAZkywAGjqwABz9CAAgA0gAIAfQACCULAAgocAAIKZIACCq0AAguGQAIMX4ACDKgAAg3JwAIPfIACD8UAAhhCQAIZrIACHesAAiIpwAIn0sACQrUAAkT4gAJ2xsACgGXAAoHQAAKknsACtnLAArnYAAK8ZAACvPUAAu/lAALxl4AC8rlAAwUeQAMYXIADI2XAAyp5AAM27IADYoEAA2MRwANjosADZDOAA2cIAANnUIADZ+FAA2i6wAOeNsAESAFABEuvAAAAAAAAbmrAAXjMAAHl1UACF4VAAlOywAJ65UACwqrAAv4EAAAAAD//eh7AACalQABAaQAAVQVAAIDRwADBOsAA/1bAAAAAAAAAAAABVVVAAAAAAAAAAAAB5dVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","eurb10":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWkWV3yACgAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADqEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAE5OAABapQAAXHkAAFzuAABd/wAAXmCAAGkeAABuTAAAb/kAAHUnAAB2EQAAfzUAAH+qAACGEAAAhoUAAIgyAACJS6AAixSwAItlAACL2gAAjJ0AAIzrAACNhwAAlLAAAJVMAACVf+AAlYaAAJZwgACWhAAAmKYAAJxhgACcdQAAnSSAAJ7lAACfMwAAo3cAAKOxgACj/4AApK8AAKVegAClcgAApiGAAKbRAACnC4AAp5QAAKh+AACpooAAqheAAKorAACqPoAAq4oAAKudgACrxIAAq/8AAKxNAACsYIAArK6AALM7gAC2boAAttAAALb3AAC574AAu9cAALzBAAC+2CAAv38AAMgagADIaIAAyhWAAMthAADRKwAA0mMAANRxgADYVAAA2I6AANkDgADbYAAA29UAAN+kAADh2YAA5muAAOtLgADrXwAA7CIAAO7gAAD1uwAA9/CAAPkogAD5PAAA/TIAASAs0AEoiYAAAAAAABuoAAB8dAAAoRkAALPEAAC/3YAAAAAAACBEAAAwZgAAP/SAAAAAAAAH1DAAD6hgABd8oAAfUNgH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAH1DAAD6hgAB9Q3//wV6//6INgAAAAAABVVVAAAAAAAAAAAAB8dAABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eurb5":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWKiAvnABQAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAAD0EkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAI+40ACeBgAAoCRgAKCsAACh6GAAollgAK7MAAC0zNAAtr4AALy+0AC9zgAAyGYAAMjtoADQWAAA0N+gANLQ0ADUFzAA1ikAANaGAADXDaAA1++gANhKAADY/tAA4UswAOIAAADiPDAA4kPQAONTAADjaaAA5eJgAOo10ADqTGAA6xfQAO0foADtegAA8mugAPKvYADzCdAA89UwAPSgoAD0tzAA9YKgAPZOAAD2kdAA9zAAAPg/MAD5kjAA+hnQAPowYAD6RwAA+8cwAPvd0AD8CwAA/E7QAPypMAD8v9AA/RowAQSx0AEIZwABCNgAAQkFMAEMdqABDqugAQ+60AESJwABEuhgARziMAEdPKABHy3QASCuAAEnY6ABKM0wASsvYAEvsAABL/PQATB7YAEzOAABM7+gATgpoAE6uQABQAUAAUWrYAFFwgABRqQAAUnRoAFRw6ABVFMAAVW8oAFV0zABWmpgAYL00AGMpdAAAAAAABvQAAB9KAAAogIAALTIAADA8wAAAAAAACByoAAwrAAAQFEAAAAAAAAJEtAAEiWgABs4YAAkSzgH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAJEtAAEiWgACRLP//t2m//5MegAAAAAABVVWAAAAAAAAAAAAB9KAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eurb6":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWojUPnQBgAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADyEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAHFCsAB/E7AAgR+wAIGisACC1FAAg0GAAI9IAACVFLAAlvUAAJzBsACdx7AAqAOwAKiGsACvsLAAsDOwALIUAACzT1AAtU8wALWpAAC2LAAAtwZQALddsAC4DFAAwBCwAMC/UADA+YAAwQDQAMIG0ADCHLAAxIAAAMit0ADIw7AAyYgwAMt+UADL1bAA0JxQANDd0ADRNTAA0fmwANK+MADS1AAA05iAANRdAADUnoAA1TdQANY9UADXhNAA2AfQANgdsADYM4AA2aawANm8gADZ6DAA2imwANqBAADaltAA2u4wAOJD0ADl2NAA5kYAAOZxsADpxTAA6+cAAOztAADvRDAA7/8AAPmiMAD5+YAA+9nQAP1NAAEDyFABBSWwAQdzMAELzLABDA4wAQyRMAEPNgABD7kAARP8sAEWddABG5PQASEJMAEhHwABIflQASULUAEsuFABLzGAATCO0AEwpLABNRQAAVw+UAFlmzAAAAAAABuasAB8OAAAoMtQALNtUAC/gQAAAAAAACA0gAAwTrAAP9WwAAAAAAAIxAAAEYgAABpMAAAjEAgH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAIxAAAEYgAACMQD//ueA//5bQAAAAAAABVVVAAAAAAAAAAAAB8OAABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eurb7":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWSWQ5hwBwAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADwEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAGYa4ABzkyAAdZIAAHYRsAB3O7AAd6YgAINfcACJBuAAitsgAJCCkACRggAAm3xQAJv8AACi+AAAo3ewAKVMAACmf3AAqHJwAKjKAACpSbAAqh6QAKpzsACrHgAAsu7gALOZIACz0eAAs9kAALTYcAC07bAAt0GwALtUsAC7agAAvCmQAL4TIAC+aFAAwxBQAMNQIADDpVAAxGTgAMUkcADFObAAxflQAMa44ADG+LAAx42wAMiNIADJzHAAykwgAMphcADKdrAAy+CQAMv14ADMIHAAzGBQAMy1cADMyrAAzR/gANRGcADXxHAA2C7gANhZcADbl5AA3auwAN6rIADg81AA4alwAOsOsADrY+AA7TggAO6iAAD087AA9khQAPiHAAD8xJAA/QRwAP2EIAEAGAABAJewAQTAAAEHKVABDCZwARF4sAERjgABEmLgARVhIAEc3OABH0YgASCasAEgsAABJQLgAUsxsAFUUnAAAAAAAButsAB8jbAAoTpQALPpIADABSAAAAAAACBKsAAwcAAAQAGwAAAAAAAIi7AAERdwABmjIAAiLugH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAIi7AAERdwACIu7//u6J//5lzgAAAAAABVVVAAAAAAAAAAAAB8jbABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eurb8":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWgDKNzQCAAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADuEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAFNTAABgdIAAYmaAAGLjAABkBYAAZG1AAG/bAAB1XgAAdyaAAHypgAB9ooAAh1yAAIfZAACOqAAAjySAAJDtAACSGMAAk/9AAJRUgACU0QAAlaCAAJXzgACWmYAAnjgAAJ7eAACfFWAAnxxAAKAVQACgKgAAom8AAKZnwACmfIAApzdAAKkUgACpZ4AArfGAAK4vwACugsAArz2AAK/4QACwDQAAsMfAALGCgACxwMAAslIAALNLAAC0gkAAtP7AALUTgAC1KEAAtokAALadwAC2x0AAtwWAALdYgAC3bUAAt8BAAL64wADCIEAAwogAAMKxgADF2sAAx+GAAMjagADLFAAAy8WAANTuQADVQUAA1wnAANhqgADek4AA39+AAOIPwADmMgAA5nBAAObswADpcAAA6eyAAO36AADwU8AA9TDAAPpgwAD6dYAA+0UAAP4wAAEFe4ABB9VAAQkhQAEJNgABDW0AATKl4AE7i8AAAAAAABu8AAB8zgAAoY2AALRGAADAaEAAAAAAACBbYAAwiQAAQCLAAAAAAAAIVKAAEKlAABj94AAhUogH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAIVKAAEKlAACFSj//vVs//5wIgAAAAAABVVWAAAAAAAAAAAAB8zgABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eurb9":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWgtT4EwCQAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADsEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAE/dwABcc8AAXlEgAF7IcABf3uAAYEJQAGs2sABwfyAAcjSwAHd9IAB4a8AAgb5wAII1wACIvHAAiTPAAIrpUACMCLAAjdsAAI4ssACOpAAAj2rgAI+6cACQWZAAl6cgAJhGQACYe1AAmIHgAJlwkACZhHAAm7FQAJ9/4ACfk8AAoEbAAKIQQACiX8AAprmQAKb1QACnRMAAp/fAAKiqwACovrAAqXGwAKoksACqYFAAquuQAKvaQACtBJAArXvgAK2PwACto7AArvXAAK8JsACvMXAAr20gAK+8sACv0JAAsCAgALbOkAC6EeAAunVQALqdIAC9pMAAv5YAAMCEsADCppAAw1CwAMwYIADMZ7AAzh1AAM9vUADVVuAA1pUgANiuIADcpHAA3OAgAN1XcADfwAAA4DdQAOQZwADmWpAA6wPgAO/8wADwELAA8NeQAPOjkAD6oZAA/OJQAP4gkAD+NHABAj6wASXsIAEuc3AAAAAAABuasAB8OAAAoMtQALNtUAC/gQAAAAAAACA0cAAwTrAAP9WwAAAAAAAH/CAAD/hAABf0UAAf8HgH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAH/CAAD/hAAB/wf//wB8//6AuwAAAAAABVVVAAAAAAAAAAAAB8OAABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","eurm10":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAWIvvBOQCgAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADqDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAEcToABU+VAAVUAgAFW8AABcKiAAXYwgAGNsoABk8gAAZvNQAGqvIABrg4AAbbfQAG6gAAB0taAAeIMgAHyFsAB8qSAAfixgAH7fgAB/11AAf+kAAIBBgACAdqAAgxcwAIOTIACGr6AAirIwAIxJUACM1uAAjVLQAI2ZoACN4GAAjh1QAI4nMACOSqAAjqMgAI8fAACPZdAAj3eAAJA6MACRnDAAk3ogAJOdgACWT9AAlqhQAJbvIACYClAAmJfgAJlsUACamTAAmrygAJrgAACa8bAAmwNgAJvGIACb6YAAnh/gAJ8pYACkfFAApW4gAKWF0ACnzeAAqJCgAKmaIACqFgAAqoAwAKqjoACrMTAAtArQALaZsAC28jAAt1xgALkFMAC6Q9AAwRwgAMGYAADB8IAAw2QwAMPx0ADFQiAAxVPQAMY54ADIggAAzZ/QAM/n4ADUDeAA1DFQANRmYADVTIAA2dywAOAnYADgOSAA6nSwAPyIMAELTDAAAAAAABuoAAB1igAAhRiAAKEZAACxAAAAv92AAAAAAAAFL4AAIEQAADBmAAA/9IAAAAAAAAbqAAAONmAAFVGgABxs2Af4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAcbMAAONmAAHGzf//HJr//qrmAAAAAAAFVVUAAAAAAAAAAAAHWKAAEAAAAAAAAAAGDMAABFJAAATA4AAGDMAAApfAAAZ7YAAGDMAABS+AAAMGYAAD46AABntgAABuoAAjLN0AD/0gAAQa8A==","eurm5":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAWNzvG5wBQAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAAD0DVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAIbRoACXdtAAl8ugAJhgAACgE6AAobugAKjFoACqmAAArP7QALF3oACydgAAtRpgALYwAAC9eaAAwgegAMbVMADG/6AAyNAAAMmmAADKztAAyuQAAMtOAADLjaAAzrMwAM9HoADTAaAA188wANm20ADaYGAA2vTQANtJoADbnmAA2+egANvzMADcHaAA3IegAN0cAADdcNAA3YYAAN5vMADgFzAA4lOgAOJ+AADluNAA5iLQAOZ3oADnytAA6HRgAOly0ADq2zAA6wWgAOswAADrRTAA61pgAOxDoADsbgAA7xRgAPBSYAD2stAA99TQAPfw0AD6rGAA+5WgAPzToAD9aAAA/ecwAP4RoAD+uzABCVTQAQxlMAEMzzABDU5gAQ9LMAEQyNABGPugARmQAAEZ+gABG7cwARxg0AEd86ABHgjQAR8cYAEh2AABJ/jQASq0YAEvrGABL9bQATAWYAExKgABNqEwAT4qYAE+P6ABSoEwAWAoAAFx1zAAAAAAABvQAAB2NAAAhdkAAKICAACyAAAAwPMAAAAAAAAFNwAAIHKgADCsAABAUQAAAAAAAAhIAAARBaAAGYhgACILOAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAiC0AARBaAAIgs//+76b//md6AAAAAAAFVVYAAAAAAAAAAAAHY0AAEAAAAAAAAAAGFYAABFiAAATHwAAGFYAAApuAAAaEwAAGFYAABTcAAAMKwAAD6UAABoTAAABvQAAjX70AEBRAAAQg4A==","eurm6":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAW5Ax4JwBgAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADyDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAGpYAAB6cIAAesKAAHtSAACCxIAAhF6AAIstAACM8AAAj0KAAJOVgACUi4AAlxkAAJgmAACfMgAAo5mAAKg+gACoZ4AAqigAAKr3gACsFoAArCsAAKyRgACszwAAr9oAALBpgAC0BAAAuKkAALqAgAC7JIAAu7QAALwGAAC8WAAAvJ6AALyqAAC80wAAvTmAAL3JAAC+GwAAvi+AAL8RAADAqwAAwtSAAML9gADGHQAAxoOAAMbVgADIHYAAyMGAAMm3gADLFAAAyz0AAMtmAADLeoAAy48AAMxwgADMmYAAzymAANBdAADWh4AA15+AANe7AADaX4AA20EAANx0gADdBAAA3X8AAN2oAADeTAAA6IwAAOuCgADr6QAA7GQAAO5QAADvwQAA966AAPg+AAD4pIAA+lMAAPr3AAD8fIAA/JEAAP2bgAEAQAABBi0AAQjRgAENn4ABDciAAQ4GAAEPEIABFFmAARujAAEbt4ABJ5GAATyBAAFNmwAAAAAAABuasAB1UVAAhNhQAKDLUACwqrAAv4EAAAAAAAAFLQAAIDSAADBOsAA/1bAAAAAAAAgCAAAQdgAAGLEAACDsCAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAg7AAAQdgAAIOwP/++KD//nTwAAAAAAAFVVUAAAAAAAAAAAAHVRUAEAAAAAAAAAAGCdUABFArAAS+lQAGCdUAApaAAAZ4QAAGCdUABS0AAAME6wAD4cAABnhAAABuawAjG+gAD/VrAAQY9Q==","eurm7":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAW+ruHXABwAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADwDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAF/wAABvpAAAb/QAAHCAAAB3xAAAeVQAAH/4AACBsAAAg/QAAIgsAACJHAAAi5mwAIygAACTgAAAl8wAAJxUAACcfAAAnjGwAJ78AACgFAAAoCgAAKCMAACgyAAAo8AAAKRMAACn0AAArFgAAK4kAACuxAAAr1AAAK+gAACv8AAAsDTgALBAAACwaAAAsMwAALFYAACxqAAAsbwAALKYAAC0KAAAtkQAALZsAAC5eAAAudwAALosAAC7bAAAvAwAALz8AAC+UAAAvngAAL6gAAC+tAAAvsgAAL+kAAC/zAAAwkwAAMN4AADJfAAAyo1QAMqoAADNPAAAzhgAAM9EAADP0AAA0EgAANBwAADREAAA2xAAAN30AADeWAAA3tAAAOCwAADiGAAA6dQAAOpgAADqxAAA7GgAAO0IAADuhAAA7pgAAO+cAADyMAAA9/gAAPqMAAD/PAAA/2QAAP+gAAEApAABBcwAAQzoAAEM/AABGIwAASz44AE9qAAAAAAAAButsAB1olAAhTQAAKE6UACxJJAAwAUgAAAAAAAFMJAAIEqwADBwAABAAbAAAAAAAAfQAAAQDyAAGBawACAeWAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAgHkAAQDyAAIB5f/+/w7//n6VAAAAAAAFVVUAAAAAAAAAAAAHWiUAEAAAAAAAAAAGDgAABFMlAATB2wAGDgAAAphJAAZ8twAGDgAABTCSAAMHAAAD5G4ABny3AAButwAjNCIAEABuAAQbyQ==","eurm8":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAWeMbKNgCAAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADuDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAEzMgABb0KAAXB0gAFyjAABjlaAAZRQgAGttwABtEoAAbz0gAHNF4AB0K2AAdo1AAHeIAAB+GwAAgjbgAIaMIACGsmAAiFUAAIkWYACKIiAAijVAAIqU4ACKzkAAjaUAAI4q4ACRh4AAldzAAJeUoACYLaAAmLOAAJkAAACZTIAAmY5gAJmZAACZv0AAmh7gAJqkwACa8UAAmwRgAJvWwACdVUAAn1mgAJ9/4ACiacAAoslgAKMV4ACkR+AApODgAKXGYACnC4AApzHAAKdYAACnayAAp35AAKhQoACoduAAqtrgAKv5wACxumAAsr/AALLZQAC1UGAAtiLAALdBoAC3x4AAuDpAALhggAC4+YAAwomAAMVNIADFrMAAxh+AAMfqgADJQsAA0KggANEuAADRjaAA0x9AANO4QADVI6AA1TbAANYvYADYpoAA3i3AAOCk4ADlIGAA5UagAOWAAADmeKAA62bgAPIzQADyRmAA/VTgARDdAAEg0UAAAAAAABu8AAB13wAAhXjAAKGNgACxgAAAwGhAAAAAAAAFM0AAIFtgADCJAABAIsAAAAAAAAd4gAAPW0AAFwjgAB62iAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAetoAAPW0AAHraP//Ckz//o9yAAAAAAAFVVYAAAAAAAAAAAAHXfAAEAAAAAAAAAAGESAABFVgAATEUAAGESAAApmgAAaAEAAGESAABTNAAAMIkAAD5nAABoAQAABu8AAjRkwAEAiwAAQd6A==","eurm9":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAWlSOt9QCQAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADsDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAEkscABXeyAAV8QAAFhDkABe4kAAYE6wAGZbkABn7HAAafzgAG3U4ABur5AAcPRwAHHjkAB4JyAAfBFQAIAyQACAVrAAgeVQAIKdwACDnOAAg68gAIQKQACEQOAAhvVQAId04ACKqOAAjsnAAJBs4ACQ/rAAkX5AAJHHIACSEAAAkk6wAJJY4ACSfVAAkthwAJNYAACToOAAk7MgAJR7kACV6AAAl9QAAJf4cACavyAAmxpAAJtjIACchrAAnRhwAJ3zIACfKOAAn01QAJ9xwACfhAAAn5ZAAKBesACggyAAospAAKPbkACpVrAAqk+QAKpoAACswVAArYnAAK6bIACvGrAAr4gAAK+scACwPkAAuVqwALv84AC8WAAAvMVQAL56sAC/wrAAxs6wAMdOQADHqVAAySgAAMm5wADLFAAAyyZAAMwTIADObHAA07DgANYKQADaT5AA2nQAANqqsADbl5AA4EpAAObEcADm1rAA8V+QAQP7kAETLyAAAAAAABuasAB1UVAAhNhQAKDLUACwqrAAv4EAAAAAAAAFLQAAIDRwADBOsAA/1bAAAAAAAAceQAAOocAAFfKwAB1DmAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAdQ4AAOocAAHUOf//FeT//qDVAAAAAAAFVVUAAAAAAAAAAAAHVRUAEAAAAAAAAAAGCdUABFArAAS+lQAGCdUAApaAAAZ4QAAGCdUABS0AAAME6wAD4cAABnhAAABuawAjG+cAD/VrAAQY9Q==","eusb10":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWsJWMkwCgAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADqGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAPbgAAFyUAACQOAAAkSgAAJJoAACU/AAAmUgAAJ+IAACgZAAAp2wAAK5MAACu2AAAr/AAAL4AAAC/GAAAwEQAAMFcAADD8AAAxfgAAMycAADMsAAAzvQAAM9YAADREAAA2sAAAN1AAADf6AAA4BAAAOA4AADizAAA7gwAAO+IAADwPAAA/9wAARwkAAEeLAAAAAAAADBmAAB8dAAAlTSgALPEAAC/3YAAAAAAABVLoAAgRAAAP/SAAAAAAAAPoAgDCAAIAwgAEAAoJgAAEA8wAAAAAABVVVAAAAAAAAAAAAB8dAABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eusb5":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWKR7o6wBQAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAAD0GjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAerYAAJ2VAADX76AA2P7QANpoYADdUjAA4i0wAOk9MADqNdAA8ifQAPnsoAD6itAA+8cwAQurMAEM56ABDjqgAQ93AAESYNABFKxgARwtYAEcRAABHtNgAR9EYAEhNaABLCgAAS77MAEx+6ABMijQATJWAAE1P9ABQfYwAUOjoAFEbwABVhcAAXYMMAF4V9AAAAAAADCsAAB9KAAAlgxgALTIAADA8wAAAAAAABVqYAAgcqAAQFEAAAAAAAARqAgDCAAIAwgAEAAtXgAAEiWgAAAAAABVVWAAAAAAAAAAAAB9KAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eusb6":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWjvSeXgBgAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADyGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAXawAAH+eAAC4bAAAuXQAALrUAAC9qgAAwmQAAMlEAADKNgAA0fIAANmCAADaHAAA21AAAOrIAADr/AAA7UYAAO56AADxUAAA84wAAPraAAD68AAA/W4AAP3cAAD/wAABCmgAAQ0oAAEQFAABEEAAARBsAAETQgABH6IAASFEAAEiCgABMzoAAVJWAAFUkgAAAAAAADBOsAB8OAAAlOywALNtUAC/gQAAAAAAABVBUAAgNIAAP9WwAAAAAAARMAgDCAAIAwgAEAAsKdAAEapQAAAAAABVVVAAAAAAAAAAAAB8OAABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eusb7":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAW249NFwBwAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADwGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAUt5QAHPukACrQuAArEQAAK2a4ACwXgAAtPiQALuq4AC8lpAAxB8gAMt84ADMEuAAzT7gANxQAADdfAAA3r1wAN/pcADirJAA5NmwAOv3IADsDJAA7noAAO7lIADwvJAA+x2wAP3LcAEApAABAM7gAQD5sAEDvOABD8qQARFhsAESIpABIuBQAUEtcAFDWpAAAAAAADBwAAB8jbAAlVNwALPpIADABSAAAAAAABVQAAAgSrAAQAGwAAAAAAAQvbgDCAAIAwgAEAArBCAAETTgAAAAAABVVVAAAAAAAAAAAAB8jbABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eusb8":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWZ1+2OgCAAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADuGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAQGtAAGCg4ACWh0AAl4HAAJjPwACbgKAAn/zAAKaCwACnaGAArr8gALXsIAC2fkAAt6KAAMZQAADHdEAAyK1gAMnRoADMgoAAzqFAANWPoADVpIAA2AHgANhqQADaNYAA5FIAAObuAADps8AA6d2AAOoHQADsuCAA+HYgAPoCwAD6vqABCw2gASiSYAEqsSAAAAAAADCJAAB8zgAAlaCAALRGAADAaEAAAAAAABVbAAAgW2AAQCLAAAAAAAAQTwgDCAAIAwgAEAAp54AAEMMAAAAAAABVVWAAAAAAAAAAAAB8zgABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eusb9":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWHpN8ugCQAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADsGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAPr9QAF4fAACSn1AAk5NQAJTYsACXd7AAm9YAAKIwsACjEFAAqjZQALEzsACxwgAAst6wAMEqsADCR1AAw3hQAMSVAADHNAAAyUSwANAFAADQGVAA0mcAANLMsADUjAAA3mVQAODwAADjo1AA48wAAOP0sADmk7AA8gOwAPOGAAD0PQABBB+wASDgUAEi8QAAAAAAADBOsAB8OAAAlOywALNtUAC/gQAAAAAAABVBUAAgNHAAP9WwAAAAAAAP4rgDCAAIAwgAEAAo0OAAEFOQAAAAAABVVVAAAAAAAAAAAAB8OAABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","eusm10":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWTFKnrgCgAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADqGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAANp8AAFHugABuR4AAgHagAIGR0ACD2eAAisPgAI0vYACN8iAAlj4gAJiGMACaQLAAmrygAJu0YACmNtAAqCZgAKkeMACpmiAAqiewAK8z0AC1JgAAts7QALcnUAC3f9AAuQUwAMGYAADC1qAAxUIgAMYoMADGS6AAxm8AANKr4ADT/DAA1JuAAOJvgAD7duAA/UMgAAAAAAAwZgAAdYoAAJU0oACzxAAAv92AAAAAAAAVS6AAIEQAAD/0gAAAAAAAA3UAAAbqAAAKXwgDCAAIAwgAEAAjiAAADjZgAAAAAABVVVAAAAAAAAAAAAB1igABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eusm5":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWlB1XVwBQAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAAD0GzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAcxwAAJPSAAC1xgAAy42gAMzg0ADPnGAA1+RgANrKYADbs6AA5aOgAOhfMADqcTAA6wWgAOwuYAD4xNAA+xZgAPw/MAD806AA/X0wAQOI0AEKqAABDKTQAQ0O0AENeNABD0swARmQAAEbDaABHfOgAR8HMAEfMaABH1wAAS4EYAEvlzABMFYAAUDmAAFe4GABYQegAAAAAAAwrAAAdjQAAJYMYAC0yAAAwPMAAAAAAAAVamAAIHKgAEBRAAAAAAAABCQAAAhIAAAMbAgDCAAIAwgAEAAqjgAAEQWgAAAAAABVVWAAAAAAAAAAAAB2NAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eusm6":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAW/BiHugBgAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADyGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAV0kAAHbqgACXv4AArM8AAK4XAACwu4AAuL2AALuLAAC8bIAAxgiAAMitAADKrYAAyz0AAMxcAADYiAAA2sYAANvlAADcdIAA3RiAAOLxAADp1AAA68AAAOwmgADsjQAA7lAAAPg+AAD5rwAA/HyAAP2HAAD9sAAA/dkAAQwFgAENiwABDkOAAR5HgAE7RIABPVmAAAAAAAAwTrAAdVFQAJTssACzbVAAv4EAAAAAAAAVQVAAIDSAAD/VsAAAAAAABAEAAAgCAAAMAwgDCAAIAwgAEAApJwAAEHYAAAAAAABVVVAAAAAAAAAAAAB1UVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eusm7":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWahQE5gBwAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADwGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAATVgAAGw0AACMPAAAoMgAAKIIAACknAAArGwAAK8oAACwBAAAuWQAALv4AAC97AAAvngAAL+QAADLcAAAzaAAAM64AADPRAAAz+QAANWYAADcUAAA3jAAAN6UAADe+AAA4LAAAOpgAADryAAA7oQAAO+IAADvsAAA79gAAP2sAAD/KAAA/9wAAQ98AAErxAABLcwAAAAAAAAwcAAAdaJQAJVTcACz6SAAwAUgAAAAAAAVUAAAIEqwAEABsAAAAAAAA+gAAAfQAAALuAgDCAAIAwgAEAAoJeAAEA8gAAAAAABVVVAAAAAAAAAAAAB1olABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eusm8":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWoul3jACAAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADuGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAO2eAAFkbQAB378AAi7aAAIzqgACPZcAAlurAAJmMgACaYEAAo2ZAAKXhgACnwsAAqEmAAKlXAAC0xQAAtuAAALftgAC4dEAAuQ5AAL6LgADFAwAAxtEAAMcxQADHkYAAyTkAANKMAADT5oAA1ohAANeCgADXqQAA18+AAOUewADmjIAA5znAAPZDwAERfEABE3DAAAAAAAAwiQAAdd8AAJWggAC0RgAAwGhAAAAAAAAVWwAAIFtgAEAiwAAAAAAAA8KAAAeFAAALR4gDCAAIAwgAEAAmpIAAD3UAAAAAAABVVWAAAAAAAAAAAAB13wABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eusm9":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWdd5K2ACQAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADsGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAOOsgAFVgsABy6uAAhd3AAIcE4ACJZZAAkJoAAJMfkACT6nAAnI/AAJ7wcACgvZAAoT6wAKJA4ACtNHAArzjgALA7IACwvEAAsU/AALaSQAC8xHAAvn8gAL7bUAC/N5AAwM1QAMm8cADLCHAAzY4AAM59wADOorAAzseQANuIQADc5rAA3YywAOv1kAEGCnABB+oAAAAAAAAwTrAAdVFQAJTssACzbVAAv4EAAAAAAAAVQVAAIDRwAD/VsAAAAAAAA5pAAAc0cAAKzrgDCAAIAwgAEAAlBlAADs9QAAAAAABVVVAAAAAAAAAAAAB1UVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","msam10":"AOUAEgAAAH8AFQAQABAAAgAAAAAAAAAWl7PuzQCgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADqC4AAAAuAAAALgAAAC4AAAAuAAAACUAAAB5cAAAeXAAALZgAAC2YAABFDAAARQwAAC4AAAAiQAAANkAAABpAAABFDAAARQwAAEYoAABGKAAAMmwAADJsAAAObAAADmwAAA5sAAAObAAASQwAAEkMAABGKAAARigAABJAAAASQAAAREQAAFBEAABFQAAARUAAAC6wAAAusAAALrAAAC70AABJQAAAHkAAAB5AAAAtmAAAL5gAAC6wAAAusAAALvQAAC3gAAAt4AAALeAAAC3gAAAt4AAALvQAAC3gAAAuKAAABUAAABDIAAAtmAAALZgAAC3gAAAu9AAALeAAAC4oAAAtUAAALVAAAC1QAAAtUAAALeAAAC3gAAA+bAAAEvQAACFAAAAtUAAALVAAABDIAAAQyAAAIUAAACFAAAAhQAAALkAAAC94AAAveAAAL/wAAC/8AAAmABAAReAAAEXgAAAyQAAAGmwAABpsAAAa7AAAIkAAACJAAAAhEAAALkAAAC5sAAAubAAALVAAAC1QAAAdQAAAHUAAAClAAAApQAAALkAAAC5AAAAu9AAALvQAAC1UAAAtVAAATVAAAE1QAAASQAAAEkAAAEJkAAA6ZAAAHkAAAC5YAAAsRAAALMgAABBAAAAQQAAAMkAAABMAAAAUrAAALZgAAC2YAAAtmAAAAAAAAAARmZgAEccgABqqtAAgAAgAI45AACcceAAqqrQALjjsADAACAAwqqwAMccoADVVYAA445gAOb30ADxxzAA8liAAQAAMAEccgABVVWgAWOOgAAAAAAAYLzgAG444AB2ydAAhbugAIzDoACU/IAAovyAAKzM0ACxNrAAusXQAMF+UADTM4AA4rygAOqq0AD7iWAAAAAP/93rj//2ydAAA3dQAAkBIAAPhQAAFPyAABxx0AAi/IAAJ9SgAC5JAAAxxwAAOsXQAEF+UABivKAAe4lgAAAAAAAGZmAAAAAAAAAAAAAAAAAAAAAAAG444AEAADAAAAAAAK0voABky6AAcZhgAK+agABYR4AAabNQAFzmgABJ9KAAJmZgAD9JoABi2AAADMzQAmPXAAECj2AAQAAA==","msam5":"AOcAEgAAAH8AFwAQABAAAgAAAAAAAAAWIokceABQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAAD0EKAAABCgAAAQoAAAEKAAABCgAAACQAAACXUAAAl1AAAQdgAAEHYAABNDAAATQwAAEKAAAAxwAAAScAAACHAAABNDAAATQwAAE4cAABOHAAARdwAAEXcAAAR3AAAEdwAABHcAAAR3AAAUQwAAFEMAABOHAAAThwAABXAAAAVwAAATEQAAFhEAABNAAAATQAAAELwAABCsAAAQrAAAEM0AABRAAAAJcAAACXAAABB2AAAK5gAAEKsAABCrAAAQzQAAEIgAABCIAAAQiAAAEIgAABCIAAAQvQAAEIgAABCaAAABQAAAAzIAABBmAAAQZgAAEIgAABC9AAAQiAAAEJoAABBUAAAQVAAAEFQAABBUAAAQiAAAEIgAAA93AAAFmQAAB0AAABBUAAAQVAAAAzIAAAMyAAAHQAAAB0AAAAdAAAAQcAAAEN4AABDeAAAQ/wAAEP8AAA5wBAATdwAAE3cAABFwAAAIdwAACHcAAAiXAAAMcAAADHAAAAxDAAAQcAAAEHcAABB3AAAQVAAAEFQAAAlAAAAJQAAADUAAAA1AAAAQcAAAEHAAABC9AAAQvQAAEGUAABBlAAAVVAAAFVQAAAVwAAAFcAAADoYAAAuGAAAJcAAAEKYAABARAAAQMgAABTAAAAUwAAARcAAABaAAAAYnAAAQdgAAEHYAABB2AAAAAAAAAAcOPQAHVVoACgANAAocegALxyYADOOaAA4AAwAOAA0ADxyAAA+OTQAP0o0AEDjzABCOOgAQk/oAERxzABFVZgAScdoAE45NABXHMwAYABoAHHHmAB2OWgAAAAAABletAAbjjQAICCYACLHGAAmdWgAKWvoACuOTAAt3nQAMPe0ADRydAA2iFgAOCLoAEFaTABFVZgASO5AAAAAA//5XrQAAQuYAAIfTAAGdWgACLUMAAp+DAAMfCgADglYABAAAAAR73QAE9KAABV/mAAXxXQAIVpMACjuQAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAbjjQAXjk0AAAAAAA7NygAGMw0ACBDtABBnYwAIgrMACA6QAAZ09gAEtg0AAzMzAAZmZgAH6UAAAZmaAB+uEwAWuFMABAAA","msam6":"AOgAEgAAAH8AGAAQABAAAgAAAAAAAAAWDEXqNgBgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADyD6AAAA+gAAAPoAAAD6AAAA+gAAACQAAACXUAAAl1AAAPZgAAD2YAABRDAAAUQwAAD6AAAApwAAATcAAAB3AAABRDAAAUQwAAFHkAABR5AAASeQAAEnkAAAN5AAADeQAAA3kAAAN5AAAVQwAAFUMAABR5AAAUeQAABXAAAAVwAAAUEQAAFxEAABRAAAAUQAAAD7wAAA+8AAAPvAAAD80AABVAAAAJcAAACXAAAA9mAAAL5gAAD6sAAA+rAAAPzQAAD4kAAA+JAAAPiQAAD4kAAA+JAAAPzQAAD4kAAA+aAAABQAAABDIAAA9mAAAPZgAAD4kAAA/NAAAPiQAAD5oAAA9UAAAPVAAAD1QAAA9UAAAPiQAAD4kAABF5AAAFmgAACEAAAA9UAAAPVAAABDIAAAQyAAAIQAAACEAAAAhAAAAPcAAAD94AAA/eAAAP/wAAD/8AAAxwBAAUeAAAFHgAABJwAAAHeQAAB3kAAAeZAAAKcAAACnAAAApDAAAPcAAAD3kAAA95AAAPVAAAD1QAAAlAAAAJQAAADUAAAA1AAAAPcAAAD3AAAA/NAAAPzQAAD2UAAA9lAAAWVAAAFlQAAAVwAAAFcAAAEHcAAA53AAAJcAAAD5YAAA8RAAAPMgAABSAAAAUgAAAScAAABbAAAAYpAAAPZgAAD2YAAA9mAAAAAAAAAAXaEwAGEvUACKqoAAlVUAAKOOAAC0JbAAxL1QAM45AADVVQAA5eywAOhLUADsj7AA8GowAPaDUAD2hFABAl1QAQJfAAEHHAABF7OwATjjAAFaElABnHEAAa0IsAAAAAAAY9KAAHEvMACAg9AAiwyAAJaGUAChjAAArzyAALO70ADCXrAAyTcAANGvgADY8wAA/lTQAQccAAEbilAAAAAP/+PSgAAAg9AAB/AAABaGUAAftlAAJDQwACqB0AAtedAAMsFQAEFEgABLUjAAUC4wAFjzAAB+VNAAm4pQAAAAAAAHd4AAAAAAAAAAAAAAAAAAAAAAAG440AFHHAAAAAAAANANAABkb9AAfCQAAN0WUABt6tAAgMKAAGttMABJe1AAKqqwAFVVUABpewAAFVVQAfu7sAFZmbAAQAAA==","msam7":"AOgAEgAAAH8AGAAQABAAAgAAAAAAAAAWuHXuNwBwAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADwDqAAAA6gAAAOoAAADqAAAA6gAAACUAAACJYAAAiWAAAOZgAADmYAABRDAAAUQwAADqAAAAqQAAATkAAAB5AAABRDAAAUQwAAFJgAABSYAAAQmAAAEJgAAAOYAAADmAAAA5gAAAOYAAAVQwAAFUMAABSYAAAUmAAABZAAAAWQAAAUEQAAFxEAABRQAAAUUAAADrsAAA67AAAOuwAADs0AABVQAAAIkAAACJAAAA5mAAAM5gAADroAAA66AAAOzQAADpgAAA6YAAAOmAAADpgAAA6YAAAOzAAADpgAAA6pAAABUAAABDIAAA52AAAOdgAADpgAAA7MAAAOmAAADqkAAA5UAAAOVAAADlQAAA5UAAAOmAAADpgAABGYAAAFqQAACVAAAA5UAAAOVAAABDIAAAQyAAAJUAAACVAAAAlQAAAOkAAADt4AAA7eAAAO/wAADv8AAAuQBAAUhwAAFIcAABCQAAAHmAAAB5gAAAeoAAAKkAAACpAAAApDAAAOkAAADpgAAA6YAAAOVAAADlQAAAhQAAAIUAAADVAAAA1QAAAOkAAADpAAAA7MAAAOzAAADmUAAA5lAAAWVAAAFlQAAAWQAAAFkAAAEocAAA+HAAAIkAAADqYAAA4RAAAOMgAABSAAAAUgAAAQkAAABcAAAAYoAAAOZgAADmYAAA5mAAAAAAAAAAVFFQAFbbkAB+OSAAjbcAAJXXkACllpAAtVWQAMUUkADFlpAA1NOQANvwIADccgAA4WxQAOSSkADxxuAA9FGQAPtuAAD9dZABBBCQASOOkAFDDJABggiQAZHHkAAAAAAAYlMAAG444AB9lSAAh2MAAJDMIACcgeAAoMFQAKlUAACwWwAAvnoAAMksAADTIZAA92kAAPz0AAEThHAAAAAP/+JTD//9lSAAB2MAABNfcAAaibAAH52QACp3IAAwoQAAPr5wAEdacABKqLAAUc2wAFR1kAB3aQAAk4RwAAAAAAAHFgAAAAAAAAAAAAAAAAAAAAAAAG444AErryAAAAAAALt44ABiR3AAeKDgAMCM4ABYHnAAgKawAG5dkABJJJAAJJJQAEkkkABaaXAAEkkgAbMzIAEoOpAAQAAA==","msam8":"AOYAEgAAAH8AFgAQABAAAgAAAAAAAAAWr1pEswCAAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADuDJAAAAyQAAAMkAAADJAAAAyQAAACUAAAB4cAAAeHAAAMZgAADGYAABJDAAASQwAADJAAAAmAAAAPgAAABoAAABJDAAASQwAAEokAABKJAAANiQAADYkAAAOJAAADiQAAA4kAAAOJAAATQwAAE0MAABKJAAASiQAABIAAAASAAAASEQAAFREAABJQAAASUAAADKwAAAy8AAAMvAAADM0AABNQAAAHgAAAB4AAAAxmAAAM5gAADKwAAAysAAAMzQAADHgAAAx4AAAMeAAADHgAAAx4AAAMzQAADHgAAAyaAAABUAAABDIAAAxmAAAMZgAADHgAAAzNAAAMeAAADJoAAAxUAAAMVAAADFQAAAxUAAAMeAAADHgAABCJAAAEqwAACFAAAAxUAAAMVAAABDIAAAQyAAAIUAAACFAAAAhQAAAMgAAADO4AAAzuAAAM/wAADP8AAAqABAASeAAAEngAAA2AAAAGiQAABokAAAapAAAJgAAACYAAAAlDAAAMgAAADIkAAAyJAAAMVAAADFQAAAdQAAAHUAAAC1AAAAtQAAAMgAAADIAAAAzNAAAMzQAADGUAAAxlAAAUVAAAFFQAAASAAAAEgAAAEYgAAA6IAAAHgAAADJYAAAwRAAAMMgAABCAAAAQgAAANgAAABNAAAAUpAAAMZgAADGYAAAxmAAAAAAAAAASccgAEuOgABxVcAAiACAAJcdAACmOYAAtVYAALuOgADEcoAAy7yAANE+wADTjwAA4quAAO45gADxyAAA8qrAAPnHwAEQAQABLjoAAWqsAAF5yIAAAAAAAGDDwABsACAAewcgAIbV4ACPMQAAmadAAKmwYACwWwAAtx0AAMJVYADFz0AAzTDAANMzgADy4aABC26AAAAAD//gw8//+wcgAAbV4AAQKQAAFsYAABuZwAAeOQAAKbBgADEO4AA4YSAAQAAAAESY4ABNMMAAcG1gAItugAAAAAAABszgAAAAAAAAAAAAAAAAAAAAAABuOOABEAEAAAAAAACyQsAAaKlAAHUbAAC/xaAAZGUAAGpYwABaWMAASOOAACAAAABAAAAAZVVgABAAAAF8zMABIzNAAEAAA=","msam9":"AOYAEgAAAH8AFgAQABAAAgAAAAAAAAAW07GMBwCQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADsDJAAAAyQAAAMkAAADJAAAAyQAAACYAAAB5gAAAeYAAAMdwAADHcAABJTAAASUwAADJAAAAmQAAAOkAAABpAAABJTAAASUwAAEpoAABKaAAANmwAADZsAAAObAAADmwAAA5sAAAObAAATUwAAE1MAABKaAAASmgAABJAAAASQAAASEQAAFREAABJgAAASYAAADLwAAAy8AAAMvAAADM0AABNgAAAHkAAAB5AAAAx3AAAM5wAADLwAAAy8AAAMzQAADIkAAAyJAAAMiQAADIkAAAyJAAAMzQAADIkAAAybAAABYAAABEIAAAx3AAAMdwAADIkAAAzNAAAMiQAADJsAAAxlAAAMZQAADGUAAAxlAAAMiQAADIkAABCbAAAEvAAACGAAAAxlAAAMZQAABEIAAARCAAAIYAAACGAAAAhgAAAMkAAADO4AAAzuAAAM/wAADP8AAAqQBAASiQAAEokAAA2QAAAGmwAABpsAAAa7AAAJkAAACZAAAAlUAAAMkAAADJsAAAybAAAMZQAADGUAAAdgAAAHYAAAC2AAAAtgAAAMkAAADJAAAAzNAAAMzQAADHYAAAx2AAAUZQAAFGUAAASQAAAEkAAAEZkAAA+ZAAAHkAAADKcAAAwRAAAMQgAABCAAAAQgAAANkAAABNAAAAU7AAAMdwAADHcAAAx3AAAAAAAAAAR4GQAEkWAABtoQAAg44AAJIsAACgygAAr2gAALoTAAC+BgAAxUrgAMnB4ADMpAAA20IAAOngAADqqcAA8ixAAPYesAEHHAABJFgAAV7QAAFtbgAAAAAAAF9OkABmUgAAbjjgAHjLcACGSMAAjaLAAJXQQACmTVAAsXMgALTwAAC/9OAAx3QAANMzkADsegABA3MAAAAAD//fTp//+MtwAASRkAAIAAAADQyQABMccAAYHAAAHTwAACbMUAAvPHAAMpMgAD/04ABHdAAAaYwAAINzAAAAAAAABpPgAAAAAAAAAAAAAAAAAAAAAABuOOABBxwAAAAAAAClkLAAaOJAAHMnwACtoAAAVt6wAHr5UABswHAASXtAABxxwAAtCeAAWhNAAA444AKn0nABAthAAEAAA=","msbm10":"AOMAEgAAAH8AEwAQABAAAgAAAAAAAAAWiLYWyACgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADqDbsAAA27AAANzgAADc4AAA2ZAAANmQAADZkAAA2ZAAANuwAADbsAAA3OAAANzgAADXYAAA12AAANzgAADc4AAA2qAAANqgAADaoAAA2qAAAN/wAADf8AAA27AAANuwAADbwAAA28AAANvAAADbwAAA0RAAANzgAADogAAA6oAAANdgAADXYAAA27AAANuwAADc0AAA3NAAANuwAADbsAAA12AAANdgAADc4AAA3OAAAGqwAAAqsAAAFlAAADZQAACYAAAAyAAAAJgAAADIAAAA3OAAANzgAADZkAAA2ZAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAANZQAADWUAAAiAAAAMgAAAC4AAAAyAAAAMgAAAC4AAAAmAAAANgAAADYAAAAOAAAAGhwAADYAAAAuAAAAPgAAADIAAAA2HAAAJgAAADYcAAAyAAAAIgAAAC4AAAAyAAAAMgAAAEIAAAAyAAAAMgAAAC4AAABHQAlwS0AAAEdACXhLgAAAAAAAACIAAAAqAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAiAAAANMgAAC4AAAAWAAAALgAAADVQAAA1UAAANZQAADWUAAAFlAAADZQAADWUAAA0RAAANQwAADWUAAA28AAANvAAAECAAABAgAAANZQAACyAEAAiAAAAHgAAAB4AAAAQgAAAAAAAAAAOOOgAEccgABjjlAAbd4AAHHHMACAACAAik/QAI45AACcceAAo45QAKqq0AC447AAxxygAOOOYADxx1ABAAAwAeOOoAJVVdAAAAAAAF3rgABuOOAAdrgwAHut4ACKAlAAlOgAAKLPAACwWwAAtK0AAL25YADB26AAyzhgANMzgADmZlAA62UwAAAAD//d64//9rg///ut4AAKAlAAFOgAACLPAAAqqrAAMccAADStAAA7ctAAQF0wAEL8sABI6aAATYCAAGtlMAAAAAAACk+wAEAAAABMzQAAJmYAABmaAAB2hNABAAAAABmaAACtL6AAZMugAHGYYACvmoAAWEeAAGmzUABc5oAASfSgACZmYAA/SaAAYtgAAAzM0AJj1wABAo9gAEAAA=","msbm5":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAW/fYhFwBQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAAD0FssAABbLAAAW7gAAFu4AABapAAAWqQAAFqkAABapAAAWywAAFssAABbuAAAW7gAAFocAABaHAAAW7gAAFu4AABapAAAWugAAFqkAABa6AAAW/wAAFv8AABbLAAAWywAAFswAABbMAAAWzAAAFswAABYRAAAW7gAAF3YAABeWAAAWhwAAFocAABbLAAAWywAAFt0AABbdAAAWywAAFssAABaHAAAWhwAAFu4AABbuAAAMmAAAA5gAAAJlAAAGZQAAEHAAABVwAAAQcAAAFXAAABbuAAAW7gAAFqkAABapAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAWZQAAFmUAAA9wAAALcAAACXAAAAtwAAALcAAACXAAAAdwAAANcAAADXAAAAFwAAAEdQAADXAAAAlwAAAScAAAC3AAAA11AAAHcAAADXUAAAtwAAAFcAAACXAAAAtwAAALcAAAFHAAAAtwAAALcAAACXAAABmwAlwasAAAGbACXhrQAAAAAAAAD3AAABFwAAAAAAAAAAAAAAAAAAAAAAAAFXAAAA9wAAAWMgAAE3AAAApwAAATcAAAFlQAABZUAAAWZQAAFmUAAAJlAAAGZQAAFmUAABYRAAAWQwAAFmUAABbMAAAWzAAAGCAAABggAAAWZQAAEyAEAAVwAAAOcAAADnAAAAggAAAAAAAAAAY42gAGOOYAB1VaAAf/8wAI44AACY5AAAnHDQAKVV0ACqqaAAqqswALjiYAC8cmAAxxswAMqrYADOOaAA4ADQAOjkYADxxaAA8cgAAP/+YAEDjzABFVZgATjk0AFcczACeOZgAwcgAAAAAAAAZXrQAG440ACDymAAidpgAJnVoACpaqAAsFsAALglYADAAAAAzzqgANRG0ADfFdAA5wNgAO7uYAES9aAAAAAP/+V60AADymAACdpgABnVoAApaqAAMccwADglYABAAAAATzqgAFVaAABdoAAAYIugAGeg0ABu7mAAkvWgAAAAAAAOOQAAQAAAAEzNAAAmZgAAGZoAAHaEAAEAAAAAGZoAAOzcoABjMNAAgQ7QAQZ2MACIKzAAgOkAAGdPYABLYNAAMzMwAGZmYAB+lAAAGZmgAfrhMAFrhTAAQAAA==","msbm6":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAWTxoEKwBgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADyFcwAABXMAAAV7gAAFe4AABWpAAAVqQAAFakAABWpAAAVzAAAFcwAABXuAAAV7gAAFYcAABWHAAAV7gAAFe4AABWqAAAVuwAAFaoAABW7AAAV/wAAFf8AABXMAAAVzAAAFcwAABXMAAAVzAAAFcwAABURAAAV7gAAF3cAABeXAAAVhwAAFYcAABXMAAAVzAAAFd0AABXdAAAVzAAAFcwAABWHAAAVhwAAFe4AABXuAAAKmAAAApgAAAFlAAAFZQAAD3AAABNwAAAPcAAAE3AAABXuAAAV7gAAFakAABWpAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAVZQAAFWUAAA1wAAAOcAAAC3AAAA5wAAAOcAAAC3AAAAlwAAAQcAAAEHAAAANwAAAEdgAAEHAAAAtwAAAUcAAADnAAABB2AAAJcAAAEHYAAA5wAAAGcAAAC3AAAA5wAAAOcAAAFnAAAA5wAAAOcAAAC3AAABmwAlwasAAAGbACXhrgAAAAAAAADXAAABFwAAAAAAAAAAAAAAAAAAAAAAAAE3AAAA1wAAAVMgAAEnAAAAhwAAAScAAAFVQAABVUAAAVZQAAFWUAAAFlAAAFZQAAFWUAABURAAAVQwAAFWUAABXMAAAVzAAAGCAAABggAAAVZQAAEiAEAAZwAAAMcAAADHAAAAcgAAAAAAAAAAUJewAGEvUABjjdAAf/+AAIJesACOOFAAjjjQAJL2UACccTAAo44AAKqqAACwl4AAtCWwALji0ADEvVAAxxuwAM0JMADVVQAA5eywAPHGMAD2hFAA//8AARezsAE44wACQl2wAscbAAAAAAAAY9KAAG440ACBCAAAht+AAJaGUACj0YAAsFsAALO70ADAAAAAyc+wANGvgADY8wAA4THQAOZeAAEJVVAAAAAP/+PSgAABCAAABt+AABaGUAAj0YAAKqqAADLBUABAAAAASE1QAEtSMABQK7AAWPMAAGEx0ABmXgAAiVVQAAAAAAANCYAAQAAAAEzNAAAmZgAAGZoAAHaEUAEAAAAAGZoAANANAABkb9AAfCQAAN0WUABt6tAAgMKAAGttMABJe1AAKqqwAFVVUABpewAAFVVQAfu7sAFZmbAAQAAA==","msbm7":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAWcXnAgQBwAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADwFLsAABS7AAAU3gAAFN4AABSIAAAUiAAAFIgAABSIAAAUuwAAFLsAABTeAAAU3gAAFHcAABR3AAAU3gAAFN4AABSZAAAUqgAAFJkAABSqAAAU/wAAFP8AABS7AAAUuwAAFLwAABS8AAAUvAAAFLwAABQRAAAU3gAAF3cAABeHAAAUdwAAFHcAABS7AAAUuwAAFM0AABTNAAAUuwAAFLsAABR3AAAUdwAAFN4AABTeAAAJiAAAAogAAAFlAAAEZQAADnAAABNwAAAOcAAAE3AAABTeAAAU3gAAFIgAABSIAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAUZQAAFGUAAAxwAAAPcAAADXAAAA9wAAAPcAAADXAAAApwAAAScAAAEnAAAANwAAAFdgAAEnAAAA1wAAAVcAAAD3AAABJ2AAAKcAAAEnYAAA9wAAAIcAAADXAAAA9wAAAPcAAAFnAAAA9wAAAPcAAADXAAABmwAlwasAAAGbACXhrgAAAAAAAADHAAABBwAAAAAAAAAAAAAAAAAAAAAAAAE3AAAAxwAAAUMgAAEXAAAAdwAAARcAAAFFQAABRUAAAUZQAAFGUAAAFlAAAEZQAAFGUAABQRAAAUQwAAFGUAABS8AAAUvAAAGCAAABggAAAUZQAAESAEAAhwAAALcAAAC3AAAAYgAAAAAAAAAARxyQAFbbkABjjgAAdlmQAH//sACBx1AAhhiQAI44kACV15AAnHFwAKIIcACllpAAqqpQALVVkAC44yAAvTUAAMUUkADHHAAA1NOQAOSSkADxxpAA//9wAQQQkAEjjpACH36QAp12kAAAAAAAYlMAAG444AB+blAAhA1QAJNfcACfUVAAsFsAAMFOIADHWnAAyv2QANMhkADbFFAA3zqQAOZmUAEBCrAAAAAP/+JTD//+blAABA1QABNfcAAfUVAAKqqQADChAABBTiAAR1pwAEr9kABRzbAAVHWQAFsUUABfOpAAgQqwAAAAAAAMMOAAQAAAAEzNAAAmZgAAGZoAAHaEcAEAAAAAGZoAALt44ABiR3AAeKDgAMCM4ABYHnAAgKawAG5dkABJJJAAJJJQAEkkkABaaXAAEkkgAbMzIAEoOpAAQAAA==","msbm8":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAWcMpwzACAAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADuFLsAABS7AAAU3gAAFN4AABSYAAAUmAAAFJgAABSYAAAUuwAAFLsAABTeAAAU3gAAFHYAABR2AAAU3gAAFN4AABSqAAAUqgAAFKoAABSqAAAU/wAAFP8AABS7AAAUuwAAFLwAABS8AAAUvAAAFLwAABQRAAAU3gAAFocAABaXAAAUdgAAFHYAABS7AAAUuwAAFM0AABTNAAAUuwAAFLsAABR2AAAUdgAAFN4AABTeAAAImQAAApkAAAFlAAAEZQAADYAAABKAAAANgAAAEoAAABTeAAAU3gAAFJgAABSYAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAUZQAAFGUAAAuAAAARgAAADoAAABGAAAARgAAADoAAAAyAAAATgAAAE4AAAAOAAAAHhgAAE4AAAA6AAAAVgAAAEYAAABOGAAAMgAAAE4YAABGAAAAJgAAADoAAABGAAAARgAAAF4AAABGAAAARgAAADoAAABnAAlwawAAAGcACXhrgAAAAAAAAC4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAEoAAAAuAAAAUMgAAEIAAAAaAAAAQgAAAFFQAABRUAAAUZQAAFGUAAAFlAAAEZQAAFGUAABQRAAAUQwAAFGUAABS8AAAUvAAAGCAAABggAAAUZQAAECAEAAmAAAAKgAAACoAAAAUgAAAAAAAAAAPHIAAEuOgABjjiAAaceAAHTkAAB45AAAf//gAIgAgACOOMAAk47AAJcdAACccaAApjmAAKqqgACtx8AAtVYAALjjYADEcoAAxxxAANOPAADxxuAA8cgAAP//wAEQAQACAckAAnqtAAAAAAAAYMPAAG444AB7xOAAgStgAJApAACba8AAqyogALBbAAC+v0AAxJjgAM0wwADUBUAA2L0AAOZmQAD5Q0AAAAAP/+DDz//7xOAAAStgABApAAAba8AAKupgADHHAAA9foAAQAAAAESY4ABL7cAATnPAAFTXIABYvQAAeUNAAAAAAAALjkAAQAAAAEzNAAAmZgAAGZoAAHaEoAEAAAAAGZoAALJCwABoqUAAdRsAAL/FoABkZQAAaljAAFpYwABI44AAIAAAAEAAAABlVWAAEAAAAXzMwAEjM0AAQAAA==","msbm9":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAWqgC1YQCQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADsFLsAABS7AAAU3gAAFN4AABSZAAAUmQAAFJkAABSZAAAUuwAAFLsAABTeAAAU3gAAFHYAABR2AAAU3gAAFN4AABSqAAAUqgAAFKoAABSqAAAU/wAAFP8AABS7AAAUuwAAFLwAABS8AAAUvAAAFLwAABQRAAAU3gAAFYgAABWoAAAUdgAAFHYAABS7AAAUuwAAFM0AABTNAAAUuwAAFLsAABR2AAAUdgAAFN4AABTeAAAIqgAAAqoAAAFlAAAEZQAADYAAABKAAAANgAAAEoAAABTeAAAU3gAAFJkAABSZAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAUZQAAFGUAAAuAAAARgAAAD4AAABGAAAARgAAAD4AAAAyAAAATgAAAE4AAAAOAAAAHhwAAE4AAAA+AAAAWgAAAEYAAABOHAAAMgAAAE4cAABGAAAAJgAAAD4AAABGAAAARgAAAF4AAABGAAAARgAAAD4AAABnQAlwa0AAAGdACXhrgAAAAAAAAC4AAAA6AAAAAAAAAAAAAAAAAAAAAAAAAEoAAAAuAAAAUMgAAEIAAAAaAAAAQgAAAFFQAABRUAAAUZQAAFGUAAAFlAAAEZQAAFGUAABQRAAAUQwAAFGUAABS8AAAUvAAAGCAAABggAAAUZQAAECAEAAmAAAAKgAAACoAAAAUgAAAAAAAAAAOngAAEkWAABjjkAAZlIAAHD8sAB08AAAgAAAAIOOAACOOOAAjmtAAJIsAACcccAAoMoAAKgZAACqqrAAr2gAALjjkAC+BgAAxxxwAMykAADp4AAA8ccgAQAAAAEHHAAB8PwAAmXsAAAAAAAAX06QAG444AB5NXAAfmOQAI0MkACX/0AApvNwALBbAAC45pAAwAXAAMd0AADOzkAA0wBwAOZmQADyHAAAAAAP/99On//5NX///mOQAA0MkAAX/0AAJvNwACqqsAAxxyAAOOaQAEAFwABGQgAASKYAAE7OQABS5LAAchwAAAAAAAAK3UAAQAAAAEzNAAAmZgAAGZoAAHaEwAEAAAAAGZoAAKWQsABo4kAAcyfAAK2gAABW3rAAevlQAGzAcABJe0AAHHHAAC0J4ABaE0AADjjgAqfScAEC2EAAQAAA=="};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/tfm/index.js":
|
|
/*!************************************!*\
|
|
!*** ../dvi2html/lib/tfm/index.js ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* WEBPACK VAR INJECTION */(function(Buffer) { // PyDvi - A Python Library to Process DVI Stream
|
|
// Copyright (C) 2014 Fabrice Salvaire
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
var __read = this && this.__read || function (o, n) {
|
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
if (!m) return o;
|
|
var i = m.call(o),
|
|
r,
|
|
ar = [],
|
|
e;
|
|
|
|
try {
|
|
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
} catch (error) {
|
|
e = {
|
|
error: error
|
|
};
|
|
} finally {
|
|
try {
|
|
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
} finally {
|
|
if (e) throw e.error;
|
|
}
|
|
}
|
|
|
|
return ar;
|
|
};
|
|
|
|
var __spread = this && this.__spread || function () {
|
|
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
|
|
return ar;
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var Tfm = __webpack_require__(/*! ./tfm */ "../dvi2html/lib/tfm/tfm.js");
|
|
|
|
var fontdata = __webpack_require__(/*! ./fonts.json */ "../dvi2html/lib/tfm/fonts.json");
|
|
|
|
var NO_TAG = 0;
|
|
var LIG_TAG = 1;
|
|
var LIST_TAG = 2;
|
|
var EXT_TAG = 3;
|
|
var KERN_OPCODE = 128; // Defines the tables present in a TFM file.
|
|
|
|
var tables = {
|
|
header: 0,
|
|
character_info: 1,
|
|
width: 2,
|
|
height: 3,
|
|
depth: 4,
|
|
italic_correction: 5,
|
|
lig_kern: 6,
|
|
kern: 7,
|
|
extensible_character: 8,
|
|
font_parameter: 9
|
|
};
|
|
/*** Compute the pointer to the word element index *index* from the base *base*. A word
|
|
element has a size of 32-bit.
|
|
|
|
``prt = base + 4*index``
|
|
***/
|
|
|
|
function word_ptr(base, index) {
|
|
return base + 4 * index;
|
|
}
|
|
|
|
var TFMParser =
|
|
/** @class */
|
|
function () {
|
|
function TFMParser(buffer) {
|
|
this.position = 0;
|
|
this.stream = buffer;
|
|
this.read_lengths();
|
|
this.read_header();
|
|
this.read_font_parameters();
|
|
this.read_lig_kern_programs();
|
|
this.read_characters();
|
|
}
|
|
|
|
TFMParser.prototype.seek = function (position) {
|
|
this.position = position;
|
|
};
|
|
|
|
TFMParser.prototype.read_unsigned_byte1 = function (p) {
|
|
if (p) this.position = p;
|
|
var result = this.stream.readUInt8(this.position);
|
|
this.position = this.position + 1;
|
|
return result;
|
|
};
|
|
|
|
TFMParser.prototype.read_unsigned_byte2 = function (p) {
|
|
if (p) this.position = p;
|
|
var result = this.stream.readUInt16BE(this.position);
|
|
this.position = this.position + 2;
|
|
return result;
|
|
};
|
|
|
|
TFMParser.prototype.read_unsigned_byte4 = function (p) {
|
|
if (p) this.position = p;
|
|
var result = this.stream.readUInt32BE(this.position);
|
|
this.position = this.position + 4;
|
|
return result;
|
|
};
|
|
|
|
TFMParser.prototype.read_four_byte_numbers_in_table = function (table, index) {
|
|
/*** Return the four numbers in table *table* at index *index*.
|
|
***/
|
|
this.seek(this.position_in_table(table, index));
|
|
return [this.read_unsigned_byte1(), this.read_unsigned_byte1(), this.read_unsigned_byte1(), this.read_unsigned_byte1()];
|
|
};
|
|
|
|
TFMParser.prototype.read_extensible_recipe = function (index) {
|
|
/*** Return the extensible recipe, four numbers, at index *index*.
|
|
Extensible characters are specified by an extensible recipe, which consists of four bytes
|
|
called top, mid, bot, and rep (in this order). These bytes are the character codes of
|
|
individual pieces used to build up a large symbol. If top, mid, or bot are zero, they are
|
|
not present in the built-up result. For example, an extensible vertical line is like an
|
|
extensible bracket, except that the top and bottom pieces are missing.
|
|
***/
|
|
return this.read_four_byte_numbers_in_table(tables.extensible_character, index);
|
|
}; // BADBAD
|
|
|
|
|
|
TFMParser.prototype.read_fix_word = function (p) {
|
|
if (p) this.position = p;
|
|
var result = this.stream.readUInt32BE(this.position);
|
|
this.position = this.position + 4;
|
|
return result;
|
|
};
|
|
|
|
TFMParser.prototype.read_fix_word_in_table = function (table, position) {
|
|
return this.read_fix_word(this.position_in_table(table, position));
|
|
}; // BADBAD
|
|
|
|
|
|
TFMParser.prototype.read_bcpl = function (position) {
|
|
if (position) this.position = position;
|
|
var length = this.read_unsigned_byte1();
|
|
var result = this.stream.slice(this.position, this.position + length).toString('ascii');
|
|
this.position += length;
|
|
return result;
|
|
};
|
|
|
|
TFMParser.prototype.seek_to_table = function (table, position) {
|
|
if (position) this.seek(this.position_in_table(table, position));else this.seek(this.table_pointers[table]);
|
|
};
|
|
|
|
TFMParser.prototype.position_in_table = function (table, index) {
|
|
return word_ptr(this.table_pointers[table], index);
|
|
};
|
|
/* The fist 24 bytes (6 words) of a TFM file contain twelve 16-bit
|
|
integers that give the lengths of the various subsequent
|
|
portions of the file. These twelve integers are, in order:
|
|
|
|
* lf = length of the entire file, in words;
|
|
* lh = length of the header data, in words;
|
|
* bc = smallest character code in the font;
|
|
* ec = largest character code in the font;
|
|
* nw = number of words in the width table;
|
|
* nh = number of words in the height table;
|
|
* nd = number of words in the depth table;
|
|
* ni = number of words in the italic correction table;
|
|
* nl = number of words in the lig/kern table;
|
|
* nk = number of words in the kern table;
|
|
* ne = number of words in the extensible character table;
|
|
* np = number of font parameter words.
|
|
|
|
They are all nonnegative and less than 2**15. We must have
|
|
``bc - 1 <= ec <= 255``, ``ne <= 256``, and
|
|
|
|
``lf = 6 + lh + (ec - bc + 1) + nw + nh + nd + ni + nl + nk + ne + np``.
|
|
Note that a font may contain as many as 256 characters (if ``bc = 0`` and ``ec = 255``), and
|
|
as few as 0 characters (if ``bc = ec + 1``).
|
|
|
|
The rest of the TFM file may be regarded as a sequence of ten data arrays having the
|
|
informal specification:
|
|
========== ===================== ====================
|
|
header array [0 ... lh - 1] of stuff
|
|
char info array [bc ... ec ] of char info word
|
|
width array [0 ... nw - 1] of fix word
|
|
height array [0 ... nh - 1] of fix word
|
|
depth array [0 ... nd - 1] of fix word
|
|
italic array [0 ... ni - 1] of fix word
|
|
lig kern array [0 ... nl - 1] of lig kern command
|
|
kern array [0 ... nk - 1] of fix word
|
|
exten array [0 ... ne - 1] of extensible recipe
|
|
param array [1 ... np ] of fix word
|
|
========== ===================== ====================
|
|
***/
|
|
|
|
|
|
TFMParser.prototype.read_lengths = function () {
|
|
//////////////////////
|
|
// Read and set table lengths
|
|
this.table_lengths = [];
|
|
this.seek(0);
|
|
this.entire_file_length = this.read_unsigned_byte2();
|
|
var header_length = this.read_unsigned_byte2();
|
|
this.smallest_character_code = this.read_unsigned_byte2();
|
|
this.largest_character_code = this.read_unsigned_byte2();
|
|
var header_data_length_min = 18;
|
|
this.table_lengths[tables.header] = Math.max(header_data_length_min, header_length);
|
|
this.number_of_chars = this.largest_character_code - this.smallest_character_code + 1;
|
|
this.table_lengths[tables.character_info] = this.number_of_chars; // read the last lengths
|
|
|
|
for (var i = tables.width; i <= tables.font_parameter; i++) {
|
|
this.table_lengths[i] = this.read_unsigned_byte2();
|
|
} //////////////////////
|
|
// Compute table pointers
|
|
|
|
|
|
this.table_pointers = []; // The header starts at 24 bytes
|
|
|
|
this.table_pointers[tables.header] = 24;
|
|
|
|
for (var table = tables.header; table < tables.font_parameter; table++) {
|
|
this.table_pointers[table + 1] = this.position_in_table(table, this.table_lengths[table]);
|
|
} //////////////////////
|
|
// Sanity check
|
|
|
|
|
|
var length = this.position_in_table(tables.font_parameter, this.table_lengths[tables.font_parameter]);
|
|
|
|
if (length != word_ptr(0, this.entire_file_length)) {
|
|
throw Error('Bad TFM file');
|
|
}
|
|
|
|
return;
|
|
};
|
|
/*** The first data array is a block of header information, which contains general facts
|
|
about the font. The header must contain at least two words, and for TFM files to be used
|
|
with Xerox printing software it must contain at least 18 words, allocated as described
|
|
below.
|
|
``header[0]`` is a 32-bit check sum that TEX will copy into
|
|
the DVI output file whenever it uses the font. Later on when
|
|
the DVI file is printed, possibly on another computer, the
|
|
actual font that gets used is supposed to have a check sum
|
|
that agrees with the one in the TFM file used by TEX. In this
|
|
way, users will be warned about potential incompatibilities.
|
|
(However, if the check sum is zero in either the font file or
|
|
the TFM file, no check is made.) The actual relation between
|
|
this check sum and the rest of the TFM file is not important;
|
|
the check sum is simply an identification number with the
|
|
property that incompatible fonts almost always have distinct
|
|
check sums.
|
|
``header[1]`` is a fix word containing the design size of the font, in units of TEX points
|
|
(7227 TEX points = 254 cm). This number must be at least 1.0; it is fairly arbitrary, but
|
|
usually the design size is 10.0 for a "10 point" font, i.e., a font that was designed to
|
|
look best at a 10-point size, whatever that really means. When a TEX user asks for a font
|
|
"at delta pt", the effect is to override the design size and replace it by delta, and to
|
|
multiply the x and y coordinates of the points in the font image by a factor of delta
|
|
divided by the design size. All other dimensions in the TFM file are fix word numbers in
|
|
design-size units. Thus, for example, the value of ``param[6]``, one em or ``\quad``, is
|
|
often the fix word value ``2**20 = 1.0``, since many fonts have a design size equal to one
|
|
em. The other dimensions must be less than 16 design-size units in absolute value; thus,
|
|
``header[1]`` and ``param[1]`` are the only fix word entries in the whole TFM file whose
|
|
first byte might be something besides 0 or 255.
|
|
|
|
``header[2 ... 11]``, if present, contains 40 bytes that identify the character coding
|
|
scheme. The first byte, which must be between 0 and 39, is the number of subsequent ASCII
|
|
bytes actually relevant in this string, which is intended to specify what
|
|
character-code-to-symbol convention is present in the font. Examples are ASCII for standard
|
|
ASCII, TeX text for fonts like cmr10 and cmti9, TeX math extension for cmex10, XEROX text
|
|
for Xerox fonts, GRAPHIC for special-purpose non- alphabetic fonts, UNSPECIFIED for the
|
|
default case when there is no information. Parentheses should not appear in this name.
|
|
(Such a string is said to be in BCPL format.)
|
|
``header[12 ... 16]``, if present, contains 20 bytes that name the font family (e.g., CMR or
|
|
HELVETICA), in BCPL format. This field is also known as the "font identifier."
|
|
``header[17]``, if present, contains a first byte called the ``seven_bit_safe_flag``, then
|
|
two bytes that are ignored, and a fourth byte called the *face*. If the value of the fourth
|
|
byte is less than 18, it has the following interpretation as a "weight, slope, and
|
|
expansion": Add 0 or 2 or 4 (for medium or bold or light) to 0 or 1 (for roman or italic) to
|
|
0 or 6 or 12 (for regular or condensed or extended). For example, 13 is ``0+1+12``, so it
|
|
represents medium italic extended. A three-letter code (e.g., MIE) can be used for such
|
|
face data.
|
|
``header[18 ... whatever]`` might also be present; the individual words are simply called
|
|
``header[18]``, ``header[19]``, etc., at the moment.
|
|
***/
|
|
|
|
|
|
TFMParser.prototype.read_header = function () {
|
|
this.seek_to_table(tables.header); // Read header[0 ... 1]
|
|
|
|
var checksum = this.read_unsigned_byte4();
|
|
var designSize = this.read_fix_word(); // Read header[2 ... 11] if there
|
|
|
|
var character_info_table_position = this.table_pointers[tables.character_info];
|
|
var position = this.position;
|
|
var character_coding_scheme;
|
|
if (position < character_info_table_position) character_coding_scheme = this.read_bcpl(); // Read header[12 ... 16] if there
|
|
|
|
var character_coding_scheme_length = 40; // bytes (11 - 2 + 1) * 4 = 10 * 4
|
|
|
|
position += character_coding_scheme_length;
|
|
var family;
|
|
if (position < character_info_table_position) family = this.read_bcpl(position); // Read header[12 ... 16] if there
|
|
|
|
var family_length = 20; // bytes (16 - 12 +1) * 4 = 5 * 4
|
|
|
|
position += family_length;
|
|
|
|
if (position < character_info_table_position) {
|
|
var seven_bit_safe_flag = this.read_unsigned_byte1(position);
|
|
this.read_unsigned_byte2();
|
|
var face = this.read_unsigned_byte1();
|
|
} // Fixme: complete
|
|
// don't read header [18 ... whatever]
|
|
|
|
|
|
this.tfm = new Tfm.Tfm(this.smallest_character_code, this.largest_character_code, checksum, designSize, character_coding_scheme, family);
|
|
};
|
|
/*** The final portion of a TFM fie is the param array, which is another sequence of fix word
|
|
values.
|
|
* param[1] = ``slant`` is the amount of italic slant, which is used to help position
|
|
accents. For example, slant = .25 means that when you go up one unit, you also go .25
|
|
units to the right. The slant is a pure number; it's the only fix word other than the
|
|
design size itself that is not scaled by the design size.
|
|
* param[2] = ``space`` is the normal spacing between words in text. Note that character " "
|
|
in the font need not have anything to do with blank spaces.
|
|
* param[3] = ``space_stretch`` is the amount of glue stretching between words.
|
|
* param[4] = ``space_shrink`` is the amount of glue shrinking between words.
|
|
* param[5] = ``x_height`` is the height of letters for which accents don't have to be
|
|
raised or lowered.
|
|
* param[6] = ``quad`` is the size of one em in the font.
|
|
* param[7] = ``extra_space`` is the amount added to param[2] at the ends of sentences.
|
|
When the character coding scheme is ``TeX math symbols``, the font is supposed to have 15
|
|
additional parameters called ``num1``, ``num2``, ``num3``, ``denom1``, ``denom2``, ``sup1``,
|
|
``sup2``, ``sup3``, ``sub1``, ``sub2``, ``supdrop``, ``subdrop``, ``delim1``, ``delim2``,
|
|
and ``axis_height``, respectively. When the character coding scheme is ``TeX math
|
|
extension``, the font is supposed to have six additional parameters called
|
|
``defaul_rule_thickness`` and ``big_op_spacing1`` through ``big_op_spacing5``.
|
|
***/
|
|
|
|
|
|
TFMParser.prototype.read_font_parameters = function () {
|
|
this.seek_to_table(tables.font_parameter);
|
|
var stream = this;
|
|
|
|
if (this.tfm.character_coding_scheme == 'TeX math italic') {// undocumented in tftopl web
|
|
//throw 'undocumented character coding scheme';
|
|
} else {
|
|
// Read the seven fix word parameters
|
|
this.tfm.set_font_parameters(__spread(Array(7).keys()).map(function () {
|
|
return stream.read_fix_word();
|
|
}));
|
|
}
|
|
|
|
if (this.tfm.character_coding_scheme == 'TeX math symbols') {
|
|
// Read the additional 15 fix word parameters
|
|
this.tfm.set_math_symbols_parameters(__spread(Array(15).keys()).map(function () {
|
|
return stream.read_fix_word();
|
|
}));
|
|
}
|
|
|
|
if (this.tfm.character_coding_scheme == 'TeX math extension' || this.tfm.character_coding_scheme == 'euler substitutions only') {
|
|
// Read the additional 6 fix word parameters
|
|
this.tfm.set_math_extension_parameters(__spread(Array(6).keys()).map(function () {
|
|
return stream.read_fix_word();
|
|
}));
|
|
}
|
|
};
|
|
/*** The lig kern array contains instructions in a simple programming language that explains
|
|
what to do for special letter pairs. Each word is a lig kern command of four bytes.
|
|
* first byte: ``skip_byte``, indicates that this is the final program step if the byte is
|
|
128 or more, otherwise the next step is obtained by skipping this number of intervening
|
|
steps.
|
|
* second byte: ``next_char``, "if ``next_char`` follows the current character, then perform
|
|
the operation and stop, otherwise continue."
|
|
* third byte: ``op_byte``, indicates a ligature step if less than 128, a kern step otherwise.
|
|
* fourth byte: ``remainder``.
|
|
In a kern step, an additional space equal to ``kern[256 * (op_byte + 128) + remainder]`` is
|
|
inserted between the current character and next char. This amount is often negative, so
|
|
that the characters are brought closer together by kerning; but it might be positive.
|
|
There are eight kinds of ligature steps, having ``op_byte`` codes ``4a+2b+c`` where ``0 <= a
|
|
<= b+c`` and ``0 <= b; c <= 1``. The character whose code is remainder is inserted between
|
|
the current character and next char; then the current character is deleted if ``b = 0``, and
|
|
next char is deleted if ``c = 0``; then we pass over a characters to reach the next current
|
|
character (which may have a ligature/kerning program of its own).
|
|
|
|
Notice that if ``a = 0`` and ``b = 1``, the current character is unchanged; if ``a = b`` and
|
|
``c = 1``, the current character is changed but the next character is unchanged.
|
|
If the very first instruction of the lig kern array has ``skip_byte = 255``, the
|
|
``next_char`` byte is the so-called right boundary character of this font; the value of
|
|
``next_char`` need not lie between ``bc`` and ``ec``. If the very last instruction of the
|
|
lig kern array has ``skip_byte = 255``, there is a special ligature/kerning program for a
|
|
left boundary character, beginning at location ``256 * op_byte + remainder``. The
|
|
interpretation is that TEX puts implicit boundary characters before and after each
|
|
consecutive string of characters from the same font. These implicit characters do not
|
|
appear in the output, but they can affect ligatures and kerning.
|
|
If the very first instruction of a character's ``lig_kern`` program has ``skip_byte > 128``,
|
|
the program actually begins in location ``256 * op_byte + remainder``. This feature allows
|
|
access to large lig kern arrays, because the first instruction must otherwise appear in a
|
|
location ``<= 255``.
|
|
Any instruction with ``skip_byte > 128`` in the lig kern array must have ``256 * op_byte +
|
|
remainder < nl``. If such an instruction is encountered during normal program execution, it
|
|
denotes an unconditional halt; no ligature command is performed.
|
|
***/
|
|
|
|
|
|
TFMParser.prototype.read_lig_kern_programs = function () {
|
|
// Fixme: complete special cases
|
|
this.seek_to_table(tables.lig_kern); // Read very first instruction of the table
|
|
|
|
var first_skip_byte = this.read_unsigned_byte1();
|
|
var next_char = this.read_unsigned_byte1();
|
|
var op_byte = this.read_unsigned_byte1();
|
|
var remainder = this.read_unsigned_byte1();
|
|
|
|
if (first_skip_byte == 255) {
|
|
var right_boundary_char = next_char;
|
|
throw Error('Font has right boundary char');
|
|
}
|
|
|
|
this.seek_to_table(tables.lig_kern, this.table_lengths[tables.lig_kern] - 1);
|
|
var last_skip_byte = this.read_unsigned_byte1();
|
|
next_char = this.read_unsigned_byte1();
|
|
op_byte = this.read_unsigned_byte1();
|
|
remainder = this.read_unsigned_byte1();
|
|
|
|
if (last_skip_byte == 255) {
|
|
var left_boundary_char_program_index = 256 * op_byte + remainder;
|
|
throw Error('Font has left boundary char program');
|
|
} // Read the instructions
|
|
|
|
|
|
var first_instruction = true;
|
|
|
|
for (var i = 0; i < this.table_lengths[tables.lig_kern]; i++) {
|
|
this.seek_to_table(tables.lig_kern, i);
|
|
var skip_byte = this.read_unsigned_byte1();
|
|
next_char = this.read_unsigned_byte1();
|
|
op_byte = this.read_unsigned_byte1();
|
|
remainder = this.read_unsigned_byte1(); // Large lig/kern table ?
|
|
|
|
if (first_instruction && skip_byte > 128) {
|
|
var large_index = 256 * op_byte + remainder;
|
|
skip_byte = this.read_unsigned_byte1();
|
|
next_char = this.read_unsigned_byte1();
|
|
op_byte = this.read_unsigned_byte1();
|
|
remainder = this.read_unsigned_byte1();
|
|
} // Last step ?
|
|
|
|
|
|
var stop = skip_byte >= 128;
|
|
|
|
if (op_byte >= KERN_OPCODE) {
|
|
// Kern step
|
|
var kern_index = 256 * (op_byte - KERN_OPCODE) + remainder;
|
|
var kern = this.read_fix_word_in_table(tables.kern, kern_index); // Fixme: self registration ?
|
|
|
|
new Tfm.TfmKern(this.tfm, i, stop, next_char, kern);
|
|
} else {
|
|
// Ligature step
|
|
var number_of_chars_to_pass_over = op_byte >> 2;
|
|
var current_char_is_deleted = (op_byte & 0x02) == 0;
|
|
var next_char_is_deleted = (op_byte & 0x01) == 0;
|
|
var ligature_char_code = remainder; // Fixme: self registration ?
|
|
|
|
new Tfm.TfmLigature(this.tfm, i, stop, next_char, ligature_char_code, number_of_chars_to_pass_over, current_char_is_deleted, next_char_is_deleted);
|
|
}
|
|
|
|
first_instruction = stop == true;
|
|
}
|
|
};
|
|
/*** Next comes the char info array, which contains one char info word per character. Each
|
|
char info word contains six fields packed into four bytes as follows.
|
|
* first byte: ``width_index`` (8 bits)
|
|
* second byte: ``height_index`` (4 bits) times 16, plus depth index (4 bits)
|
|
* third byte: ``italic_index`` (6 bits) times 4, plus tag (2 bits)
|
|
* fourth byte: ``remainder`` (8 bits)
|
|
The actual width of a character is ``width[width_index]``, in design-size units; this is a
|
|
device for compressing information, since many characters have the same width. Since it is
|
|
quite common for many characters to have the same height, depth, or italic correction, the
|
|
TFM format imposes a limit of 16 different heights, 16 different depths, and 64 different
|
|
italic corrections.
|
|
Incidentally, the relation ``width[0] = height[0] = depth[0] = italic[0] = 0`` should
|
|
always hold, so that an index of zero implies a value of zero. The width index should never
|
|
be zero unless the character does not exist in the font, since a character is valid if and
|
|
only if it lies between ``bc`` and ``ec`` and has a nonzero width index.
|
|
The tag field in a char info word has four values that explain how to interpret the remainder field.
|
|
* ``tag = 0`` (``no_tag``) means that remainder is unused.
|
|
* ``tag = 1`` (``lig_tag``) means that this character has a ligature/kerning program
|
|
starting at ``lig_kern[remainder]``.
|
|
* ``tag = 2`` (``list_tag``) means that this character is part of a chain of characters of
|
|
ascending sizes, and not the largest in the chain. The remainder field gives the
|
|
character code of the next larger character.
|
|
* ``tag = 3`` (``ext_tag``) means that this character code represents an extensible
|
|
character, i.e., a character that is built up of smaller pieces so that it can be made
|
|
arbitrarily large. The pieces are specified in ``exten[remainder]``.
|
|
* ``no_tag = 0`` vanilla character
|
|
* ``lig_tag = 1`` character has a ligature/kerning program
|
|
* ``list_tag = 2`` character has a successor in a charlist
|
|
* ``ext_tag = 3`` character is extensible
|
|
***/
|
|
|
|
|
|
TFMParser.prototype.read_characters = function () {
|
|
// Read the character information table
|
|
for (var c = this.smallest_character_code; c < this.largest_character_code; c++) {
|
|
this.process_char(c);
|
|
}
|
|
};
|
|
|
|
TFMParser.prototype.process_char = function (c) {
|
|
/*** Process the character code *c* in the character information table.
|
|
***/
|
|
var info = this.read_char_info(c);
|
|
var width_index = info.width_index;
|
|
var height_index = info.height_index;
|
|
var depth_index = info.depth_index;
|
|
var italic_index = info.italic_index;
|
|
var tag = info.tag;
|
|
var remainder = info.remainder; // Get the parameters in the corresponding tables
|
|
|
|
var width = 0;
|
|
if (width_index != 0) width = this.read_fix_word_in_table(tables.width, width_index); // warning: euex10 has zero width characters
|
|
|
|
var height = 0;
|
|
if (height_index != 0) height = this.read_fix_word_in_table(tables.height, height_index);
|
|
var depth = 0;
|
|
if (depth_index != 0) depth = this.read_fix_word_in_table(tables.depth, depth_index);
|
|
var italic_correction = 0;
|
|
if (italic_index != 0) italic_correction = this.read_fix_word_in_table(tables.italic_correction, italic_index); // Interpret the tag field
|
|
|
|
var lig_kern_program_index;
|
|
var next_larger_char;
|
|
var extensible_recipe;
|
|
if (tag == LIG_TAG) lig_kern_program_index = remainder;
|
|
if (tag == LIST_TAG) next_larger_char = remainder;
|
|
if (tag == EXT_TAG) extensible_recipe = this.read_extensible_recipe(remainder);
|
|
|
|
if (extensible_recipe !== undefined) {
|
|
// Fixme: self registration ?
|
|
new Tfm.TfmExtensibleChar(this.tfm, c, width, height, depth, italic_correction, extensible_recipe, lig_kern_program_index, next_larger_char);
|
|
} else {
|
|
// Fixme: self registration ?
|
|
new Tfm.TfmChar(this.tfm, c, width, height, depth, italic_correction, lig_kern_program_index, next_larger_char);
|
|
}
|
|
};
|
|
|
|
TFMParser.prototype.read_char_info = function (c) {
|
|
/*** Read the character code *c* data in the character information table.
|
|
***/
|
|
var index = c - this.smallest_character_code;
|
|
var bytes = [];
|
|
this.seek_to_table(tables.character_info, index);
|
|
bytes[0] = this.read_unsigned_byte1();
|
|
bytes[1] = this.read_unsigned_byte1();
|
|
bytes[2] = this.read_unsigned_byte1();
|
|
bytes[3] = this.read_unsigned_byte1();
|
|
return {
|
|
width_index: bytes[0],
|
|
height_index: bytes[1] >> 4,
|
|
depth_index: bytes[1] & 0xF,
|
|
italic_index: bytes[2] >> 6,
|
|
tag: bytes[2] & 0x3,
|
|
remainder: bytes[3]
|
|
};
|
|
};
|
|
|
|
return TFMParser;
|
|
}();
|
|
|
|
function parse(buffer) {
|
|
var p = new TFMParser(buffer);
|
|
return p.tfm;
|
|
}
|
|
|
|
function tfmData(fontname) {
|
|
if (fontdata[fontname]) {
|
|
var buffer = Buffer.from(fontdata[fontname], 'base64');
|
|
return buffer;
|
|
}
|
|
|
|
throw Error("Could not find font " + fontname);
|
|
}
|
|
|
|
exports.tfmData = tfmData;
|
|
|
|
function loadFont(fontname) {
|
|
return parse(tfmData(fontname));
|
|
}
|
|
|
|
exports.loadFont = loadFont;
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../tikzjax/node_modules/buffer/index.js */ "./node_modules/buffer/index.js").Buffer))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../dvi2html/lib/tfm/tfm.js":
|
|
/*!**********************************!*\
|
|
!*** ../dvi2html/lib/tfm/tfm.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// PyDvi - A Python Library to Process DVI Stream
|
|
// Copyright (C) 2014 Fabrice Salvaire
|
|
//;
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
var __extends = this && this.__extends || function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf || {
|
|
__proto__: []
|
|
} instanceof Array && function (d, b) {
|
|
d.__proto__ = b;
|
|
} || function (d, b) {
|
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
};
|
|
|
|
return extendStatics(d, b);
|
|
};
|
|
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
}();
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
/* This module handles TeX Font Metric.
|
|
|
|
The class :class:`PyDvi.Tfm` handles the font's metric. To get a :class:`PyDvi.Tfm` instance for a
|
|
particular font use the static method :meth:`PyDvi.TfmParser.TfmParser.parse`. For example use this
|
|
code for the font "cmr10"::
|
|
|
|
tfm = TfmParser.parse('cmr10', '/usr/share/texmf/fonts/tfm/public/cm/cmr10.tfm')
|
|
|
|
The number of characters in the font can be obtained using the function :func:`len`::
|
|
|
|
>>> len(tfm)
|
|
128
|
|
|
|
Each character's metric is stored in a :class:`TfmChar` instance that can be accessed using the char
|
|
code as index on the :class:`Tfm` class instance. For example to get the metric of the character
|
|
"A" use::
|
|
|
|
tfm[ord('A')]
|
|
|
|
*/
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////;
|
|
|
|
var TfmChar =
|
|
/** @class */
|
|
function () {
|
|
function TfmChar(tfm, char_code, width, height, depth, italic_correction, lig_kern_program_index, next_larger_char) {
|
|
this.tfm = tfm;
|
|
tfm.set_char(char_code, this);
|
|
this.char_code = char_code;
|
|
this.width = width;
|
|
this.height = height;
|
|
this.depth = depth;
|
|
this.italic_correction = italic_correction;
|
|
this.lig_kern_program_index = lig_kern_program_index;
|
|
this.next_larger_char = next_larger_char;
|
|
}
|
|
|
|
TfmChar.prototype.scaled_width = function (scale_factor) {
|
|
/* Return the scaled width by *scale_factor*. */
|
|
return this.width * scale_factor;
|
|
};
|
|
|
|
TfmChar.prototype.scaled_height = function (scale_factor) {
|
|
/* Return the scaled height by *scale_factor*. */
|
|
return this.height * scale_factor;
|
|
};
|
|
|
|
TfmChar.prototype.scaled_depth = function (scale_factor) {
|
|
/* Return the scaled depth by *scale_factor*. */
|
|
return Number(this.depth * scale_factor);
|
|
};
|
|
|
|
TfmChar.prototype.scaled_dimensions = function (scale_factor) {
|
|
/* Return the 3-tuple made of the scaled width, height and depth by *scale_factor*. */
|
|
return [this.width, this.height, this.depth].map(function (x) {
|
|
return x * scale_factor;
|
|
});
|
|
};
|
|
|
|
TfmChar.prototype.next_larger_tfm_char = function () {
|
|
/* Return the :class:`TfmChar` instance for the next larger char if it exists else return
|
|
:obj:`None`. */
|
|
;
|
|
|
|
if (this.next_larger_char !== null) {
|
|
return this.tfm.get_char(this.next_larger_char);
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
TfmChar.prototype.get_lig_kern_program = function (self) {
|
|
/* Get the ligature/kern program of the character. */
|
|
;
|
|
|
|
if (this.lig_kern_program_index !== null) {
|
|
return this.tfm.get_lig_kern_program(this.lig_kern_program_index);
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
return TfmChar;
|
|
}();
|
|
|
|
exports.TfmChar = TfmChar;
|
|
/* This class encapsulates a TeX Font Metric for an extensible Glyph. */
|
|
|
|
var TfmExtensibleChar =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(TfmExtensibleChar, _super);
|
|
|
|
function TfmExtensibleChar(tfm, char_code, width, height, depth, italic_correction, extensible_recipe, lig_kern_program_index, next_larger_char) {
|
|
var _this = _super.call(this, tfm, char_code, width, height, depth, italic_correction, lig_kern_program_index, next_larger_char) || this; // BADBAD
|
|
|
|
|
|
_this.top, _this.mid, _this.bot, _this.rep = extensible_recipe;
|
|
return _this;
|
|
}
|
|
|
|
return TfmExtensibleChar;
|
|
}(TfmChar);
|
|
|
|
exports.TfmExtensibleChar = TfmExtensibleChar;
|
|
|
|
var TfmLigKern =
|
|
/** @class */
|
|
function () {
|
|
function TfmLigKern(tfm, index, stop, next_char) {
|
|
this.tfm = tfm;
|
|
this.stop = stop;
|
|
this.index = index;
|
|
this.next_char = next_char;
|
|
this.tfm.add_lig_kern(this);
|
|
}
|
|
|
|
return TfmLigKern;
|
|
}();
|
|
|
|
exports.TfmLigKern = TfmLigKern;
|
|
/* This class represents a Kerning Program Instruction. */
|
|
|
|
var TfmKern =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(TfmKern, _super);
|
|
|
|
function TfmKern(tfm, index, stop, next_char, kern) {
|
|
var _this = _super.call(this, tfm, index, stop, next_char) || this;
|
|
|
|
_this.kern = kern;
|
|
return _this;
|
|
}
|
|
|
|
return TfmKern;
|
|
}(TfmLigKern);
|
|
|
|
exports.TfmKern = TfmKern;
|
|
/* This class represents a Ligature Program Instruction. */
|
|
|
|
var TfmLigature =
|
|
/** @class */
|
|
function (_super) {
|
|
__extends(TfmLigature, _super);
|
|
|
|
function TfmLigature(tfm, index, stop, next_char, ligature_char_code, number_of_chars_to_pass_over, current_char_is_deleted, next_char_is_deleted) {
|
|
var _this = _super.call(this, tfm, index, stop, next_char) || this;
|
|
|
|
_this.ligature_char_code = ligature_char_code;
|
|
_this.number_of_chars_to_pass_over = number_of_chars_to_pass_over;
|
|
_this.current_char_is_deleted = current_char_is_deleted;
|
|
_this.next_char_is_deleted = next_char_is_deleted;
|
|
return _this;
|
|
}
|
|
|
|
return TfmLigature;
|
|
}(TfmLigKern);
|
|
|
|
exports.TfmLigature = TfmLigature;
|
|
/* This class encapsulates a TeX Font Metric for a font. */
|
|
|
|
var Tfm =
|
|
/** @class */
|
|
function () {
|
|
function Tfm(smallest_character_code, largest_character_code, checksum, designSize, character_coding_scheme, family) {
|
|
this.smallest_character_code = smallest_character_code;
|
|
this.largest_character_code = largest_character_code;
|
|
this.checksum = checksum;
|
|
this.designSize = designSize;
|
|
this.character_coding_scheme = character_coding_scheme;
|
|
this.family = family;
|
|
this._lig_kerns = [];
|
|
this.characters = {};
|
|
}
|
|
|
|
Tfm.prototype.get_char = function (x) {
|
|
return this.characters[x];
|
|
};
|
|
|
|
Tfm.prototype.set_char = function (x, y) {
|
|
this.characters[x] = y;
|
|
};
|
|
|
|
Tfm.prototype.set_font_parameters = function (parameters) {
|
|
/* Set the font parameters. */
|
|
;
|
|
this.slant = parameters[0];
|
|
this.spacing = parameters[1];
|
|
this.space_stretch = parameters[2];
|
|
this.space_shrink = parameters[3];
|
|
this.x_height = parameters[4];
|
|
this.quad = parameters[5];
|
|
this.extra_space = parameters[6];
|
|
};
|
|
|
|
Tfm.prototype.set_math_symbols_parameters = function (parameters) {
|
|
/* Set the math symbols parameters. */
|
|
;
|
|
this.num1 = parameters[0];
|
|
this.num2 = parameters[1];
|
|
this.num3 = parameters[2];
|
|
this.denom1 = parameters[3];
|
|
this.denom2 = parameters[4];
|
|
this.sup1 = parameters[5];
|
|
this.sup2 = parameters[6];
|
|
this.sup3 = parameters[7];
|
|
this.sub1 = parameters[8];
|
|
this.sub2 = parameters[9];
|
|
this.supdrop = parameters[10];
|
|
this.subdrop = parameters[11];
|
|
this.delim1 = parameters[12];
|
|
this.delim2 = parameters[13];
|
|
this.axis_height = parameters[14];
|
|
};
|
|
|
|
Tfm.prototype.set_math_extension_parameters = function (parameters) {
|
|
this.default_rule_thickness = parameters[0];
|
|
this.big_op_spacing = parameters.slice(1);
|
|
};
|
|
|
|
Tfm.prototype.add_lig_kern = function (obj) {
|
|
/* Add a ligature/kern program *obj*. */
|
|
;
|
|
|
|
this._lig_kerns.push(obj);
|
|
};
|
|
|
|
Tfm.prototype.get_lig_kern_program = function (i) {
|
|
/* Return the ligature/kern program at index *i*. */
|
|
;
|
|
return this._lig_kerns[i];
|
|
};
|
|
|
|
return Tfm;
|
|
}();
|
|
|
|
exports.Tfm = Tfm;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/base64-js/index.js":
|
|
/*!*****************************************!*\
|
|
!*** ./node_modules/base64-js/index.js ***!
|
|
\*****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
exports.byteLength = byteLength;
|
|
exports.toByteArray = toByteArray;
|
|
exports.fromByteArray = fromByteArray;
|
|
var lookup = [];
|
|
var revLookup = [];
|
|
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
|
|
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
|
|
for (var i = 0, len = code.length; i < len; ++i) {
|
|
lookup[i] = code[i];
|
|
revLookup[code.charCodeAt(i)] = i;
|
|
} // Support decoding URL-safe base64 strings, as Node.js does.
|
|
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
|
|
|
|
|
|
revLookup['-'.charCodeAt(0)] = 62;
|
|
revLookup['_'.charCodeAt(0)] = 63;
|
|
|
|
function getLens(b64) {
|
|
var len = b64.length;
|
|
|
|
if (len % 4 > 0) {
|
|
throw new Error('Invalid string. Length must be a multiple of 4');
|
|
} // Trim off extra bytes after placeholder bytes are found
|
|
// See: https://github.com/beatgammit/base64-js/issues/42
|
|
|
|
|
|
var validLen = b64.indexOf('=');
|
|
if (validLen === -1) validLen = len;
|
|
var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
|
|
return [validLen, placeHoldersLen];
|
|
} // base64 is 4/3 + up to two characters of the original data
|
|
|
|
|
|
function byteLength(b64) {
|
|
var lens = getLens(b64);
|
|
var validLen = lens[0];
|
|
var placeHoldersLen = lens[1];
|
|
return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
|
|
}
|
|
|
|
function _byteLength(b64, validLen, placeHoldersLen) {
|
|
return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
|
|
}
|
|
|
|
function toByteArray(b64) {
|
|
var tmp;
|
|
var lens = getLens(b64);
|
|
var validLen = lens[0];
|
|
var placeHoldersLen = lens[1];
|
|
var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
|
|
var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars
|
|
|
|
var len = placeHoldersLen > 0 ? validLen - 4 : validLen;
|
|
|
|
for (var i = 0; i < len; i += 4) {
|
|
tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
|
|
arr[curByte++] = tmp >> 16 & 0xFF;
|
|
arr[curByte++] = tmp >> 8 & 0xFF;
|
|
arr[curByte++] = tmp & 0xFF;
|
|
}
|
|
|
|
if (placeHoldersLen === 2) {
|
|
tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
|
|
arr[curByte++] = tmp & 0xFF;
|
|
}
|
|
|
|
if (placeHoldersLen === 1) {
|
|
tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
|
|
arr[curByte++] = tmp >> 8 & 0xFF;
|
|
arr[curByte++] = tmp & 0xFF;
|
|
}
|
|
|
|
return arr;
|
|
}
|
|
|
|
function tripletToBase64(num) {
|
|
return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
|
|
}
|
|
|
|
function encodeChunk(uint8, start, end) {
|
|
var tmp;
|
|
var output = [];
|
|
|
|
for (var i = start; i < end; i += 3) {
|
|
tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);
|
|
output.push(tripletToBase64(tmp));
|
|
}
|
|
|
|
return output.join('');
|
|
}
|
|
|
|
function fromByteArray(uint8) {
|
|
var tmp;
|
|
var len = uint8.length;
|
|
var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
|
|
|
|
var parts = [];
|
|
var maxChunkLength = 16383; // must be multiple of 3
|
|
// go through the array every three bytes, we'll deal with trailing stuff later
|
|
|
|
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
|
|
parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
|
|
} // pad the end with zeros, but make sure to not forget the extra bytes
|
|
|
|
|
|
if (extraBytes === 1) {
|
|
tmp = uint8[len - 1];
|
|
parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');
|
|
} else if (extraBytes === 2) {
|
|
tmp = (uint8[len - 2] << 8) + uint8[len - 1];
|
|
parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');
|
|
}
|
|
|
|
return parts.join('');
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/buffer/index.js":
|
|
/*!**************************************!*\
|
|
!*** ./node_modules/buffer/index.js ***!
|
|
\**************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* WEBPACK VAR INJECTION */(function(global) {/*!
|
|
* The buffer module from node.js, for the browser.
|
|
*
|
|
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
|
* @license MIT
|
|
*/
|
|
|
|
/* eslint-disable no-proto */
|
|
|
|
|
|
var base64 = __webpack_require__(/*! base64-js */ "./node_modules/base64-js/index.js");
|
|
|
|
var ieee754 = __webpack_require__(/*! ieee754 */ "./node_modules/ieee754/index.js");
|
|
|
|
var isArray = __webpack_require__(/*! isarray */ "./node_modules/isarray/index.js");
|
|
|
|
exports.Buffer = Buffer;
|
|
exports.SlowBuffer = SlowBuffer;
|
|
exports.INSPECT_MAX_BYTES = 50;
|
|
/**
|
|
* If `Buffer.TYPED_ARRAY_SUPPORT`:
|
|
* === true Use Uint8Array implementation (fastest)
|
|
* === false Use Object implementation (most compatible, even IE6)
|
|
*
|
|
* Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
|
|
* Opera 11.6+, iOS 4.2+.
|
|
*
|
|
* Due to various browser bugs, sometimes the Object implementation will be used even
|
|
* when the browser supports typed arrays.
|
|
*
|
|
* Note:
|
|
*
|
|
* - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
|
|
* See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
|
|
*
|
|
* - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
|
|
*
|
|
* - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
|
|
* incorrect length in some situations.
|
|
|
|
* We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
|
|
* get the Object implementation, which is slower but behaves correctly.
|
|
*/
|
|
|
|
Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();
|
|
/*
|
|
* Export kMaxLength after typed array support is determined.
|
|
*/
|
|
|
|
exports.kMaxLength = kMaxLength();
|
|
|
|
function typedArraySupport() {
|
|
try {
|
|
var arr = new Uint8Array(1);
|
|
arr.__proto__ = {
|
|
__proto__: Uint8Array.prototype,
|
|
foo: function () {
|
|
return 42;
|
|
}
|
|
};
|
|
return arr.foo() === 42 && // typed array instances can be augmented
|
|
typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
|
|
arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function kMaxLength() {
|
|
return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;
|
|
}
|
|
|
|
function createBuffer(that, length) {
|
|
if (kMaxLength() < length) {
|
|
throw new RangeError('Invalid typed array length');
|
|
}
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
// Return an augmented `Uint8Array` instance, for best performance
|
|
that = new Uint8Array(length);
|
|
that.__proto__ = Buffer.prototype;
|
|
} else {
|
|
// Fallback: Return an object instance of the Buffer class
|
|
if (that === null) {
|
|
that = new Buffer(length);
|
|
}
|
|
|
|
that.length = length;
|
|
}
|
|
|
|
return that;
|
|
}
|
|
/**
|
|
* The Buffer constructor returns instances of `Uint8Array` that have their
|
|
* prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
|
|
* `Uint8Array`, so the returned instances will have all the node `Buffer` methods
|
|
* and the `Uint8Array` methods. Square bracket notation works as expected -- it
|
|
* returns a single octet.
|
|
*
|
|
* The `Uint8Array` prototype remains unmodified.
|
|
*/
|
|
|
|
|
|
function Buffer(arg, encodingOrOffset, length) {
|
|
if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
|
|
return new Buffer(arg, encodingOrOffset, length);
|
|
} // Common case.
|
|
|
|
|
|
if (typeof arg === 'number') {
|
|
if (typeof encodingOrOffset === 'string') {
|
|
throw new Error('If encoding is specified then the first argument must be a string');
|
|
}
|
|
|
|
return allocUnsafe(this, arg);
|
|
}
|
|
|
|
return from(this, arg, encodingOrOffset, length);
|
|
}
|
|
|
|
Buffer.poolSize = 8192; // not used by this implementation
|
|
// TODO: Legacy, not needed anymore. Remove in next major version.
|
|
|
|
Buffer._augment = function (arr) {
|
|
arr.__proto__ = Buffer.prototype;
|
|
return arr;
|
|
};
|
|
|
|
function from(that, value, encodingOrOffset, length) {
|
|
if (typeof value === 'number') {
|
|
throw new TypeError('"value" argument must not be a number');
|
|
}
|
|
|
|
if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
|
|
return fromArrayBuffer(that, value, encodingOrOffset, length);
|
|
}
|
|
|
|
if (typeof value === 'string') {
|
|
return fromString(that, value, encodingOrOffset);
|
|
}
|
|
|
|
return fromObject(that, value);
|
|
}
|
|
/**
|
|
* Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
|
|
* if value is a number.
|
|
* Buffer.from(str[, encoding])
|
|
* Buffer.from(array)
|
|
* Buffer.from(buffer)
|
|
* Buffer.from(arrayBuffer[, byteOffset[, length]])
|
|
**/
|
|
|
|
|
|
Buffer.from = function (value, encodingOrOffset, length) {
|
|
return from(null, value, encodingOrOffset, length);
|
|
};
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
Buffer.prototype.__proto__ = Uint8Array.prototype;
|
|
Buffer.__proto__ = Uint8Array;
|
|
|
|
if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {
|
|
// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
|
|
Object.defineProperty(Buffer, Symbol.species, {
|
|
value: null,
|
|
configurable: true
|
|
});
|
|
}
|
|
}
|
|
|
|
function assertSize(size) {
|
|
if (typeof size !== 'number') {
|
|
throw new TypeError('"size" argument must be a number');
|
|
} else if (size < 0) {
|
|
throw new RangeError('"size" argument must not be negative');
|
|
}
|
|
}
|
|
|
|
function alloc(that, size, fill, encoding) {
|
|
assertSize(size);
|
|
|
|
if (size <= 0) {
|
|
return createBuffer(that, size);
|
|
}
|
|
|
|
if (fill !== undefined) {
|
|
// Only pay attention to encoding if it's a string. This
|
|
// prevents accidentally sending in a number that would
|
|
// be interpretted as a start offset.
|
|
return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);
|
|
}
|
|
|
|
return createBuffer(that, size);
|
|
}
|
|
/**
|
|
* Creates a new filled Buffer instance.
|
|
* alloc(size[, fill[, encoding]])
|
|
**/
|
|
|
|
|
|
Buffer.alloc = function (size, fill, encoding) {
|
|
return alloc(null, size, fill, encoding);
|
|
};
|
|
|
|
function allocUnsafe(that, size) {
|
|
assertSize(size);
|
|
that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);
|
|
|
|
if (!Buffer.TYPED_ARRAY_SUPPORT) {
|
|
for (var i = 0; i < size; ++i) {
|
|
that[i] = 0;
|
|
}
|
|
}
|
|
|
|
return that;
|
|
}
|
|
/**
|
|
* Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
|
|
* */
|
|
|
|
|
|
Buffer.allocUnsafe = function (size) {
|
|
return allocUnsafe(null, size);
|
|
};
|
|
/**
|
|
* Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
|
|
*/
|
|
|
|
|
|
Buffer.allocUnsafeSlow = function (size) {
|
|
return allocUnsafe(null, size);
|
|
};
|
|
|
|
function fromString(that, string, encoding) {
|
|
if (typeof encoding !== 'string' || encoding === '') {
|
|
encoding = 'utf8';
|
|
}
|
|
|
|
if (!Buffer.isEncoding(encoding)) {
|
|
throw new TypeError('"encoding" must be a valid string encoding');
|
|
}
|
|
|
|
var length = byteLength(string, encoding) | 0;
|
|
that = createBuffer(that, length);
|
|
var actual = that.write(string, encoding);
|
|
|
|
if (actual !== length) {
|
|
// Writing a hex string, for example, that contains invalid characters will
|
|
// cause everything after the first invalid character to be ignored. (e.g.
|
|
// 'abxxcd' will be treated as 'ab')
|
|
that = that.slice(0, actual);
|
|
}
|
|
|
|
return that;
|
|
}
|
|
|
|
function fromArrayLike(that, array) {
|
|
var length = array.length < 0 ? 0 : checked(array.length) | 0;
|
|
that = createBuffer(that, length);
|
|
|
|
for (var i = 0; i < length; i += 1) {
|
|
that[i] = array[i] & 255;
|
|
}
|
|
|
|
return that;
|
|
}
|
|
|
|
function fromArrayBuffer(that, array, byteOffset, length) {
|
|
array.byteLength; // this throws if `array` is not a valid ArrayBuffer
|
|
|
|
if (byteOffset < 0 || array.byteLength < byteOffset) {
|
|
throw new RangeError('\'offset\' is out of bounds');
|
|
}
|
|
|
|
if (array.byteLength < byteOffset + (length || 0)) {
|
|
throw new RangeError('\'length\' is out of bounds');
|
|
}
|
|
|
|
if (byteOffset === undefined && length === undefined) {
|
|
array = new Uint8Array(array);
|
|
} else if (length === undefined) {
|
|
array = new Uint8Array(array, byteOffset);
|
|
} else {
|
|
array = new Uint8Array(array, byteOffset, length);
|
|
}
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
// Return an augmented `Uint8Array` instance, for best performance
|
|
that = array;
|
|
that.__proto__ = Buffer.prototype;
|
|
} else {
|
|
// Fallback: Return an object instance of the Buffer class
|
|
that = fromArrayLike(that, array);
|
|
}
|
|
|
|
return that;
|
|
}
|
|
|
|
function fromObject(that, obj) {
|
|
if (Buffer.isBuffer(obj)) {
|
|
var len = checked(obj.length) | 0;
|
|
that = createBuffer(that, len);
|
|
|
|
if (that.length === 0) {
|
|
return that;
|
|
}
|
|
|
|
obj.copy(that, 0, 0, len);
|
|
return that;
|
|
}
|
|
|
|
if (obj) {
|
|
if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {
|
|
if (typeof obj.length !== 'number' || isnan(obj.length)) {
|
|
return createBuffer(that, 0);
|
|
}
|
|
|
|
return fromArrayLike(that, obj);
|
|
}
|
|
|
|
if (obj.type === 'Buffer' && isArray(obj.data)) {
|
|
return fromArrayLike(that, obj.data);
|
|
}
|
|
}
|
|
|
|
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');
|
|
}
|
|
|
|
function checked(length) {
|
|
// Note: cannot use `length < kMaxLength()` here because that fails when
|
|
// length is NaN (which is otherwise coerced to zero.)
|
|
if (length >= kMaxLength()) {
|
|
throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');
|
|
}
|
|
|
|
return length | 0;
|
|
}
|
|
|
|
function SlowBuffer(length) {
|
|
if (+length != length) {
|
|
// eslint-disable-line eqeqeq
|
|
length = 0;
|
|
}
|
|
|
|
return Buffer.alloc(+length);
|
|
}
|
|
|
|
Buffer.isBuffer = function isBuffer(b) {
|
|
return !!(b != null && b._isBuffer);
|
|
};
|
|
|
|
Buffer.compare = function compare(a, b) {
|
|
if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
|
|
throw new TypeError('Arguments must be Buffers');
|
|
}
|
|
|
|
if (a === b) return 0;
|
|
var x = a.length;
|
|
var y = b.length;
|
|
|
|
for (var i = 0, len = Math.min(x, y); i < len; ++i) {
|
|
if (a[i] !== b[i]) {
|
|
x = a[i];
|
|
y = b[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (x < y) return -1;
|
|
if (y < x) return 1;
|
|
return 0;
|
|
};
|
|
|
|
Buffer.isEncoding = function isEncoding(encoding) {
|
|
switch (String(encoding).toLowerCase()) {
|
|
case 'hex':
|
|
case 'utf8':
|
|
case 'utf-8':
|
|
case 'ascii':
|
|
case 'latin1':
|
|
case 'binary':
|
|
case 'base64':
|
|
case 'ucs2':
|
|
case 'ucs-2':
|
|
case 'utf16le':
|
|
case 'utf-16le':
|
|
return true;
|
|
|
|
default:
|
|
return false;
|
|
}
|
|
};
|
|
|
|
Buffer.concat = function concat(list, length) {
|
|
if (!isArray(list)) {
|
|
throw new TypeError('"list" argument must be an Array of Buffers');
|
|
}
|
|
|
|
if (list.length === 0) {
|
|
return Buffer.alloc(0);
|
|
}
|
|
|
|
var i;
|
|
|
|
if (length === undefined) {
|
|
length = 0;
|
|
|
|
for (i = 0; i < list.length; ++i) {
|
|
length += list[i].length;
|
|
}
|
|
}
|
|
|
|
var buffer = Buffer.allocUnsafe(length);
|
|
var pos = 0;
|
|
|
|
for (i = 0; i < list.length; ++i) {
|
|
var buf = list[i];
|
|
|
|
if (!Buffer.isBuffer(buf)) {
|
|
throw new TypeError('"list" argument must be an Array of Buffers');
|
|
}
|
|
|
|
buf.copy(buffer, pos);
|
|
pos += buf.length;
|
|
}
|
|
|
|
return buffer;
|
|
};
|
|
|
|
function byteLength(string, encoding) {
|
|
if (Buffer.isBuffer(string)) {
|
|
return string.length;
|
|
}
|
|
|
|
if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
|
|
return string.byteLength;
|
|
}
|
|
|
|
if (typeof string !== 'string') {
|
|
string = '' + string;
|
|
}
|
|
|
|
var len = string.length;
|
|
if (len === 0) return 0; // Use a for loop to avoid recursion
|
|
|
|
var loweredCase = false;
|
|
|
|
for (;;) {
|
|
switch (encoding) {
|
|
case 'ascii':
|
|
case 'latin1':
|
|
case 'binary':
|
|
return len;
|
|
|
|
case 'utf8':
|
|
case 'utf-8':
|
|
case undefined:
|
|
return utf8ToBytes(string).length;
|
|
|
|
case 'ucs2':
|
|
case 'ucs-2':
|
|
case 'utf16le':
|
|
case 'utf-16le':
|
|
return len * 2;
|
|
|
|
case 'hex':
|
|
return len >>> 1;
|
|
|
|
case 'base64':
|
|
return base64ToBytes(string).length;
|
|
|
|
default:
|
|
if (loweredCase) return utf8ToBytes(string).length; // assume utf8
|
|
|
|
encoding = ('' + encoding).toLowerCase();
|
|
loweredCase = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
Buffer.byteLength = byteLength;
|
|
|
|
function slowToString(encoding, start, end) {
|
|
var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
|
|
// property of a typed array.
|
|
// This behaves neither like String nor Uint8Array in that we set start/end
|
|
// to their upper/lower bounds if the value passed is out of range.
|
|
// undefined is handled specially as per ECMA-262 6th Edition,
|
|
// Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
|
|
|
|
if (start === undefined || start < 0) {
|
|
start = 0;
|
|
} // Return early if start > this.length. Done here to prevent potential uint32
|
|
// coercion fail below.
|
|
|
|
|
|
if (start > this.length) {
|
|
return '';
|
|
}
|
|
|
|
if (end === undefined || end > this.length) {
|
|
end = this.length;
|
|
}
|
|
|
|
if (end <= 0) {
|
|
return '';
|
|
} // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
|
|
|
|
|
|
end >>>= 0;
|
|
start >>>= 0;
|
|
|
|
if (end <= start) {
|
|
return '';
|
|
}
|
|
|
|
if (!encoding) encoding = 'utf8';
|
|
|
|
while (true) {
|
|
switch (encoding) {
|
|
case 'hex':
|
|
return hexSlice(this, start, end);
|
|
|
|
case 'utf8':
|
|
case 'utf-8':
|
|
return utf8Slice(this, start, end);
|
|
|
|
case 'ascii':
|
|
return asciiSlice(this, start, end);
|
|
|
|
case 'latin1':
|
|
case 'binary':
|
|
return latin1Slice(this, start, end);
|
|
|
|
case 'base64':
|
|
return base64Slice(this, start, end);
|
|
|
|
case 'ucs2':
|
|
case 'ucs-2':
|
|
case 'utf16le':
|
|
case 'utf-16le':
|
|
return utf16leSlice(this, start, end);
|
|
|
|
default:
|
|
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
|
|
encoding = (encoding + '').toLowerCase();
|
|
loweredCase = true;
|
|
}
|
|
}
|
|
} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
|
|
// Buffer instances.
|
|
|
|
|
|
Buffer.prototype._isBuffer = true;
|
|
|
|
function swap(b, n, m) {
|
|
var i = b[n];
|
|
b[n] = b[m];
|
|
b[m] = i;
|
|
}
|
|
|
|
Buffer.prototype.swap16 = function swap16() {
|
|
var len = this.length;
|
|
|
|
if (len % 2 !== 0) {
|
|
throw new RangeError('Buffer size must be a multiple of 16-bits');
|
|
}
|
|
|
|
for (var i = 0; i < len; i += 2) {
|
|
swap(this, i, i + 1);
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
Buffer.prototype.swap32 = function swap32() {
|
|
var len = this.length;
|
|
|
|
if (len % 4 !== 0) {
|
|
throw new RangeError('Buffer size must be a multiple of 32-bits');
|
|
}
|
|
|
|
for (var i = 0; i < len; i += 4) {
|
|
swap(this, i, i + 3);
|
|
swap(this, i + 1, i + 2);
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
Buffer.prototype.swap64 = function swap64() {
|
|
var len = this.length;
|
|
|
|
if (len % 8 !== 0) {
|
|
throw new RangeError('Buffer size must be a multiple of 64-bits');
|
|
}
|
|
|
|
for (var i = 0; i < len; i += 8) {
|
|
swap(this, i, i + 7);
|
|
swap(this, i + 1, i + 6);
|
|
swap(this, i + 2, i + 5);
|
|
swap(this, i + 3, i + 4);
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
Buffer.prototype.toString = function toString() {
|
|
var length = this.length | 0;
|
|
if (length === 0) return '';
|
|
if (arguments.length === 0) return utf8Slice(this, 0, length);
|
|
return slowToString.apply(this, arguments);
|
|
};
|
|
|
|
Buffer.prototype.equals = function equals(b) {
|
|
if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');
|
|
if (this === b) return true;
|
|
return Buffer.compare(this, b) === 0;
|
|
};
|
|
|
|
Buffer.prototype.inspect = function inspect() {
|
|
var str = '';
|
|
var max = exports.INSPECT_MAX_BYTES;
|
|
|
|
if (this.length > 0) {
|
|
str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');
|
|
if (this.length > max) str += ' ... ';
|
|
}
|
|
|
|
return '<Buffer ' + str + '>';
|
|
};
|
|
|
|
Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
|
|
if (!Buffer.isBuffer(target)) {
|
|
throw new TypeError('Argument must be a Buffer');
|
|
}
|
|
|
|
if (start === undefined) {
|
|
start = 0;
|
|
}
|
|
|
|
if (end === undefined) {
|
|
end = target ? target.length : 0;
|
|
}
|
|
|
|
if (thisStart === undefined) {
|
|
thisStart = 0;
|
|
}
|
|
|
|
if (thisEnd === undefined) {
|
|
thisEnd = this.length;
|
|
}
|
|
|
|
if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
|
|
throw new RangeError('out of range index');
|
|
}
|
|
|
|
if (thisStart >= thisEnd && start >= end) {
|
|
return 0;
|
|
}
|
|
|
|
if (thisStart >= thisEnd) {
|
|
return -1;
|
|
}
|
|
|
|
if (start >= end) {
|
|
return 1;
|
|
}
|
|
|
|
start >>>= 0;
|
|
end >>>= 0;
|
|
thisStart >>>= 0;
|
|
thisEnd >>>= 0;
|
|
if (this === target) return 0;
|
|
var x = thisEnd - thisStart;
|
|
var y = end - start;
|
|
var len = Math.min(x, y);
|
|
var thisCopy = this.slice(thisStart, thisEnd);
|
|
var targetCopy = target.slice(start, end);
|
|
|
|
for (var i = 0; i < len; ++i) {
|
|
if (thisCopy[i] !== targetCopy[i]) {
|
|
x = thisCopy[i];
|
|
y = targetCopy[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (x < y) return -1;
|
|
if (y < x) return 1;
|
|
return 0;
|
|
}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
|
|
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
|
|
//
|
|
// Arguments:
|
|
// - buffer - a Buffer to search
|
|
// - val - a string, Buffer, or number
|
|
// - byteOffset - an index into `buffer`; will be clamped to an int32
|
|
// - encoding - an optional encoding, relevant is val is a string
|
|
// - dir - true for indexOf, false for lastIndexOf
|
|
|
|
|
|
function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
|
|
// Empty buffer means no match
|
|
if (buffer.length === 0) return -1; // Normalize byteOffset
|
|
|
|
if (typeof byteOffset === 'string') {
|
|
encoding = byteOffset;
|
|
byteOffset = 0;
|
|
} else if (byteOffset > 0x7fffffff) {
|
|
byteOffset = 0x7fffffff;
|
|
} else if (byteOffset < -0x80000000) {
|
|
byteOffset = -0x80000000;
|
|
}
|
|
|
|
byteOffset = +byteOffset; // Coerce to Number.
|
|
|
|
if (isNaN(byteOffset)) {
|
|
// byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
|
|
byteOffset = dir ? 0 : buffer.length - 1;
|
|
} // Normalize byteOffset: negative offsets start from the end of the buffer
|
|
|
|
|
|
if (byteOffset < 0) byteOffset = buffer.length + byteOffset;
|
|
|
|
if (byteOffset >= buffer.length) {
|
|
if (dir) return -1;else byteOffset = buffer.length - 1;
|
|
} else if (byteOffset < 0) {
|
|
if (dir) byteOffset = 0;else return -1;
|
|
} // Normalize val
|
|
|
|
|
|
if (typeof val === 'string') {
|
|
val = Buffer.from(val, encoding);
|
|
} // Finally, search either indexOf (if dir is true) or lastIndexOf
|
|
|
|
|
|
if (Buffer.isBuffer(val)) {
|
|
// Special case: looking for empty string/buffer always fails
|
|
if (val.length === 0) {
|
|
return -1;
|
|
}
|
|
|
|
return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
|
|
} else if (typeof val === 'number') {
|
|
val = val & 0xFF; // Search for a byte value [0-255]
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {
|
|
if (dir) {
|
|
return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
|
|
} else {
|
|
return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
|
|
}
|
|
}
|
|
|
|
return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
|
|
}
|
|
|
|
throw new TypeError('val must be string, number or Buffer');
|
|
}
|
|
|
|
function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
|
|
var indexSize = 1;
|
|
var arrLength = arr.length;
|
|
var valLength = val.length;
|
|
|
|
if (encoding !== undefined) {
|
|
encoding = String(encoding).toLowerCase();
|
|
|
|
if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {
|
|
if (arr.length < 2 || val.length < 2) {
|
|
return -1;
|
|
}
|
|
|
|
indexSize = 2;
|
|
arrLength /= 2;
|
|
valLength /= 2;
|
|
byteOffset /= 2;
|
|
}
|
|
}
|
|
|
|
function read(buf, i) {
|
|
if (indexSize === 1) {
|
|
return buf[i];
|
|
} else {
|
|
return buf.readUInt16BE(i * indexSize);
|
|
}
|
|
}
|
|
|
|
var i;
|
|
|
|
if (dir) {
|
|
var foundIndex = -1;
|
|
|
|
for (i = byteOffset; i < arrLength; i++) {
|
|
if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
|
|
if (foundIndex === -1) foundIndex = i;
|
|
if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
|
|
} else {
|
|
if (foundIndex !== -1) i -= i - foundIndex;
|
|
foundIndex = -1;
|
|
}
|
|
}
|
|
} else {
|
|
if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;
|
|
|
|
for (i = byteOffset; i >= 0; i--) {
|
|
var found = true;
|
|
|
|
for (var j = 0; j < valLength; j++) {
|
|
if (read(arr, i + j) !== read(val, j)) {
|
|
found = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (found) return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
|
|
return this.indexOf(val, byteOffset, encoding) !== -1;
|
|
};
|
|
|
|
Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
|
|
return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
|
|
};
|
|
|
|
Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
|
|
return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
|
|
};
|
|
|
|
function hexWrite(buf, string, offset, length) {
|
|
offset = Number(offset) || 0;
|
|
var remaining = buf.length - offset;
|
|
|
|
if (!length) {
|
|
length = remaining;
|
|
} else {
|
|
length = Number(length);
|
|
|
|
if (length > remaining) {
|
|
length = remaining;
|
|
}
|
|
} // must be an even number of digits
|
|
|
|
|
|
var strLen = string.length;
|
|
if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');
|
|
|
|
if (length > strLen / 2) {
|
|
length = strLen / 2;
|
|
}
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
var parsed = parseInt(string.substr(i * 2, 2), 16);
|
|
if (isNaN(parsed)) return i;
|
|
buf[offset + i] = parsed;
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
function utf8Write(buf, string, offset, length) {
|
|
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
|
|
}
|
|
|
|
function asciiWrite(buf, string, offset, length) {
|
|
return blitBuffer(asciiToBytes(string), buf, offset, length);
|
|
}
|
|
|
|
function latin1Write(buf, string, offset, length) {
|
|
return asciiWrite(buf, string, offset, length);
|
|
}
|
|
|
|
function base64Write(buf, string, offset, length) {
|
|
return blitBuffer(base64ToBytes(string), buf, offset, length);
|
|
}
|
|
|
|
function ucs2Write(buf, string, offset, length) {
|
|
return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);
|
|
}
|
|
|
|
Buffer.prototype.write = function write(string, offset, length, encoding) {
|
|
// Buffer#write(string)
|
|
if (offset === undefined) {
|
|
encoding = 'utf8';
|
|
length = this.length;
|
|
offset = 0; // Buffer#write(string, encoding)
|
|
} else if (length === undefined && typeof offset === 'string') {
|
|
encoding = offset;
|
|
length = this.length;
|
|
offset = 0; // Buffer#write(string, offset[, length][, encoding])
|
|
} else if (isFinite(offset)) {
|
|
offset = offset | 0;
|
|
|
|
if (isFinite(length)) {
|
|
length = length | 0;
|
|
if (encoding === undefined) encoding = 'utf8';
|
|
} else {
|
|
encoding = length;
|
|
length = undefined;
|
|
} // legacy write(string, encoding, offset, length) - remove in v0.13
|
|
|
|
} else {
|
|
throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');
|
|
}
|
|
|
|
var remaining = this.length - offset;
|
|
if (length === undefined || length > remaining) length = remaining;
|
|
|
|
if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
|
|
throw new RangeError('Attempt to write outside buffer bounds');
|
|
}
|
|
|
|
if (!encoding) encoding = 'utf8';
|
|
var loweredCase = false;
|
|
|
|
for (;;) {
|
|
switch (encoding) {
|
|
case 'hex':
|
|
return hexWrite(this, string, offset, length);
|
|
|
|
case 'utf8':
|
|
case 'utf-8':
|
|
return utf8Write(this, string, offset, length);
|
|
|
|
case 'ascii':
|
|
return asciiWrite(this, string, offset, length);
|
|
|
|
case 'latin1':
|
|
case 'binary':
|
|
return latin1Write(this, string, offset, length);
|
|
|
|
case 'base64':
|
|
// Warning: maxLength not taken into account in base64Write
|
|
return base64Write(this, string, offset, length);
|
|
|
|
case 'ucs2':
|
|
case 'ucs-2':
|
|
case 'utf16le':
|
|
case 'utf-16le':
|
|
return ucs2Write(this, string, offset, length);
|
|
|
|
default:
|
|
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
|
|
encoding = ('' + encoding).toLowerCase();
|
|
loweredCase = true;
|
|
}
|
|
}
|
|
};
|
|
|
|
Buffer.prototype.toJSON = function toJSON() {
|
|
return {
|
|
type: 'Buffer',
|
|
data: Array.prototype.slice.call(this._arr || this, 0)
|
|
};
|
|
};
|
|
|
|
function base64Slice(buf, start, end) {
|
|
if (start === 0 && end === buf.length) {
|
|
return base64.fromByteArray(buf);
|
|
} else {
|
|
return base64.fromByteArray(buf.slice(start, end));
|
|
}
|
|
}
|
|
|
|
function utf8Slice(buf, start, end) {
|
|
end = Math.min(buf.length, end);
|
|
var res = [];
|
|
var i = start;
|
|
|
|
while (i < end) {
|
|
var firstByte = buf[i];
|
|
var codePoint = null;
|
|
var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;
|
|
|
|
if (i + bytesPerSequence <= end) {
|
|
var secondByte, thirdByte, fourthByte, tempCodePoint;
|
|
|
|
switch (bytesPerSequence) {
|
|
case 1:
|
|
if (firstByte < 0x80) {
|
|
codePoint = firstByte;
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
secondByte = buf[i + 1];
|
|
|
|
if ((secondByte & 0xC0) === 0x80) {
|
|
tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;
|
|
|
|
if (tempCodePoint > 0x7F) {
|
|
codePoint = tempCodePoint;
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
secondByte = buf[i + 1];
|
|
thirdByte = buf[i + 2];
|
|
|
|
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
|
|
tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;
|
|
|
|
if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
|
|
codePoint = tempCodePoint;
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case 4:
|
|
secondByte = buf[i + 1];
|
|
thirdByte = buf[i + 2];
|
|
fourthByte = buf[i + 3];
|
|
|
|
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
|
|
tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;
|
|
|
|
if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
|
|
codePoint = tempCodePoint;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (codePoint === null) {
|
|
// we did not generate a valid codePoint so insert a
|
|
// replacement char (U+FFFD) and advance only 1 byte
|
|
codePoint = 0xFFFD;
|
|
bytesPerSequence = 1;
|
|
} else if (codePoint > 0xFFFF) {
|
|
// encode to utf16 (surrogate pair dance)
|
|
codePoint -= 0x10000;
|
|
res.push(codePoint >>> 10 & 0x3FF | 0xD800);
|
|
codePoint = 0xDC00 | codePoint & 0x3FF;
|
|
}
|
|
|
|
res.push(codePoint);
|
|
i += bytesPerSequence;
|
|
}
|
|
|
|
return decodeCodePointsArray(res);
|
|
} // Based on http://stackoverflow.com/a/22747272/680742, the browser with
|
|
// the lowest limit is Chrome, with 0x10000 args.
|
|
// We go 1 magnitude less, for safety
|
|
|
|
|
|
var MAX_ARGUMENTS_LENGTH = 0x1000;
|
|
|
|
function decodeCodePointsArray(codePoints) {
|
|
var len = codePoints.length;
|
|
|
|
if (len <= MAX_ARGUMENTS_LENGTH) {
|
|
return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
|
|
} // Decode in chunks to avoid "call stack size exceeded".
|
|
|
|
|
|
var res = '';
|
|
var i = 0;
|
|
|
|
while (i < len) {
|
|
res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
function asciiSlice(buf, start, end) {
|
|
var ret = '';
|
|
end = Math.min(buf.length, end);
|
|
|
|
for (var i = start; i < end; ++i) {
|
|
ret += String.fromCharCode(buf[i] & 0x7F);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
function latin1Slice(buf, start, end) {
|
|
var ret = '';
|
|
end = Math.min(buf.length, end);
|
|
|
|
for (var i = start; i < end; ++i) {
|
|
ret += String.fromCharCode(buf[i]);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
function hexSlice(buf, start, end) {
|
|
var len = buf.length;
|
|
if (!start || start < 0) start = 0;
|
|
if (!end || end < 0 || end > len) end = len;
|
|
var out = '';
|
|
|
|
for (var i = start; i < end; ++i) {
|
|
out += toHex(buf[i]);
|
|
}
|
|
|
|
return out;
|
|
}
|
|
|
|
function utf16leSlice(buf, start, end) {
|
|
var bytes = buf.slice(start, end);
|
|
var res = '';
|
|
|
|
for (var i = 0; i < bytes.length; i += 2) {
|
|
res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
Buffer.prototype.slice = function slice(start, end) {
|
|
var len = this.length;
|
|
start = ~~start;
|
|
end = end === undefined ? len : ~~end;
|
|
|
|
if (start < 0) {
|
|
start += len;
|
|
if (start < 0) start = 0;
|
|
} else if (start > len) {
|
|
start = len;
|
|
}
|
|
|
|
if (end < 0) {
|
|
end += len;
|
|
if (end < 0) end = 0;
|
|
} else if (end > len) {
|
|
end = len;
|
|
}
|
|
|
|
if (end < start) end = start;
|
|
var newBuf;
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
newBuf = this.subarray(start, end);
|
|
newBuf.__proto__ = Buffer.prototype;
|
|
} else {
|
|
var sliceLen = end - start;
|
|
newBuf = new Buffer(sliceLen, undefined);
|
|
|
|
for (var i = 0; i < sliceLen; ++i) {
|
|
newBuf[i] = this[i + start];
|
|
}
|
|
}
|
|
|
|
return newBuf;
|
|
};
|
|
/*
|
|
* Need to make sure that buffer isn't trying to write out of bounds.
|
|
*/
|
|
|
|
|
|
function checkOffset(offset, ext, length) {
|
|
if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');
|
|
if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');
|
|
}
|
|
|
|
Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {
|
|
offset = offset | 0;
|
|
byteLength = byteLength | 0;
|
|
if (!noAssert) checkOffset(offset, byteLength, this.length);
|
|
var val = this[offset];
|
|
var mul = 1;
|
|
var i = 0;
|
|
|
|
while (++i < byteLength && (mul *= 0x100)) {
|
|
val += this[offset + i] * mul;
|
|
}
|
|
|
|
return val;
|
|
};
|
|
|
|
Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {
|
|
offset = offset | 0;
|
|
byteLength = byteLength | 0;
|
|
|
|
if (!noAssert) {
|
|
checkOffset(offset, byteLength, this.length);
|
|
}
|
|
|
|
var val = this[offset + --byteLength];
|
|
var mul = 1;
|
|
|
|
while (byteLength > 0 && (mul *= 0x100)) {
|
|
val += this[offset + --byteLength] * mul;
|
|
}
|
|
|
|
return val;
|
|
};
|
|
|
|
Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 1, this.length);
|
|
return this[offset];
|
|
};
|
|
|
|
Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 2, this.length);
|
|
return this[offset] | this[offset + 1] << 8;
|
|
};
|
|
|
|
Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 2, this.length);
|
|
return this[offset] << 8 | this[offset + 1];
|
|
};
|
|
|
|
Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 4, this.length);
|
|
return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;
|
|
};
|
|
|
|
Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 4, this.length);
|
|
return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
|
|
};
|
|
|
|
Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
|
|
offset = offset | 0;
|
|
byteLength = byteLength | 0;
|
|
if (!noAssert) checkOffset(offset, byteLength, this.length);
|
|
var val = this[offset];
|
|
var mul = 1;
|
|
var i = 0;
|
|
|
|
while (++i < byteLength && (mul *= 0x100)) {
|
|
val += this[offset + i] * mul;
|
|
}
|
|
|
|
mul *= 0x80;
|
|
if (val >= mul) val -= Math.pow(2, 8 * byteLength);
|
|
return val;
|
|
};
|
|
|
|
Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
|
|
offset = offset | 0;
|
|
byteLength = byteLength | 0;
|
|
if (!noAssert) checkOffset(offset, byteLength, this.length);
|
|
var i = byteLength;
|
|
var mul = 1;
|
|
var val = this[offset + --i];
|
|
|
|
while (i > 0 && (mul *= 0x100)) {
|
|
val += this[offset + --i] * mul;
|
|
}
|
|
|
|
mul *= 0x80;
|
|
if (val >= mul) val -= Math.pow(2, 8 * byteLength);
|
|
return val;
|
|
};
|
|
|
|
Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 1, this.length);
|
|
if (!(this[offset] & 0x80)) return this[offset];
|
|
return (0xff - this[offset] + 1) * -1;
|
|
};
|
|
|
|
Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 2, this.length);
|
|
var val = this[offset] | this[offset + 1] << 8;
|
|
return val & 0x8000 ? val | 0xFFFF0000 : val;
|
|
};
|
|
|
|
Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 2, this.length);
|
|
var val = this[offset + 1] | this[offset] << 8;
|
|
return val & 0x8000 ? val | 0xFFFF0000 : val;
|
|
};
|
|
|
|
Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 4, this.length);
|
|
return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
|
|
};
|
|
|
|
Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 4, this.length);
|
|
return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
|
|
};
|
|
|
|
Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 4, this.length);
|
|
return ieee754.read(this, offset, true, 23, 4);
|
|
};
|
|
|
|
Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 4, this.length);
|
|
return ieee754.read(this, offset, false, 23, 4);
|
|
};
|
|
|
|
Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 8, this.length);
|
|
return ieee754.read(this, offset, true, 52, 8);
|
|
};
|
|
|
|
Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
|
|
if (!noAssert) checkOffset(offset, 8, this.length);
|
|
return ieee754.read(this, offset, false, 52, 8);
|
|
};
|
|
|
|
function checkInt(buf, value, offset, ext, max, min) {
|
|
if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance');
|
|
if (value > max || value < min) throw new RangeError('"value" argument is out of bounds');
|
|
if (offset + ext > buf.length) throw new RangeError('Index out of range');
|
|
}
|
|
|
|
Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
byteLength = byteLength | 0;
|
|
|
|
if (!noAssert) {
|
|
var maxBytes = Math.pow(2, 8 * byteLength) - 1;
|
|
checkInt(this, value, offset, byteLength, maxBytes, 0);
|
|
}
|
|
|
|
var mul = 1;
|
|
var i = 0;
|
|
this[offset] = value & 0xFF;
|
|
|
|
while (++i < byteLength && (mul *= 0x100)) {
|
|
this[offset + i] = value / mul & 0xFF;
|
|
}
|
|
|
|
return offset + byteLength;
|
|
};
|
|
|
|
Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
byteLength = byteLength | 0;
|
|
|
|
if (!noAssert) {
|
|
var maxBytes = Math.pow(2, 8 * byteLength) - 1;
|
|
checkInt(this, value, offset, byteLength, maxBytes, 0);
|
|
}
|
|
|
|
var i = byteLength - 1;
|
|
var mul = 1;
|
|
this[offset + i] = value & 0xFF;
|
|
|
|
while (--i >= 0 && (mul *= 0x100)) {
|
|
this[offset + i] = value / mul & 0xFF;
|
|
}
|
|
|
|
return offset + byteLength;
|
|
};
|
|
|
|
Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
|
|
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
|
|
this[offset] = value & 0xff;
|
|
return offset + 1;
|
|
};
|
|
|
|
function objectWriteUInt16(buf, value, offset, littleEndian) {
|
|
if (value < 0) value = 0xffff + value + 1;
|
|
|
|
for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
|
|
buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;
|
|
}
|
|
}
|
|
|
|
Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
this[offset] = value & 0xff;
|
|
this[offset + 1] = value >>> 8;
|
|
} else {
|
|
objectWriteUInt16(this, value, offset, true);
|
|
}
|
|
|
|
return offset + 2;
|
|
};
|
|
|
|
Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
this[offset] = value >>> 8;
|
|
this[offset + 1] = value & 0xff;
|
|
} else {
|
|
objectWriteUInt16(this, value, offset, false);
|
|
}
|
|
|
|
return offset + 2;
|
|
};
|
|
|
|
function objectWriteUInt32(buf, value, offset, littleEndian) {
|
|
if (value < 0) value = 0xffffffff + value + 1;
|
|
|
|
for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
|
|
buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;
|
|
}
|
|
}
|
|
|
|
Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
this[offset + 3] = value >>> 24;
|
|
this[offset + 2] = value >>> 16;
|
|
this[offset + 1] = value >>> 8;
|
|
this[offset] = value & 0xff;
|
|
} else {
|
|
objectWriteUInt32(this, value, offset, true);
|
|
}
|
|
|
|
return offset + 4;
|
|
};
|
|
|
|
Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
this[offset] = value >>> 24;
|
|
this[offset + 1] = value >>> 16;
|
|
this[offset + 2] = value >>> 8;
|
|
this[offset + 3] = value & 0xff;
|
|
} else {
|
|
objectWriteUInt32(this, value, offset, false);
|
|
}
|
|
|
|
return offset + 4;
|
|
};
|
|
|
|
Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
|
|
if (!noAssert) {
|
|
var limit = Math.pow(2, 8 * byteLength - 1);
|
|
checkInt(this, value, offset, byteLength, limit - 1, -limit);
|
|
}
|
|
|
|
var i = 0;
|
|
var mul = 1;
|
|
var sub = 0;
|
|
this[offset] = value & 0xFF;
|
|
|
|
while (++i < byteLength && (mul *= 0x100)) {
|
|
if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
|
|
sub = 1;
|
|
}
|
|
|
|
this[offset + i] = (value / mul >> 0) - sub & 0xFF;
|
|
}
|
|
|
|
return offset + byteLength;
|
|
};
|
|
|
|
Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
|
|
if (!noAssert) {
|
|
var limit = Math.pow(2, 8 * byteLength - 1);
|
|
checkInt(this, value, offset, byteLength, limit - 1, -limit);
|
|
}
|
|
|
|
var i = byteLength - 1;
|
|
var mul = 1;
|
|
var sub = 0;
|
|
this[offset + i] = value & 0xFF;
|
|
|
|
while (--i >= 0 && (mul *= 0x100)) {
|
|
if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
|
|
sub = 1;
|
|
}
|
|
|
|
this[offset + i] = (value / mul >> 0) - sub & 0xFF;
|
|
}
|
|
|
|
return offset + byteLength;
|
|
};
|
|
|
|
Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
|
|
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
|
|
if (value < 0) value = 0xff + value + 1;
|
|
this[offset] = value & 0xff;
|
|
return offset + 1;
|
|
};
|
|
|
|
Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
this[offset] = value & 0xff;
|
|
this[offset + 1] = value >>> 8;
|
|
} else {
|
|
objectWriteUInt16(this, value, offset, true);
|
|
}
|
|
|
|
return offset + 2;
|
|
};
|
|
|
|
Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
this[offset] = value >>> 8;
|
|
this[offset + 1] = value & 0xff;
|
|
} else {
|
|
objectWriteUInt16(this, value, offset, false);
|
|
}
|
|
|
|
return offset + 2;
|
|
};
|
|
|
|
Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
this[offset] = value & 0xff;
|
|
this[offset + 1] = value >>> 8;
|
|
this[offset + 2] = value >>> 16;
|
|
this[offset + 3] = value >>> 24;
|
|
} else {
|
|
objectWriteUInt32(this, value, offset, true);
|
|
}
|
|
|
|
return offset + 4;
|
|
};
|
|
|
|
Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
|
|
value = +value;
|
|
offset = offset | 0;
|
|
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
|
|
if (value < 0) value = 0xffffffff + value + 1;
|
|
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
this[offset] = value >>> 24;
|
|
this[offset + 1] = value >>> 16;
|
|
this[offset + 2] = value >>> 8;
|
|
this[offset + 3] = value & 0xff;
|
|
} else {
|
|
objectWriteUInt32(this, value, offset, false);
|
|
}
|
|
|
|
return offset + 4;
|
|
};
|
|
|
|
function checkIEEE754(buf, value, offset, ext, max, min) {
|
|
if (offset + ext > buf.length) throw new RangeError('Index out of range');
|
|
if (offset < 0) throw new RangeError('Index out of range');
|
|
}
|
|
|
|
function writeFloat(buf, value, offset, littleEndian, noAssert) {
|
|
if (!noAssert) {
|
|
checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);
|
|
}
|
|
|
|
ieee754.write(buf, value, offset, littleEndian, 23, 4);
|
|
return offset + 4;
|
|
}
|
|
|
|
Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
|
|
return writeFloat(this, value, offset, true, noAssert);
|
|
};
|
|
|
|
Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
|
|
return writeFloat(this, value, offset, false, noAssert);
|
|
};
|
|
|
|
function writeDouble(buf, value, offset, littleEndian, noAssert) {
|
|
if (!noAssert) {
|
|
checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);
|
|
}
|
|
|
|
ieee754.write(buf, value, offset, littleEndian, 52, 8);
|
|
return offset + 8;
|
|
}
|
|
|
|
Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
|
|
return writeDouble(this, value, offset, true, noAssert);
|
|
};
|
|
|
|
Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
|
|
return writeDouble(this, value, offset, false, noAssert);
|
|
}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
|
|
|
|
|
|
Buffer.prototype.copy = function copy(target, targetStart, start, end) {
|
|
if (!start) start = 0;
|
|
if (!end && end !== 0) end = this.length;
|
|
if (targetStart >= target.length) targetStart = target.length;
|
|
if (!targetStart) targetStart = 0;
|
|
if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done
|
|
|
|
if (end === start) return 0;
|
|
if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions
|
|
|
|
if (targetStart < 0) {
|
|
throw new RangeError('targetStart out of bounds');
|
|
}
|
|
|
|
if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');
|
|
if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?
|
|
|
|
if (end > this.length) end = this.length;
|
|
|
|
if (target.length - targetStart < end - start) {
|
|
end = target.length - targetStart + start;
|
|
}
|
|
|
|
var len = end - start;
|
|
var i;
|
|
|
|
if (this === target && start < targetStart && targetStart < end) {
|
|
// descending copy from end
|
|
for (i = len - 1; i >= 0; --i) {
|
|
target[i + targetStart] = this[i + start];
|
|
}
|
|
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
|
|
// ascending copy from start
|
|
for (i = 0; i < len; ++i) {
|
|
target[i + targetStart] = this[i + start];
|
|
}
|
|
} else {
|
|
Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);
|
|
}
|
|
|
|
return len;
|
|
}; // Usage:
|
|
// buffer.fill(number[, offset[, end]])
|
|
// buffer.fill(buffer[, offset[, end]])
|
|
// buffer.fill(string[, offset[, end]][, encoding])
|
|
|
|
|
|
Buffer.prototype.fill = function fill(val, start, end, encoding) {
|
|
// Handle string cases:
|
|
if (typeof val === 'string') {
|
|
if (typeof start === 'string') {
|
|
encoding = start;
|
|
start = 0;
|
|
end = this.length;
|
|
} else if (typeof end === 'string') {
|
|
encoding = end;
|
|
end = this.length;
|
|
}
|
|
|
|
if (val.length === 1) {
|
|
var code = val.charCodeAt(0);
|
|
|
|
if (code < 256) {
|
|
val = code;
|
|
}
|
|
}
|
|
|
|
if (encoding !== undefined && typeof encoding !== 'string') {
|
|
throw new TypeError('encoding must be a string');
|
|
}
|
|
|
|
if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
|
|
throw new TypeError('Unknown encoding: ' + encoding);
|
|
}
|
|
} else if (typeof val === 'number') {
|
|
val = val & 255;
|
|
} // Invalid ranges are not set to a default, so can range check early.
|
|
|
|
|
|
if (start < 0 || this.length < start || this.length < end) {
|
|
throw new RangeError('Out of range index');
|
|
}
|
|
|
|
if (end <= start) {
|
|
return this;
|
|
}
|
|
|
|
start = start >>> 0;
|
|
end = end === undefined ? this.length : end >>> 0;
|
|
if (!val) val = 0;
|
|
var i;
|
|
|
|
if (typeof val === 'number') {
|
|
for (i = start; i < end; ++i) {
|
|
this[i] = val;
|
|
}
|
|
} else {
|
|
var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());
|
|
var len = bytes.length;
|
|
|
|
for (i = 0; i < end - start; ++i) {
|
|
this[i + start] = bytes[i % len];
|
|
}
|
|
}
|
|
|
|
return this;
|
|
}; // HELPER FUNCTIONS
|
|
// ================
|
|
|
|
|
|
var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g;
|
|
|
|
function base64clean(str) {
|
|
// Node strips out invalid characters like \n and \t from the string, base64-js does not
|
|
str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''
|
|
|
|
if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
|
|
|
|
while (str.length % 4 !== 0) {
|
|
str = str + '=';
|
|
}
|
|
|
|
return str;
|
|
}
|
|
|
|
function stringtrim(str) {
|
|
if (str.trim) return str.trim();
|
|
return str.replace(/^\s+|\s+$/g, '');
|
|
}
|
|
|
|
function toHex(n) {
|
|
if (n < 16) return '0' + n.toString(16);
|
|
return n.toString(16);
|
|
}
|
|
|
|
function utf8ToBytes(string, units) {
|
|
units = units || Infinity;
|
|
var codePoint;
|
|
var length = string.length;
|
|
var leadSurrogate = null;
|
|
var bytes = [];
|
|
|
|
for (var i = 0; i < length; ++i) {
|
|
codePoint = string.charCodeAt(i); // is surrogate component
|
|
|
|
if (codePoint > 0xD7FF && codePoint < 0xE000) {
|
|
// last char was a lead
|
|
if (!leadSurrogate) {
|
|
// no lead yet
|
|
if (codePoint > 0xDBFF) {
|
|
// unexpected trail
|
|
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
|
|
continue;
|
|
} else if (i + 1 === length) {
|
|
// unpaired lead
|
|
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
|
|
continue;
|
|
} // valid lead
|
|
|
|
|
|
leadSurrogate = codePoint;
|
|
continue;
|
|
} // 2 leads in a row
|
|
|
|
|
|
if (codePoint < 0xDC00) {
|
|
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
|
|
leadSurrogate = codePoint;
|
|
continue;
|
|
} // valid surrogate pair
|
|
|
|
|
|
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
|
|
} else if (leadSurrogate) {
|
|
// valid bmp char, but last char was a lead
|
|
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
|
|
}
|
|
|
|
leadSurrogate = null; // encode utf8
|
|
|
|
if (codePoint < 0x80) {
|
|
if ((units -= 1) < 0) break;
|
|
bytes.push(codePoint);
|
|
} else if (codePoint < 0x800) {
|
|
if ((units -= 2) < 0) break;
|
|
bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);
|
|
} else if (codePoint < 0x10000) {
|
|
if ((units -= 3) < 0) break;
|
|
bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
|
|
} else if (codePoint < 0x110000) {
|
|
if ((units -= 4) < 0) break;
|
|
bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
|
|
} else {
|
|
throw new Error('Invalid code point');
|
|
}
|
|
}
|
|
|
|
return bytes;
|
|
}
|
|
|
|
function asciiToBytes(str) {
|
|
var byteArray = [];
|
|
|
|
for (var i = 0; i < str.length; ++i) {
|
|
// Node's code seems to be doing this and not & 0x7F..
|
|
byteArray.push(str.charCodeAt(i) & 0xFF);
|
|
}
|
|
|
|
return byteArray;
|
|
}
|
|
|
|
function utf16leToBytes(str, units) {
|
|
var c, hi, lo;
|
|
var byteArray = [];
|
|
|
|
for (var i = 0; i < str.length; ++i) {
|
|
if ((units -= 2) < 0) break;
|
|
c = str.charCodeAt(i);
|
|
hi = c >> 8;
|
|
lo = c % 256;
|
|
byteArray.push(lo);
|
|
byteArray.push(hi);
|
|
}
|
|
|
|
return byteArray;
|
|
}
|
|
|
|
function base64ToBytes(str) {
|
|
return base64.toByteArray(base64clean(str));
|
|
}
|
|
|
|
function blitBuffer(src, dst, offset, length) {
|
|
for (var i = 0; i < length; ++i) {
|
|
if (i + offset >= dst.length || i >= src.length) break;
|
|
dst[i + offset] = src[i];
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
function isnan(val) {
|
|
return val !== val; // eslint-disable-line no-self-compare
|
|
}
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/core-util-is/lib/util.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/core-util-is/lib/util.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
/* WEBPACK VAR INJECTION */(function(Buffer) {// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
// NOTE: These type checking functions intentionally don't use `instanceof`
|
|
// because it is fragile and can be easily faked with `Object.create()`.
|
|
function isArray(arg) {
|
|
if (Array.isArray) {
|
|
return Array.isArray(arg);
|
|
}
|
|
|
|
return objectToString(arg) === '[object Array]';
|
|
}
|
|
|
|
exports.isArray = isArray;
|
|
|
|
function isBoolean(arg) {
|
|
return typeof arg === 'boolean';
|
|
}
|
|
|
|
exports.isBoolean = isBoolean;
|
|
|
|
function isNull(arg) {
|
|
return arg === null;
|
|
}
|
|
|
|
exports.isNull = isNull;
|
|
|
|
function isNullOrUndefined(arg) {
|
|
return arg == null;
|
|
}
|
|
|
|
exports.isNullOrUndefined = isNullOrUndefined;
|
|
|
|
function isNumber(arg) {
|
|
return typeof arg === 'number';
|
|
}
|
|
|
|
exports.isNumber = isNumber;
|
|
|
|
function isString(arg) {
|
|
return typeof arg === 'string';
|
|
}
|
|
|
|
exports.isString = isString;
|
|
|
|
function isSymbol(arg) {
|
|
return typeof arg === 'symbol';
|
|
}
|
|
|
|
exports.isSymbol = isSymbol;
|
|
|
|
function isUndefined(arg) {
|
|
return arg === void 0;
|
|
}
|
|
|
|
exports.isUndefined = isUndefined;
|
|
|
|
function isRegExp(re) {
|
|
return objectToString(re) === '[object RegExp]';
|
|
}
|
|
|
|
exports.isRegExp = isRegExp;
|
|
|
|
function isObject(arg) {
|
|
return typeof arg === 'object' && arg !== null;
|
|
}
|
|
|
|
exports.isObject = isObject;
|
|
|
|
function isDate(d) {
|
|
return objectToString(d) === '[object Date]';
|
|
}
|
|
|
|
exports.isDate = isDate;
|
|
|
|
function isError(e) {
|
|
return objectToString(e) === '[object Error]' || e instanceof Error;
|
|
}
|
|
|
|
exports.isError = isError;
|
|
|
|
function isFunction(arg) {
|
|
return typeof arg === 'function';
|
|
}
|
|
|
|
exports.isFunction = isFunction;
|
|
|
|
function isPrimitive(arg) {
|
|
return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol
|
|
typeof arg === 'undefined';
|
|
}
|
|
|
|
exports.isPrimitive = isPrimitive;
|
|
exports.isBuffer = Buffer.isBuffer;
|
|
|
|
function objectToString(o) {
|
|
return Object.prototype.toString.call(o);
|
|
}
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ "./node_modules/buffer/index.js").Buffer))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/events/events.js":
|
|
/*!***************************************!*\
|
|
!*** ./node_modules/events/events.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
var R = typeof Reflect === 'object' ? Reflect : null;
|
|
var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {
|
|
return Function.prototype.apply.call(target, receiver, args);
|
|
};
|
|
var ReflectOwnKeys;
|
|
|
|
if (R && typeof R.ownKeys === 'function') {
|
|
ReflectOwnKeys = R.ownKeys;
|
|
} else if (Object.getOwnPropertySymbols) {
|
|
ReflectOwnKeys = function ReflectOwnKeys(target) {
|
|
return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
|
|
};
|
|
} else {
|
|
ReflectOwnKeys = function ReflectOwnKeys(target) {
|
|
return Object.getOwnPropertyNames(target);
|
|
};
|
|
}
|
|
|
|
function ProcessEmitWarning(warning) {
|
|
if (console && console.warn) console.warn(warning);
|
|
}
|
|
|
|
var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
|
|
return value !== value;
|
|
};
|
|
|
|
function EventEmitter() {
|
|
EventEmitter.init.call(this);
|
|
}
|
|
|
|
module.exports = EventEmitter; // Backwards-compat with node 0.10.x
|
|
|
|
EventEmitter.EventEmitter = EventEmitter;
|
|
EventEmitter.prototype._events = undefined;
|
|
EventEmitter.prototype._eventsCount = 0;
|
|
EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are
|
|
// added to it. This is a useful default which helps finding memory leaks.
|
|
|
|
var defaultMaxListeners = 10;
|
|
Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return defaultMaxListeners;
|
|
},
|
|
set: function (arg) {
|
|
if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
|
|
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
|
|
}
|
|
|
|
defaultMaxListeners = arg;
|
|
}
|
|
});
|
|
|
|
EventEmitter.init = function () {
|
|
if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {
|
|
this._events = Object.create(null);
|
|
this._eventsCount = 0;
|
|
}
|
|
|
|
this._maxListeners = this._maxListeners || undefined;
|
|
}; // Obviously not all Emitters should be limited to 10. This function allows
|
|
// that to be increased. Set to zero for unlimited.
|
|
|
|
|
|
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
|
|
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
|
|
throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
|
|
}
|
|
|
|
this._maxListeners = n;
|
|
return this;
|
|
};
|
|
|
|
function $getMaxListeners(that) {
|
|
if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;
|
|
return that._maxListeners;
|
|
}
|
|
|
|
EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
|
|
return $getMaxListeners(this);
|
|
};
|
|
|
|
EventEmitter.prototype.emit = function emit(type) {
|
|
var args = [];
|
|
|
|
for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
|
|
|
|
var doError = type === 'error';
|
|
var events = this._events;
|
|
if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw.
|
|
|
|
if (doError) {
|
|
var er;
|
|
if (args.length > 0) er = args[0];
|
|
|
|
if (er instanceof Error) {
|
|
// Note: The comments on the `throw` lines are intentional, they show
|
|
// up in Node's output if this results in an unhandled exception.
|
|
throw er; // Unhandled 'error' event
|
|
} // At least give some kind of context to the user
|
|
|
|
|
|
var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
|
|
err.context = er;
|
|
throw err; // Unhandled 'error' event
|
|
}
|
|
|
|
var handler = events[type];
|
|
if (handler === undefined) return false;
|
|
|
|
if (typeof handler === 'function') {
|
|
ReflectApply(handler, this, args);
|
|
} else {
|
|
var len = handler.length;
|
|
var listeners = arrayClone(handler, len);
|
|
|
|
for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
function _addListener(target, type, listener, prepend) {
|
|
var m;
|
|
var events;
|
|
var existing;
|
|
|
|
if (typeof listener !== 'function') {
|
|
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
|
|
}
|
|
|
|
events = target._events;
|
|
|
|
if (events === undefined) {
|
|
events = target._events = Object.create(null);
|
|
target._eventsCount = 0;
|
|
} else {
|
|
// To avoid recursion in the case that type === "newListener"! Before
|
|
// adding it to the listeners, first emit "newListener".
|
|
if (events.newListener !== undefined) {
|
|
target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the
|
|
// this._events to be assigned to a new object
|
|
|
|
events = target._events;
|
|
}
|
|
|
|
existing = events[type];
|
|
}
|
|
|
|
if (existing === undefined) {
|
|
// Optimize the case of one listener. Don't need the extra array object.
|
|
existing = events[type] = listener;
|
|
++target._eventsCount;
|
|
} else {
|
|
if (typeof existing === 'function') {
|
|
// Adding the second element, need to change to array.
|
|
existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append.
|
|
} else if (prepend) {
|
|
existing.unshift(listener);
|
|
} else {
|
|
existing.push(listener);
|
|
} // Check for listener leak
|
|
|
|
|
|
m = $getMaxListeners(target);
|
|
|
|
if (m > 0 && existing.length > m && !existing.warned) {
|
|
existing.warned = true; // No error code for this since it is a Warning
|
|
// eslint-disable-next-line no-restricted-syntax
|
|
|
|
var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');
|
|
w.name = 'MaxListenersExceededWarning';
|
|
w.emitter = target;
|
|
w.type = type;
|
|
w.count = existing.length;
|
|
ProcessEmitWarning(w);
|
|
}
|
|
}
|
|
|
|
return target;
|
|
}
|
|
|
|
EventEmitter.prototype.addListener = function addListener(type, listener) {
|
|
return _addListener(this, type, listener, false);
|
|
};
|
|
|
|
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
|
|
|
|
EventEmitter.prototype.prependListener = function prependListener(type, listener) {
|
|
return _addListener(this, type, listener, true);
|
|
};
|
|
|
|
function onceWrapper() {
|
|
var args = [];
|
|
|
|
for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);
|
|
|
|
if (!this.fired) {
|
|
this.target.removeListener(this.type, this.wrapFn);
|
|
this.fired = true;
|
|
ReflectApply(this.listener, this.target, args);
|
|
}
|
|
}
|
|
|
|
function _onceWrap(target, type, listener) {
|
|
var state = {
|
|
fired: false,
|
|
wrapFn: undefined,
|
|
target: target,
|
|
type: type,
|
|
listener: listener
|
|
};
|
|
var wrapped = onceWrapper.bind(state);
|
|
wrapped.listener = listener;
|
|
state.wrapFn = wrapped;
|
|
return wrapped;
|
|
}
|
|
|
|
EventEmitter.prototype.once = function once(type, listener) {
|
|
if (typeof listener !== 'function') {
|
|
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
|
|
}
|
|
|
|
this.on(type, _onceWrap(this, type, listener));
|
|
return this;
|
|
};
|
|
|
|
EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
|
|
if (typeof listener !== 'function') {
|
|
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
|
|
}
|
|
|
|
this.prependListener(type, _onceWrap(this, type, listener));
|
|
return this;
|
|
}; // Emits a 'removeListener' event if and only if the listener was removed.
|
|
|
|
|
|
EventEmitter.prototype.removeListener = function removeListener(type, listener) {
|
|
var list, events, position, i, originalListener;
|
|
|
|
if (typeof listener !== 'function') {
|
|
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
|
|
}
|
|
|
|
events = this._events;
|
|
if (events === undefined) return this;
|
|
list = events[type];
|
|
if (list === undefined) return this;
|
|
|
|
if (list === listener || list.listener === listener) {
|
|
if (--this._eventsCount === 0) this._events = Object.create(null);else {
|
|
delete events[type];
|
|
if (events.removeListener) this.emit('removeListener', type, list.listener || listener);
|
|
}
|
|
} else if (typeof list !== 'function') {
|
|
position = -1;
|
|
|
|
for (i = list.length - 1; i >= 0; i--) {
|
|
if (list[i] === listener || list[i].listener === listener) {
|
|
originalListener = list[i].listener;
|
|
position = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (position < 0) return this;
|
|
if (position === 0) list.shift();else {
|
|
spliceOne(list, position);
|
|
}
|
|
if (list.length === 1) events[type] = list[0];
|
|
if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
|
|
|
|
EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
|
|
var listeners, events, i;
|
|
events = this._events;
|
|
if (events === undefined) return this; // not listening for removeListener, no need to emit
|
|
|
|
if (events.removeListener === undefined) {
|
|
if (arguments.length === 0) {
|
|
this._events = Object.create(null);
|
|
this._eventsCount = 0;
|
|
} else if (events[type] !== undefined) {
|
|
if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];
|
|
}
|
|
|
|
return this;
|
|
} // emit removeListener for all listeners on all events
|
|
|
|
|
|
if (arguments.length === 0) {
|
|
var keys = Object.keys(events);
|
|
var key;
|
|
|
|
for (i = 0; i < keys.length; ++i) {
|
|
key = keys[i];
|
|
if (key === 'removeListener') continue;
|
|
this.removeAllListeners(key);
|
|
}
|
|
|
|
this.removeAllListeners('removeListener');
|
|
this._events = Object.create(null);
|
|
this._eventsCount = 0;
|
|
return this;
|
|
}
|
|
|
|
listeners = events[type];
|
|
|
|
if (typeof listeners === 'function') {
|
|
this.removeListener(type, listeners);
|
|
} else if (listeners !== undefined) {
|
|
// LIFO order
|
|
for (i = listeners.length - 1; i >= 0; i--) {
|
|
this.removeListener(type, listeners[i]);
|
|
}
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
function _listeners(target, type, unwrap) {
|
|
var events = target._events;
|
|
if (events === undefined) return [];
|
|
var evlistener = events[type];
|
|
if (evlistener === undefined) return [];
|
|
if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
|
|
}
|
|
|
|
EventEmitter.prototype.listeners = function listeners(type) {
|
|
return _listeners(this, type, true);
|
|
};
|
|
|
|
EventEmitter.prototype.rawListeners = function rawListeners(type) {
|
|
return _listeners(this, type, false);
|
|
};
|
|
|
|
EventEmitter.listenerCount = function (emitter, type) {
|
|
if (typeof emitter.listenerCount === 'function') {
|
|
return emitter.listenerCount(type);
|
|
} else {
|
|
return listenerCount.call(emitter, type);
|
|
}
|
|
};
|
|
|
|
EventEmitter.prototype.listenerCount = listenerCount;
|
|
|
|
function listenerCount(type) {
|
|
var events = this._events;
|
|
|
|
if (events !== undefined) {
|
|
var evlistener = events[type];
|
|
|
|
if (typeof evlistener === 'function') {
|
|
return 1;
|
|
} else if (evlistener !== undefined) {
|
|
return evlistener.length;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
EventEmitter.prototype.eventNames = function eventNames() {
|
|
return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
|
|
};
|
|
|
|
function arrayClone(arr, n) {
|
|
var copy = new Array(n);
|
|
|
|
for (var i = 0; i < n; ++i) copy[i] = arr[i];
|
|
|
|
return copy;
|
|
}
|
|
|
|
function spliceOne(list, index) {
|
|
for (; index + 1 < list.length; index++) list[index] = list[index + 1];
|
|
|
|
list.pop();
|
|
}
|
|
|
|
function unwrapListeners(arr) {
|
|
var ret = new Array(arr.length);
|
|
|
|
for (var i = 0; i < ret.length; ++i) {
|
|
ret[i] = arr[i].listener || arr[i];
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/fetch-readablestream/lib/defaultTransportFactory.js":
|
|
/*!**************************************************************************!*\
|
|
!*** ./node_modules/fetch-readablestream/lib/defaultTransportFactory.js ***!
|
|
\**************************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = defaultTransportFactory;
|
|
|
|
var _fetch = __webpack_require__(/*! ./fetch */ "./node_modules/fetch-readablestream/lib/fetch.js");
|
|
|
|
var _fetch2 = _interopRequireDefault(_fetch);
|
|
|
|
var _xhr = __webpack_require__(/*! ./xhr */ "./node_modules/fetch-readablestream/lib/xhr.js");
|
|
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
} // selected is used to cache the detected transport.
|
|
|
|
|
|
var selected = null; // defaultTransportFactory selects the most appropriate transport based on the
|
|
// capabilities of the current environment.
|
|
|
|
function defaultTransportFactory() {
|
|
if (!selected) {
|
|
selected = detectTransport();
|
|
}
|
|
|
|
return selected;
|
|
}
|
|
|
|
function detectTransport() {
|
|
if (typeof Response !== 'undefined' && Response.prototype.hasOwnProperty("body")) {
|
|
// fetch with ReadableStream support.
|
|
return _fetch2.default;
|
|
}
|
|
|
|
var mozChunked = 'moz-chunked-arraybuffer';
|
|
|
|
if (supportsXhrResponseType(mozChunked)) {
|
|
// Firefox, ArrayBuffer support.
|
|
return (0, _xhr.makeXhrTransport)({
|
|
responseType: mozChunked,
|
|
responseParserFactory: function responseParserFactory() {
|
|
return function (response) {
|
|
return new Uint8Array(response);
|
|
};
|
|
}
|
|
});
|
|
} // Bog-standard, expensive, text concatenation with byte encoding :(
|
|
|
|
|
|
return (0, _xhr.makeXhrTransport)({
|
|
responseType: 'text',
|
|
responseParserFactory: function responseParserFactory() {
|
|
var encoder = new TextEncoder();
|
|
var offset = 0;
|
|
return function (response) {
|
|
var chunk = response.substr(offset);
|
|
offset = response.length;
|
|
return encoder.encode(chunk, {
|
|
stream: true
|
|
});
|
|
};
|
|
}
|
|
});
|
|
}
|
|
|
|
function supportsXhrResponseType(type) {
|
|
try {
|
|
var tmpXhr = new XMLHttpRequest();
|
|
tmpXhr.responseType = type;
|
|
return tmpXhr.responseType === type;
|
|
} catch (e) {
|
|
/* IE throws on setting responseType to an unsupported value */
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/fetch-readablestream/lib/entry.js":
|
|
/*!********************************************************!*\
|
|
!*** ./node_modules/fetch-readablestream/lib/entry.js ***!
|
|
\********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(/*! ./index */ "./node_modules/fetch-readablestream/lib/index.js").default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/fetch-readablestream/lib/fetch.js":
|
|
/*!********************************************************!*\
|
|
!*** ./node_modules/fetch-readablestream/lib/fetch.js ***!
|
|
\********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = fetchRequest; // thin wrapper around `fetch()` to ensure we only expose the properties provided by
|
|
// the XHR polyfil; / fetch-readablestream Response API.
|
|
|
|
function fetchRequest(url, options) {
|
|
return fetch(url, options).then(function (r) {
|
|
return {
|
|
body: r.body,
|
|
headers: r.headers,
|
|
ok: r.ok,
|
|
status: r.status,
|
|
statusText: r.statusText,
|
|
url: r.url
|
|
};
|
|
});
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/fetch-readablestream/lib/index.js":
|
|
/*!********************************************************!*\
|
|
!*** ./node_modules/fetch-readablestream/lib/index.js ***!
|
|
\********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = fetchStream;
|
|
|
|
var _defaultTransportFactory = __webpack_require__(/*! ./defaultTransportFactory */ "./node_modules/fetch-readablestream/lib/defaultTransportFactory.js");
|
|
|
|
var _defaultTransportFactory2 = _interopRequireDefault(_defaultTransportFactory);
|
|
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
|
|
function fetchStream(url) {
|
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
var transport = options.transport;
|
|
|
|
if (!transport) {
|
|
transport = fetchStream.transportFactory();
|
|
}
|
|
|
|
return transport(url, options);
|
|
} // override this function to delegate to an alternative transport function selection
|
|
// strategy; useful when testing.
|
|
|
|
|
|
fetchStream.transportFactory = _defaultTransportFactory2.default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/fetch-readablestream/lib/polyfill/Headers.js":
|
|
/*!*******************************************************************!*\
|
|
!*** ./node_modules/fetch-readablestream/lib/polyfill/Headers.js ***!
|
|
\*******************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _createClass = function () {
|
|
function defineProperties(target, props) {
|
|
for (var i = 0; i < props.length; i++) {
|
|
var descriptor = props[i];
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
descriptor.configurable = true;
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
}
|
|
}
|
|
|
|
return function (Constructor, protoProps, staticProps) {
|
|
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
|
if (staticProps) defineProperties(Constructor, staticProps);
|
|
return Constructor;
|
|
};
|
|
}();
|
|
|
|
function _defineProperty(obj, key, value) {
|
|
if (key in obj) {
|
|
Object.defineProperty(obj, key, {
|
|
value: value,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
});
|
|
} else {
|
|
obj[key] = value;
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
function _classCallCheck(instance, Constructor) {
|
|
if (!(instance instanceof Constructor)) {
|
|
throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
} // Headers is a partial polyfill for the HTML5 Headers class.
|
|
|
|
|
|
var Headers = exports.Headers = function () {
|
|
function Headers() {
|
|
var _this = this;
|
|
|
|
var h = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
|
_classCallCheck(this, Headers);
|
|
|
|
this.h = {};
|
|
|
|
if (h instanceof Headers) {
|
|
h.forEach(function (value, key) {
|
|
return _this.append(key, value);
|
|
});
|
|
}
|
|
|
|
Object.getOwnPropertyNames(h).forEach(function (key) {
|
|
return _this.append(key, h[key]);
|
|
});
|
|
}
|
|
|
|
_createClass(Headers, [{
|
|
key: "append",
|
|
value: function append(key, value) {
|
|
key = key.toLowerCase();
|
|
|
|
if (!Array.isArray(this.h[key])) {
|
|
this.h[key] = [];
|
|
}
|
|
|
|
this.h[key].push(value);
|
|
}
|
|
}, {
|
|
key: "set",
|
|
value: function set(key, value) {
|
|
this.h[key.toLowerCase()] = [value];
|
|
}
|
|
}, {
|
|
key: "has",
|
|
value: function has(key) {
|
|
return Array.isArray(this.h[key.toLowerCase()]);
|
|
}
|
|
}, {
|
|
key: "get",
|
|
value: function get(key) {
|
|
key = key.toLowerCase();
|
|
|
|
if (Array.isArray(this.h[key])) {
|
|
return this.h[key][0];
|
|
}
|
|
}
|
|
}, {
|
|
key: "getAll",
|
|
value: function getAll(key) {
|
|
return this.h[key.toLowerCase()].concat();
|
|
}
|
|
}, {
|
|
key: "entries",
|
|
value: function entries() {
|
|
var items = [];
|
|
this.forEach(function (value, key) {
|
|
items.push([key, value]);
|
|
});
|
|
return makeIterator(items);
|
|
} // forEach is not part of the official spec.
|
|
|
|
}, {
|
|
key: "forEach",
|
|
value: function forEach(callback, thisArg) {
|
|
var _this2 = this;
|
|
|
|
Object.getOwnPropertyNames(this.h).forEach(function (key) {
|
|
_this2.h[key].forEach(function (value) {
|
|
return callback.call(thisArg, value, key, _this2);
|
|
});
|
|
}, this);
|
|
}
|
|
}]);
|
|
|
|
return Headers;
|
|
}();
|
|
|
|
function makeIterator(items) {
|
|
return _defineProperty({
|
|
next: function next() {
|
|
var value = items.shift();
|
|
return {
|
|
done: value === undefined,
|
|
value: value
|
|
};
|
|
}
|
|
}, Symbol.iterator, function () {
|
|
return this;
|
|
});
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/fetch-readablestream/lib/xhr.js":
|
|
/*!******************************************************!*\
|
|
!*** ./node_modules/fetch-readablestream/lib/xhr.js ***!
|
|
\******************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.makeXhrTransport = makeXhrTransport;
|
|
exports.parseResposneHeaders = parseResposneHeaders;
|
|
|
|
var _Headers = __webpack_require__(/*! ./polyfill/Headers */ "./node_modules/fetch-readablestream/lib/polyfill/Headers.js");
|
|
|
|
function createAbortError() {
|
|
// From https://github.com/mo/abortcontroller-polyfill/blob/master/src/abortableFetch.js#L56-L64
|
|
try {
|
|
return new DOMException('Aborted', 'AbortError');
|
|
} catch (err) {
|
|
// IE 11 does not support calling the DOMException constructor, use a
|
|
// regular error object on it instead.
|
|
var abortError = new Error('Aborted');
|
|
abortError.name = 'AbortError';
|
|
return abortError;
|
|
}
|
|
}
|
|
|
|
function makeXhrTransport(_ref) {
|
|
var responseType = _ref.responseType,
|
|
responseParserFactory = _ref.responseParserFactory;
|
|
return function xhrTransport(url, options) {
|
|
var xhr = new XMLHttpRequest();
|
|
var responseParser = responseParserFactory();
|
|
var responseStreamController = void 0;
|
|
var cancelled = false;
|
|
var responseStream = new ReadableStream({
|
|
start: function start(c) {
|
|
responseStreamController = c;
|
|
},
|
|
cancel: function cancel() {
|
|
cancelled = true;
|
|
xhr.abort();
|
|
}
|
|
});
|
|
var _options$method = options.method,
|
|
method = _options$method === undefined ? 'GET' : _options$method,
|
|
signal = options.signal;
|
|
xhr.open(method, url);
|
|
xhr.responseType = responseType;
|
|
xhr.withCredentials = options.credentials !== 'omit';
|
|
|
|
if (options.headers) {
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = options.headers.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var pair = _step.value;
|
|
xhr.setRequestHeader(pair[0], pair[1]);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
if (options.body && (method === 'GET' || method === 'HEAD')) {
|
|
reject(new TypeError("Failed to execute 'fetchStream' on 'Window': Request with GET/HEAD method cannot have body"));
|
|
}
|
|
|
|
if (signal) {
|
|
if (signal.aborted) {
|
|
// If already aborted, reject immediately & send nothing.
|
|
reject(createAbortError());
|
|
return;
|
|
} else {
|
|
signal.addEventListener('abort', function () {
|
|
// If we abort later, kill the XHR & reject the promise if possible.
|
|
xhr.abort();
|
|
|
|
if (responseStreamController) {
|
|
responseStreamController.error(createAbortError());
|
|
}
|
|
|
|
reject(createAbortError());
|
|
}, {
|
|
once: true
|
|
});
|
|
}
|
|
}
|
|
|
|
xhr.onreadystatechange = function () {
|
|
if (xhr.readyState === xhr.HEADERS_RECEIVED) {
|
|
return resolve({
|
|
body: responseStream,
|
|
headers: parseResposneHeaders(xhr.getAllResponseHeaders()),
|
|
ok: xhr.status >= 200 && xhr.status < 300,
|
|
status: xhr.status,
|
|
statusText: xhr.statusText,
|
|
url: makeResponseUrl(xhr.responseURL, url)
|
|
});
|
|
}
|
|
};
|
|
|
|
xhr.onerror = function () {
|
|
return reject(new TypeError('Network request failed'));
|
|
};
|
|
|
|
xhr.ontimeout = function () {
|
|
reject(new TypeError('Network request failed'));
|
|
};
|
|
|
|
xhr.onprogress = function () {
|
|
if (!cancelled) {
|
|
var bytes = responseParser(xhr.response);
|
|
responseStreamController.enqueue(bytes);
|
|
}
|
|
};
|
|
|
|
xhr.onload = function () {
|
|
responseStreamController.close();
|
|
};
|
|
|
|
xhr.send(options.body);
|
|
});
|
|
};
|
|
}
|
|
|
|
function makeHeaders() {
|
|
// Prefer the native method if provided by the browser.
|
|
if (typeof Headers !== 'undefined') {
|
|
return new Headers();
|
|
}
|
|
|
|
return new _Headers.Headers();
|
|
}
|
|
|
|
function makeResponseUrl(responseUrl, requestUrl) {
|
|
if (!responseUrl) {
|
|
// best guess; note this will not correctly handle redirects.
|
|
if (requestUrl.substring(0, 4) !== "http") {
|
|
return location.origin + requestUrl;
|
|
}
|
|
|
|
return requestUrl;
|
|
}
|
|
|
|
return responseUrl;
|
|
}
|
|
|
|
function parseResposneHeaders(str) {
|
|
var hdrs = makeHeaders();
|
|
|
|
if (str) {
|
|
var pairs = str.split('\r\n');
|
|
|
|
for (var i = 0; i < pairs.length; i++) {
|
|
var p = pairs[i];
|
|
var index = p.indexOf(': ');
|
|
|
|
if (index > 0) {
|
|
var key = p.substring(0, index);
|
|
var value = p.substring(index + 2);
|
|
hdrs.append(key, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
return hdrs;
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/ieee754/index.js":
|
|
/*!***************************************!*\
|
|
!*** ./node_modules/ieee754/index.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
|
|
var e, m;
|
|
var eLen = nBytes * 8 - mLen - 1;
|
|
var eMax = (1 << eLen) - 1;
|
|
var eBias = eMax >> 1;
|
|
var nBits = -7;
|
|
var i = isLE ? nBytes - 1 : 0;
|
|
var d = isLE ? -1 : 1;
|
|
var s = buffer[offset + i];
|
|
i += d;
|
|
e = s & (1 << -nBits) - 1;
|
|
s >>= -nBits;
|
|
nBits += eLen;
|
|
|
|
for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
|
|
|
|
m = e & (1 << -nBits) - 1;
|
|
e >>= -nBits;
|
|
nBits += mLen;
|
|
|
|
for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
|
|
|
|
if (e === 0) {
|
|
e = 1 - eBias;
|
|
} else if (e === eMax) {
|
|
return m ? NaN : (s ? -1 : 1) * Infinity;
|
|
} else {
|
|
m = m + Math.pow(2, mLen);
|
|
e = e - eBias;
|
|
}
|
|
|
|
return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
|
|
};
|
|
|
|
exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
|
|
var e, m, c;
|
|
var eLen = nBytes * 8 - mLen - 1;
|
|
var eMax = (1 << eLen) - 1;
|
|
var eBias = eMax >> 1;
|
|
var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
|
|
var i = isLE ? 0 : nBytes - 1;
|
|
var d = isLE ? 1 : -1;
|
|
var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
|
|
value = Math.abs(value);
|
|
|
|
if (isNaN(value) || value === Infinity) {
|
|
m = isNaN(value) ? 1 : 0;
|
|
e = eMax;
|
|
} else {
|
|
e = Math.floor(Math.log(value) / Math.LN2);
|
|
|
|
if (value * (c = Math.pow(2, -e)) < 1) {
|
|
e--;
|
|
c *= 2;
|
|
}
|
|
|
|
if (e + eBias >= 1) {
|
|
value += rt / c;
|
|
} else {
|
|
value += rt * Math.pow(2, 1 - eBias);
|
|
}
|
|
|
|
if (value * c >= 2) {
|
|
e++;
|
|
c /= 2;
|
|
}
|
|
|
|
if (e + eBias >= eMax) {
|
|
m = 0;
|
|
e = eMax;
|
|
} else if (e + eBias >= 1) {
|
|
m = (value * c - 1) * Math.pow(2, mLen);
|
|
e = e + eBias;
|
|
} else {
|
|
m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
|
|
e = 0;
|
|
}
|
|
}
|
|
|
|
for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
|
|
|
|
e = e << mLen | m;
|
|
eLen += mLen;
|
|
|
|
for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
|
|
|
|
buffer[offset + i - d] |= s * 128;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/inherits/inherits_browser.js":
|
|
/*!***************************************************!*\
|
|
!*** ./node_modules/inherits/inherits_browser.js ***!
|
|
\***************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
if (typeof Object.create === 'function') {
|
|
// implementation from standard node.js 'util' module
|
|
module.exports = function inherits(ctor, superCtor) {
|
|
ctor.super_ = superCtor;
|
|
ctor.prototype = Object.create(superCtor.prototype, {
|
|
constructor: {
|
|
value: ctor,
|
|
enumerable: false,
|
|
writable: true,
|
|
configurable: true
|
|
}
|
|
});
|
|
};
|
|
} else {
|
|
// old school shim for old browsers
|
|
module.exports = function inherits(ctor, superCtor) {
|
|
ctor.super_ = superCtor;
|
|
|
|
var TempCtor = function () {};
|
|
|
|
TempCtor.prototype = superCtor.prototype;
|
|
ctor.prototype = new TempCtor();
|
|
ctor.prototype.constructor = ctor;
|
|
};
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/isarray/index.js":
|
|
/*!***************************************!*\
|
|
!*** ./node_modules/isarray/index.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
var toString = {}.toString;
|
|
|
|
module.exports = Array.isArray || function (arr) {
|
|
return toString.call(arr) == '[object Array]';
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/index.js":
|
|
/*!************************************!*\
|
|
!*** ./node_modules/pako/index.js ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// Top level file is just a mixin of submodules & constants
|
|
|
|
|
|
var assign = __webpack_require__(/*! ./lib/utils/common */ "./node_modules/pako/lib/utils/common.js").assign;
|
|
|
|
var deflate = __webpack_require__(/*! ./lib/deflate */ "./node_modules/pako/lib/deflate.js");
|
|
|
|
var inflate = __webpack_require__(/*! ./lib/inflate */ "./node_modules/pako/lib/inflate.js");
|
|
|
|
var constants = __webpack_require__(/*! ./lib/zlib/constants */ "./node_modules/pako/lib/zlib/constants.js");
|
|
|
|
var pako = {};
|
|
assign(pako, deflate, inflate, constants);
|
|
module.exports = pako;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/deflate.js":
|
|
/*!******************************************!*\
|
|
!*** ./node_modules/pako/lib/deflate.js ***!
|
|
\******************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var zlib_deflate = __webpack_require__(/*! ./zlib/deflate */ "./node_modules/pako/lib/zlib/deflate.js");
|
|
|
|
var utils = __webpack_require__(/*! ./utils/common */ "./node_modules/pako/lib/utils/common.js");
|
|
|
|
var strings = __webpack_require__(/*! ./utils/strings */ "./node_modules/pako/lib/utils/strings.js");
|
|
|
|
var msg = __webpack_require__(/*! ./zlib/messages */ "./node_modules/pako/lib/zlib/messages.js");
|
|
|
|
var ZStream = __webpack_require__(/*! ./zlib/zstream */ "./node_modules/pako/lib/zlib/zstream.js");
|
|
|
|
var toString = Object.prototype.toString;
|
|
/* Public constants ==========================================================*/
|
|
|
|
/* ===========================================================================*/
|
|
|
|
var Z_NO_FLUSH = 0;
|
|
var Z_FINISH = 4;
|
|
var Z_OK = 0;
|
|
var Z_STREAM_END = 1;
|
|
var Z_SYNC_FLUSH = 2;
|
|
var Z_DEFAULT_COMPRESSION = -1;
|
|
var Z_DEFAULT_STRATEGY = 0;
|
|
var Z_DEFLATED = 8;
|
|
/* ===========================================================================*/
|
|
|
|
/**
|
|
* class Deflate
|
|
*
|
|
* Generic JS-style wrapper for zlib calls. If you don't need
|
|
* streaming behaviour - use more simple functions: [[deflate]],
|
|
* [[deflateRaw]] and [[gzip]].
|
|
**/
|
|
|
|
/* internal
|
|
* Deflate.chunks -> Array
|
|
*
|
|
* Chunks of output data, if [[Deflate#onData]] not overridden.
|
|
**/
|
|
|
|
/**
|
|
* Deflate.result -> Uint8Array|Array
|
|
*
|
|
* Compressed result, generated by default [[Deflate#onData]]
|
|
* and [[Deflate#onEnd]] handlers. Filled after you push last chunk
|
|
* (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you
|
|
* push a chunk with explicit flush (call [[Deflate#push]] with
|
|
* `Z_SYNC_FLUSH` param).
|
|
**/
|
|
|
|
/**
|
|
* Deflate.err -> Number
|
|
*
|
|
* Error code after deflate finished. 0 (Z_OK) on success.
|
|
* You will not need it in real life, because deflate errors
|
|
* are possible only on wrong options or bad `onData` / `onEnd`
|
|
* custom handlers.
|
|
**/
|
|
|
|
/**
|
|
* Deflate.msg -> String
|
|
*
|
|
* Error message, if [[Deflate.err]] != 0
|
|
**/
|
|
|
|
/**
|
|
* new Deflate(options)
|
|
* - options (Object): zlib deflate options.
|
|
*
|
|
* Creates new deflator instance with specified params. Throws exception
|
|
* on bad params. Supported options:
|
|
*
|
|
* - `level`
|
|
* - `windowBits`
|
|
* - `memLevel`
|
|
* - `strategy`
|
|
* - `dictionary`
|
|
*
|
|
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
|
|
* for more information on these.
|
|
*
|
|
* Additional options, for internal needs:
|
|
*
|
|
* - `chunkSize` - size of generated data chunks (16K by default)
|
|
* - `raw` (Boolean) - do raw deflate
|
|
* - `gzip` (Boolean) - create gzip wrapper
|
|
* - `to` (String) - if equal to 'string', then result will be "binary string"
|
|
* (each char code [0..255])
|
|
* - `header` (Object) - custom header for gzip
|
|
* - `text` (Boolean) - true if compressed data believed to be text
|
|
* - `time` (Number) - modification time, unix timestamp
|
|
* - `os` (Number) - operation system code
|
|
* - `extra` (Array) - array of bytes with extra data (max 65536)
|
|
* - `name` (String) - file name (binary string)
|
|
* - `comment` (String) - comment (binary string)
|
|
* - `hcrc` (Boolean) - true if header crc should be added
|
|
*
|
|
* ##### Example:
|
|
*
|
|
* ```javascript
|
|
* var pako = require('pako')
|
|
* , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
|
|
* , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
|
|
*
|
|
* var deflate = new pako.Deflate({ level: 3});
|
|
*
|
|
* deflate.push(chunk1, false);
|
|
* deflate.push(chunk2, true); // true -> last chunk
|
|
*
|
|
* if (deflate.err) { throw new Error(deflate.err); }
|
|
*
|
|
* console.log(deflate.result);
|
|
* ```
|
|
**/
|
|
|
|
function Deflate(options) {
|
|
if (!(this instanceof Deflate)) return new Deflate(options);
|
|
this.options = utils.assign({
|
|
level: Z_DEFAULT_COMPRESSION,
|
|
method: Z_DEFLATED,
|
|
chunkSize: 16384,
|
|
windowBits: 15,
|
|
memLevel: 8,
|
|
strategy: Z_DEFAULT_STRATEGY,
|
|
to: ''
|
|
}, options || {});
|
|
var opt = this.options;
|
|
|
|
if (opt.raw && opt.windowBits > 0) {
|
|
opt.windowBits = -opt.windowBits;
|
|
} else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) {
|
|
opt.windowBits += 16;
|
|
}
|
|
|
|
this.err = 0; // error code, if happens (0 = Z_OK)
|
|
|
|
this.msg = ''; // error message
|
|
|
|
this.ended = false; // used to avoid multiple onEnd() calls
|
|
|
|
this.chunks = []; // chunks of compressed data
|
|
|
|
this.strm = new ZStream();
|
|
this.strm.avail_out = 0;
|
|
var status = zlib_deflate.deflateInit2(this.strm, opt.level, opt.method, opt.windowBits, opt.memLevel, opt.strategy);
|
|
|
|
if (status !== Z_OK) {
|
|
throw new Error(msg[status]);
|
|
}
|
|
|
|
if (opt.header) {
|
|
zlib_deflate.deflateSetHeader(this.strm, opt.header);
|
|
}
|
|
|
|
if (opt.dictionary) {
|
|
var dict; // Convert data if needed
|
|
|
|
if (typeof opt.dictionary === 'string') {
|
|
// If we need to compress text, change encoding to utf8.
|
|
dict = strings.string2buf(opt.dictionary);
|
|
} else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
|
|
dict = new Uint8Array(opt.dictionary);
|
|
} else {
|
|
dict = opt.dictionary;
|
|
}
|
|
|
|
status = zlib_deflate.deflateSetDictionary(this.strm, dict);
|
|
|
|
if (status !== Z_OK) {
|
|
throw new Error(msg[status]);
|
|
}
|
|
|
|
this._dict_set = true;
|
|
}
|
|
}
|
|
/**
|
|
* Deflate#push(data[, mode]) -> Boolean
|
|
* - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be
|
|
* converted to utf8 byte sequence.
|
|
* - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
|
|
* See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
|
|
*
|
|
* Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
|
|
* new compressed chunks. Returns `true` on success. The last data block must have
|
|
* mode Z_FINISH (or `true`). That will flush internal pending buffers and call
|
|
* [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you
|
|
* can use mode Z_SYNC_FLUSH, keeping the compression context.
|
|
*
|
|
* On fail call [[Deflate#onEnd]] with error code and return false.
|
|
*
|
|
* We strongly recommend to use `Uint8Array` on input for best speed (output
|
|
* array format is detected automatically). Also, don't skip last param and always
|
|
* use the same type in your code (boolean or number). That will improve JS speed.
|
|
*
|
|
* For regular `Array`-s make sure all elements are [0..255].
|
|
*
|
|
* ##### Example
|
|
*
|
|
* ```javascript
|
|
* push(chunk, false); // push one of data chunks
|
|
* ...
|
|
* push(chunk, true); // push last chunk
|
|
* ```
|
|
**/
|
|
|
|
|
|
Deflate.prototype.push = function (data, mode) {
|
|
var strm = this.strm;
|
|
var chunkSize = this.options.chunkSize;
|
|
|
|
var status, _mode;
|
|
|
|
if (this.ended) {
|
|
return false;
|
|
}
|
|
|
|
_mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH; // Convert data if needed
|
|
|
|
if (typeof data === 'string') {
|
|
// If we need to compress text, change encoding to utf8.
|
|
strm.input = strings.string2buf(data);
|
|
} else if (toString.call(data) === '[object ArrayBuffer]') {
|
|
strm.input = new Uint8Array(data);
|
|
} else {
|
|
strm.input = data;
|
|
}
|
|
|
|
strm.next_in = 0;
|
|
strm.avail_in = strm.input.length;
|
|
|
|
do {
|
|
if (strm.avail_out === 0) {
|
|
strm.output = new utils.Buf8(chunkSize);
|
|
strm.next_out = 0;
|
|
strm.avail_out = chunkSize;
|
|
}
|
|
|
|
status = zlib_deflate.deflate(strm, _mode);
|
|
/* no bad return value */
|
|
|
|
if (status !== Z_STREAM_END && status !== Z_OK) {
|
|
this.onEnd(status);
|
|
this.ended = true;
|
|
return false;
|
|
}
|
|
|
|
if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) {
|
|
if (this.options.to === 'string') {
|
|
this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));
|
|
} else {
|
|
this.onData(utils.shrinkBuf(strm.output, strm.next_out));
|
|
}
|
|
}
|
|
} while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); // Finalize on the last chunk.
|
|
|
|
|
|
if (_mode === Z_FINISH) {
|
|
status = zlib_deflate.deflateEnd(this.strm);
|
|
this.onEnd(status);
|
|
this.ended = true;
|
|
return status === Z_OK;
|
|
} // callback interim results if Z_SYNC_FLUSH.
|
|
|
|
|
|
if (_mode === Z_SYNC_FLUSH) {
|
|
this.onEnd(Z_OK);
|
|
strm.avail_out = 0;
|
|
return true;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
/**
|
|
* Deflate#onData(chunk) -> Void
|
|
* - chunk (Uint8Array|Array|String): output data. Type of array depends
|
|
* on js engine support. When string output requested, each chunk
|
|
* will be string.
|
|
*
|
|
* By default, stores data blocks in `chunks[]` property and glue
|
|
* those in `onEnd`. Override this handler, if you need another behaviour.
|
|
**/
|
|
|
|
|
|
Deflate.prototype.onData = function (chunk) {
|
|
this.chunks.push(chunk);
|
|
};
|
|
/**
|
|
* Deflate#onEnd(status) -> Void
|
|
* - status (Number): deflate status. 0 (Z_OK) on success,
|
|
* other if not.
|
|
*
|
|
* Called once after you tell deflate that the input stream is
|
|
* complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
|
|
* or if an error happened. By default - join collected chunks,
|
|
* free memory and fill `results` / `err` properties.
|
|
**/
|
|
|
|
|
|
Deflate.prototype.onEnd = function (status) {
|
|
// On success - join
|
|
if (status === Z_OK) {
|
|
if (this.options.to === 'string') {
|
|
this.result = this.chunks.join('');
|
|
} else {
|
|
this.result = utils.flattenChunks(this.chunks);
|
|
}
|
|
}
|
|
|
|
this.chunks = [];
|
|
this.err = status;
|
|
this.msg = this.strm.msg;
|
|
};
|
|
/**
|
|
* deflate(data[, options]) -> Uint8Array|Array|String
|
|
* - data (Uint8Array|Array|String): input data to compress.
|
|
* - options (Object): zlib deflate options.
|
|
*
|
|
* Compress `data` with deflate algorithm and `options`.
|
|
*
|
|
* Supported options are:
|
|
*
|
|
* - level
|
|
* - windowBits
|
|
* - memLevel
|
|
* - strategy
|
|
* - dictionary
|
|
*
|
|
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
|
|
* for more information on these.
|
|
*
|
|
* Sugar (options):
|
|
*
|
|
* - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
|
|
* negative windowBits implicitly.
|
|
* - `to` (String) - if equal to 'string', then result will be "binary string"
|
|
* (each char code [0..255])
|
|
*
|
|
* ##### Example:
|
|
*
|
|
* ```javascript
|
|
* var pako = require('pako')
|
|
* , data = Uint8Array([1,2,3,4,5,6,7,8,9]);
|
|
*
|
|
* console.log(pako.deflate(data));
|
|
* ```
|
|
**/
|
|
|
|
|
|
function deflate(input, options) {
|
|
var deflator = new Deflate(options);
|
|
deflator.push(input, true); // That will never happens, if you don't cheat with options :)
|
|
|
|
if (deflator.err) {
|
|
throw deflator.msg || msg[deflator.err];
|
|
}
|
|
|
|
return deflator.result;
|
|
}
|
|
/**
|
|
* deflateRaw(data[, options]) -> Uint8Array|Array|String
|
|
* - data (Uint8Array|Array|String): input data to compress.
|
|
* - options (Object): zlib deflate options.
|
|
*
|
|
* The same as [[deflate]], but creates raw data, without wrapper
|
|
* (header and adler32 crc).
|
|
**/
|
|
|
|
|
|
function deflateRaw(input, options) {
|
|
options = options || {};
|
|
options.raw = true;
|
|
return deflate(input, options);
|
|
}
|
|
/**
|
|
* gzip(data[, options]) -> Uint8Array|Array|String
|
|
* - data (Uint8Array|Array|String): input data to compress.
|
|
* - options (Object): zlib deflate options.
|
|
*
|
|
* The same as [[deflate]], but create gzip wrapper instead of
|
|
* deflate one.
|
|
**/
|
|
|
|
|
|
function gzip(input, options) {
|
|
options = options || {};
|
|
options.gzip = true;
|
|
return deflate(input, options);
|
|
}
|
|
|
|
exports.Deflate = Deflate;
|
|
exports.deflate = deflate;
|
|
exports.deflateRaw = deflateRaw;
|
|
exports.gzip = gzip;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/inflate.js":
|
|
/*!******************************************!*\
|
|
!*** ./node_modules/pako/lib/inflate.js ***!
|
|
\******************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var zlib_inflate = __webpack_require__(/*! ./zlib/inflate */ "./node_modules/pako/lib/zlib/inflate.js");
|
|
|
|
var utils = __webpack_require__(/*! ./utils/common */ "./node_modules/pako/lib/utils/common.js");
|
|
|
|
var strings = __webpack_require__(/*! ./utils/strings */ "./node_modules/pako/lib/utils/strings.js");
|
|
|
|
var c = __webpack_require__(/*! ./zlib/constants */ "./node_modules/pako/lib/zlib/constants.js");
|
|
|
|
var msg = __webpack_require__(/*! ./zlib/messages */ "./node_modules/pako/lib/zlib/messages.js");
|
|
|
|
var ZStream = __webpack_require__(/*! ./zlib/zstream */ "./node_modules/pako/lib/zlib/zstream.js");
|
|
|
|
var GZheader = __webpack_require__(/*! ./zlib/gzheader */ "./node_modules/pako/lib/zlib/gzheader.js");
|
|
|
|
var toString = Object.prototype.toString;
|
|
/**
|
|
* class Inflate
|
|
*
|
|
* Generic JS-style wrapper for zlib calls. If you don't need
|
|
* streaming behaviour - use more simple functions: [[inflate]]
|
|
* and [[inflateRaw]].
|
|
**/
|
|
|
|
/* internal
|
|
* inflate.chunks -> Array
|
|
*
|
|
* Chunks of output data, if [[Inflate#onData]] not overridden.
|
|
**/
|
|
|
|
/**
|
|
* Inflate.result -> Uint8Array|Array|String
|
|
*
|
|
* Uncompressed result, generated by default [[Inflate#onData]]
|
|
* and [[Inflate#onEnd]] handlers. Filled after you push last chunk
|
|
* (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you
|
|
* push a chunk with explicit flush (call [[Inflate#push]] with
|
|
* `Z_SYNC_FLUSH` param).
|
|
**/
|
|
|
|
/**
|
|
* Inflate.err -> Number
|
|
*
|
|
* Error code after inflate finished. 0 (Z_OK) on success.
|
|
* Should be checked if broken data possible.
|
|
**/
|
|
|
|
/**
|
|
* Inflate.msg -> String
|
|
*
|
|
* Error message, if [[Inflate.err]] != 0
|
|
**/
|
|
|
|
/**
|
|
* new Inflate(options)
|
|
* - options (Object): zlib inflate options.
|
|
*
|
|
* Creates new inflator instance with specified params. Throws exception
|
|
* on bad params. Supported options:
|
|
*
|
|
* - `windowBits`
|
|
* - `dictionary`
|
|
*
|
|
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
|
|
* for more information on these.
|
|
*
|
|
* Additional options, for internal needs:
|
|
*
|
|
* - `chunkSize` - size of generated data chunks (16K by default)
|
|
* - `raw` (Boolean) - do raw inflate
|
|
* - `to` (String) - if equal to 'string', then result will be converted
|
|
* from utf8 to utf16 (javascript) string. When string output requested,
|
|
* chunk length can differ from `chunkSize`, depending on content.
|
|
*
|
|
* By default, when no options set, autodetect deflate/gzip data format via
|
|
* wrapper header.
|
|
*
|
|
* ##### Example:
|
|
*
|
|
* ```javascript
|
|
* var pako = require('pako')
|
|
* , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
|
|
* , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
|
|
*
|
|
* var inflate = new pako.Inflate({ level: 3});
|
|
*
|
|
* inflate.push(chunk1, false);
|
|
* inflate.push(chunk2, true); // true -> last chunk
|
|
*
|
|
* if (inflate.err) { throw new Error(inflate.err); }
|
|
*
|
|
* console.log(inflate.result);
|
|
* ```
|
|
**/
|
|
|
|
function Inflate(options) {
|
|
if (!(this instanceof Inflate)) return new Inflate(options);
|
|
this.options = utils.assign({
|
|
chunkSize: 16384,
|
|
windowBits: 0,
|
|
to: ''
|
|
}, options || {});
|
|
var opt = this.options; // Force window size for `raw` data, if not set directly,
|
|
// because we have no header for autodetect.
|
|
|
|
if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
|
|
opt.windowBits = -opt.windowBits;
|
|
|
|
if (opt.windowBits === 0) {
|
|
opt.windowBits = -15;
|
|
}
|
|
} // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
|
|
|
|
|
|
if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) {
|
|
opt.windowBits += 32;
|
|
} // Gzip header has no info about windows size, we can do autodetect only
|
|
// for deflate. So, if window size not set, force it to max when gzip possible
|
|
|
|
|
|
if (opt.windowBits > 15 && opt.windowBits < 48) {
|
|
// bit 3 (16) -> gzipped data
|
|
// bit 4 (32) -> autodetect gzip/deflate
|
|
if ((opt.windowBits & 15) === 0) {
|
|
opt.windowBits |= 15;
|
|
}
|
|
}
|
|
|
|
this.err = 0; // error code, if happens (0 = Z_OK)
|
|
|
|
this.msg = ''; // error message
|
|
|
|
this.ended = false; // used to avoid multiple onEnd() calls
|
|
|
|
this.chunks = []; // chunks of compressed data
|
|
|
|
this.strm = new ZStream();
|
|
this.strm.avail_out = 0;
|
|
var status = zlib_inflate.inflateInit2(this.strm, opt.windowBits);
|
|
|
|
if (status !== c.Z_OK) {
|
|
throw new Error(msg[status]);
|
|
}
|
|
|
|
this.header = new GZheader();
|
|
zlib_inflate.inflateGetHeader(this.strm, this.header); // Setup dictionary
|
|
|
|
if (opt.dictionary) {
|
|
// Convert data if needed
|
|
if (typeof opt.dictionary === 'string') {
|
|
opt.dictionary = strings.string2buf(opt.dictionary);
|
|
} else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
|
|
opt.dictionary = new Uint8Array(opt.dictionary);
|
|
}
|
|
|
|
if (opt.raw) {
|
|
//In raw mode we need to set the dictionary early
|
|
status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);
|
|
|
|
if (status !== c.Z_OK) {
|
|
throw new Error(msg[status]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Inflate#push(data[, mode]) -> Boolean
|
|
* - data (Uint8Array|Array|ArrayBuffer|String): input data
|
|
* - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
|
|
* See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
|
|
*
|
|
* Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
|
|
* new output chunks. Returns `true` on success. The last data block must have
|
|
* mode Z_FINISH (or `true`). That will flush internal pending buffers and call
|
|
* [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you
|
|
* can use mode Z_SYNC_FLUSH, keeping the decompression context.
|
|
*
|
|
* On fail call [[Inflate#onEnd]] with error code and return false.
|
|
*
|
|
* We strongly recommend to use `Uint8Array` on input for best speed (output
|
|
* format is detected automatically). Also, don't skip last param and always
|
|
* use the same type in your code (boolean or number). That will improve JS speed.
|
|
*
|
|
* For regular `Array`-s make sure all elements are [0..255].
|
|
*
|
|
* ##### Example
|
|
*
|
|
* ```javascript
|
|
* push(chunk, false); // push one of data chunks
|
|
* ...
|
|
* push(chunk, true); // push last chunk
|
|
* ```
|
|
**/
|
|
|
|
|
|
Inflate.prototype.push = function (data, mode) {
|
|
var strm = this.strm;
|
|
var chunkSize = this.options.chunkSize;
|
|
var dictionary = this.options.dictionary;
|
|
|
|
var status, _mode;
|
|
|
|
var next_out_utf8, tail, utf8str; // Flag to properly process Z_BUF_ERROR on testing inflate call
|
|
// when we check that all output data was flushed.
|
|
|
|
var allowBufError = false;
|
|
|
|
if (this.ended) {
|
|
return false;
|
|
}
|
|
|
|
_mode = mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH; // Convert data if needed
|
|
|
|
if (typeof data === 'string') {
|
|
// Only binary strings can be decompressed on practice
|
|
strm.input = strings.binstring2buf(data);
|
|
} else if (toString.call(data) === '[object ArrayBuffer]') {
|
|
strm.input = new Uint8Array(data);
|
|
} else {
|
|
strm.input = data;
|
|
}
|
|
|
|
strm.next_in = 0;
|
|
strm.avail_in = strm.input.length;
|
|
|
|
do {
|
|
if (strm.avail_out === 0) {
|
|
strm.output = new utils.Buf8(chunkSize);
|
|
strm.next_out = 0;
|
|
strm.avail_out = chunkSize;
|
|
}
|
|
|
|
status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);
|
|
/* no bad return value */
|
|
|
|
if (status === c.Z_NEED_DICT && dictionary) {
|
|
status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);
|
|
}
|
|
|
|
if (status === c.Z_BUF_ERROR && allowBufError === true) {
|
|
status = c.Z_OK;
|
|
allowBufError = false;
|
|
}
|
|
|
|
if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
|
|
this.onEnd(status);
|
|
this.ended = true;
|
|
return false;
|
|
}
|
|
|
|
if (strm.next_out) {
|
|
if (strm.avail_out === 0 || status === c.Z_STREAM_END || strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) {
|
|
if (this.options.to === 'string') {
|
|
next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
|
|
tail = strm.next_out - next_out_utf8;
|
|
utf8str = strings.buf2string(strm.output, next_out_utf8); // move tail
|
|
|
|
strm.next_out = tail;
|
|
strm.avail_out = chunkSize - tail;
|
|
|
|
if (tail) {
|
|
utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0);
|
|
}
|
|
|
|
this.onData(utf8str);
|
|
} else {
|
|
this.onData(utils.shrinkBuf(strm.output, strm.next_out));
|
|
}
|
|
}
|
|
} // When no more input data, we should check that internal inflate buffers
|
|
// are flushed. The only way to do it when avail_out = 0 - run one more
|
|
// inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.
|
|
// Here we set flag to process this error properly.
|
|
//
|
|
// NOTE. Deflate does not return error in this case and does not needs such
|
|
// logic.
|
|
|
|
|
|
if (strm.avail_in === 0 && strm.avail_out === 0) {
|
|
allowBufError = true;
|
|
}
|
|
} while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);
|
|
|
|
if (status === c.Z_STREAM_END) {
|
|
_mode = c.Z_FINISH;
|
|
} // Finalize on the last chunk.
|
|
|
|
|
|
if (_mode === c.Z_FINISH) {
|
|
status = zlib_inflate.inflateEnd(this.strm);
|
|
this.onEnd(status);
|
|
this.ended = true;
|
|
return status === c.Z_OK;
|
|
} // callback interim results if Z_SYNC_FLUSH.
|
|
|
|
|
|
if (_mode === c.Z_SYNC_FLUSH) {
|
|
this.onEnd(c.Z_OK);
|
|
strm.avail_out = 0;
|
|
return true;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
/**
|
|
* Inflate#onData(chunk) -> Void
|
|
* - chunk (Uint8Array|Array|String): output data. Type of array depends
|
|
* on js engine support. When string output requested, each chunk
|
|
* will be string.
|
|
*
|
|
* By default, stores data blocks in `chunks[]` property and glue
|
|
* those in `onEnd`. Override this handler, if you need another behaviour.
|
|
**/
|
|
|
|
|
|
Inflate.prototype.onData = function (chunk) {
|
|
this.chunks.push(chunk);
|
|
};
|
|
/**
|
|
* Inflate#onEnd(status) -> Void
|
|
* - status (Number): inflate status. 0 (Z_OK) on success,
|
|
* other if not.
|
|
*
|
|
* Called either after you tell inflate that the input stream is
|
|
* complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
|
|
* or if an error happened. By default - join collected chunks,
|
|
* free memory and fill `results` / `err` properties.
|
|
**/
|
|
|
|
|
|
Inflate.prototype.onEnd = function (status) {
|
|
// On success - join
|
|
if (status === c.Z_OK) {
|
|
if (this.options.to === 'string') {
|
|
// Glue & convert here, until we teach pako to send
|
|
// utf8 aligned strings to onData
|
|
this.result = this.chunks.join('');
|
|
} else {
|
|
this.result = utils.flattenChunks(this.chunks);
|
|
}
|
|
}
|
|
|
|
this.chunks = [];
|
|
this.err = status;
|
|
this.msg = this.strm.msg;
|
|
};
|
|
/**
|
|
* inflate(data[, options]) -> Uint8Array|Array|String
|
|
* - data (Uint8Array|Array|String): input data to decompress.
|
|
* - options (Object): zlib inflate options.
|
|
*
|
|
* Decompress `data` with inflate/ungzip and `options`. Autodetect
|
|
* format via wrapper header by default. That's why we don't provide
|
|
* separate `ungzip` method.
|
|
*
|
|
* Supported options are:
|
|
*
|
|
* - windowBits
|
|
*
|
|
* [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
|
|
* for more information.
|
|
*
|
|
* Sugar (options):
|
|
*
|
|
* - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
|
|
* negative windowBits implicitly.
|
|
* - `to` (String) - if equal to 'string', then result will be converted
|
|
* from utf8 to utf16 (javascript) string. When string output requested,
|
|
* chunk length can differ from `chunkSize`, depending on content.
|
|
*
|
|
*
|
|
* ##### Example:
|
|
*
|
|
* ```javascript
|
|
* var pako = require('pako')
|
|
* , input = pako.deflate([1,2,3,4,5,6,7,8,9])
|
|
* , output;
|
|
*
|
|
* try {
|
|
* output = pako.inflate(input);
|
|
* } catch (err)
|
|
* console.log(err);
|
|
* }
|
|
* ```
|
|
**/
|
|
|
|
|
|
function inflate(input, options) {
|
|
var inflator = new Inflate(options);
|
|
inflator.push(input, true); // That will never happens, if you don't cheat with options :)
|
|
|
|
if (inflator.err) {
|
|
throw inflator.msg || msg[inflator.err];
|
|
}
|
|
|
|
return inflator.result;
|
|
}
|
|
/**
|
|
* inflateRaw(data[, options]) -> Uint8Array|Array|String
|
|
* - data (Uint8Array|Array|String): input data to decompress.
|
|
* - options (Object): zlib inflate options.
|
|
*
|
|
* The same as [[inflate]], but creates raw data, without wrapper
|
|
* (header and adler32 crc).
|
|
**/
|
|
|
|
|
|
function inflateRaw(input, options) {
|
|
options = options || {};
|
|
options.raw = true;
|
|
return inflate(input, options);
|
|
}
|
|
/**
|
|
* ungzip(data[, options]) -> Uint8Array|Array|String
|
|
* - data (Uint8Array|Array|String): input data to decompress.
|
|
* - options (Object): zlib inflate options.
|
|
*
|
|
* Just shortcut to [[inflate]], because it autodetects format
|
|
* by header.content. Done for convenience.
|
|
**/
|
|
|
|
|
|
exports.Inflate = Inflate;
|
|
exports.inflate = inflate;
|
|
exports.inflateRaw = inflateRaw;
|
|
exports.ungzip = inflate;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/utils/common.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/pako/lib/utils/common.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var TYPED_OK = typeof Uint8Array !== 'undefined' && typeof Uint16Array !== 'undefined' && typeof Int32Array !== 'undefined';
|
|
|
|
function _has(obj, key) {
|
|
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
}
|
|
|
|
exports.assign = function (obj
|
|
/*from1, from2, from3, ...*/
|
|
) {
|
|
var sources = Array.prototype.slice.call(arguments, 1);
|
|
|
|
while (sources.length) {
|
|
var source = sources.shift();
|
|
|
|
if (!source) {
|
|
continue;
|
|
}
|
|
|
|
if (typeof source !== 'object') {
|
|
throw new TypeError(source + 'must be non-object');
|
|
}
|
|
|
|
for (var p in source) {
|
|
if (_has(source, p)) {
|
|
obj[p] = source[p];
|
|
}
|
|
}
|
|
}
|
|
|
|
return obj;
|
|
}; // reduce buffer size, avoiding mem copy
|
|
|
|
|
|
exports.shrinkBuf = function (buf, size) {
|
|
if (buf.length === size) {
|
|
return buf;
|
|
}
|
|
|
|
if (buf.subarray) {
|
|
return buf.subarray(0, size);
|
|
}
|
|
|
|
buf.length = size;
|
|
return buf;
|
|
};
|
|
|
|
var fnTyped = {
|
|
arraySet: function (dest, src, src_offs, len, dest_offs) {
|
|
if (src.subarray && dest.subarray) {
|
|
dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
|
|
return;
|
|
} // Fallback to ordinary array
|
|
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
dest[dest_offs + i] = src[src_offs + i];
|
|
}
|
|
},
|
|
// Join array of chunks to single array.
|
|
flattenChunks: function (chunks) {
|
|
var i, l, len, pos, chunk, result; // calculate data length
|
|
|
|
len = 0;
|
|
|
|
for (i = 0, l = chunks.length; i < l; i++) {
|
|
len += chunks[i].length;
|
|
} // join chunks
|
|
|
|
|
|
result = new Uint8Array(len);
|
|
pos = 0;
|
|
|
|
for (i = 0, l = chunks.length; i < l; i++) {
|
|
chunk = chunks[i];
|
|
result.set(chunk, pos);
|
|
pos += chunk.length;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
};
|
|
var fnUntyped = {
|
|
arraySet: function (dest, src, src_offs, len, dest_offs) {
|
|
for (var i = 0; i < len; i++) {
|
|
dest[dest_offs + i] = src[src_offs + i];
|
|
}
|
|
},
|
|
// Join array of chunks to single array.
|
|
flattenChunks: function (chunks) {
|
|
return [].concat.apply([], chunks);
|
|
}
|
|
}; // Enable/Disable typed arrays use, for testing
|
|
//
|
|
|
|
exports.setTyped = function (on) {
|
|
if (on) {
|
|
exports.Buf8 = Uint8Array;
|
|
exports.Buf16 = Uint16Array;
|
|
exports.Buf32 = Int32Array;
|
|
exports.assign(exports, fnTyped);
|
|
} else {
|
|
exports.Buf8 = Array;
|
|
exports.Buf16 = Array;
|
|
exports.Buf32 = Array;
|
|
exports.assign(exports, fnUntyped);
|
|
}
|
|
};
|
|
|
|
exports.setTyped(TYPED_OK);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/utils/strings.js":
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/pako/lib/utils/strings.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// String encode/decode helpers
|
|
|
|
|
|
var utils = __webpack_require__(/*! ./common */ "./node_modules/pako/lib/utils/common.js"); // Quick check if we can use fast array to bin string conversion
|
|
//
|
|
// - apply(Array) can fail on Android 2.2
|
|
// - apply(Uint8Array) can fail on iOS 5.1 Safari
|
|
//
|
|
|
|
|
|
var STR_APPLY_OK = true;
|
|
var STR_APPLY_UIA_OK = true;
|
|
|
|
try {
|
|
String.fromCharCode.apply(null, [0]);
|
|
} catch (__) {
|
|
STR_APPLY_OK = false;
|
|
}
|
|
|
|
try {
|
|
String.fromCharCode.apply(null, new Uint8Array(1));
|
|
} catch (__) {
|
|
STR_APPLY_UIA_OK = false;
|
|
} // Table with utf8 lengths (calculated by first byte of sequence)
|
|
// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
|
|
// because max possible codepoint is 0x10ffff
|
|
|
|
|
|
var _utf8len = new utils.Buf8(256);
|
|
|
|
for (var q = 0; q < 256; q++) {
|
|
_utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;
|
|
}
|
|
|
|
_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
|
|
// convert string to array (typed, when possible)
|
|
|
|
exports.string2buf = function (str) {
|
|
var buf,
|
|
c,
|
|
c2,
|
|
m_pos,
|
|
i,
|
|
str_len = str.length,
|
|
buf_len = 0; // count binary size
|
|
|
|
for (m_pos = 0; m_pos < str_len; m_pos++) {
|
|
c = str.charCodeAt(m_pos);
|
|
|
|
if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
|
|
c2 = str.charCodeAt(m_pos + 1);
|
|
|
|
if ((c2 & 0xfc00) === 0xdc00) {
|
|
c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);
|
|
m_pos++;
|
|
}
|
|
}
|
|
|
|
buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
|
|
} // allocate buffer
|
|
|
|
|
|
buf = new utils.Buf8(buf_len); // convert
|
|
|
|
for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
|
|
c = str.charCodeAt(m_pos);
|
|
|
|
if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
|
|
c2 = str.charCodeAt(m_pos + 1);
|
|
|
|
if ((c2 & 0xfc00) === 0xdc00) {
|
|
c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);
|
|
m_pos++;
|
|
}
|
|
}
|
|
|
|
if (c < 0x80) {
|
|
/* one byte */
|
|
buf[i++] = c;
|
|
} else if (c < 0x800) {
|
|
/* two bytes */
|
|
buf[i++] = 0xC0 | c >>> 6;
|
|
buf[i++] = 0x80 | c & 0x3f;
|
|
} else if (c < 0x10000) {
|
|
/* three bytes */
|
|
buf[i++] = 0xE0 | c >>> 12;
|
|
buf[i++] = 0x80 | c >>> 6 & 0x3f;
|
|
buf[i++] = 0x80 | c & 0x3f;
|
|
} else {
|
|
/* four bytes */
|
|
buf[i++] = 0xf0 | c >>> 18;
|
|
buf[i++] = 0x80 | c >>> 12 & 0x3f;
|
|
buf[i++] = 0x80 | c >>> 6 & 0x3f;
|
|
buf[i++] = 0x80 | c & 0x3f;
|
|
}
|
|
}
|
|
|
|
return buf;
|
|
}; // Helper (used in 2 places)
|
|
|
|
|
|
function buf2binstring(buf, len) {
|
|
// On Chrome, the arguments in a function call that are allowed is `65534`.
|
|
// If the length of the buffer is smaller than that, we can use this optimization,
|
|
// otherwise we will take a slower path.
|
|
if (len < 65534) {
|
|
if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) {
|
|
return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
|
|
}
|
|
}
|
|
|
|
var result = '';
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
result += String.fromCharCode(buf[i]);
|
|
}
|
|
|
|
return result;
|
|
} // Convert byte array to binary string
|
|
|
|
|
|
exports.buf2binstring = function (buf) {
|
|
return buf2binstring(buf, buf.length);
|
|
}; // Convert binary string (typed, when possible)
|
|
|
|
|
|
exports.binstring2buf = function (str) {
|
|
var buf = new utils.Buf8(str.length);
|
|
|
|
for (var i = 0, len = buf.length; i < len; i++) {
|
|
buf[i] = str.charCodeAt(i);
|
|
}
|
|
|
|
return buf;
|
|
}; // convert array to string
|
|
|
|
|
|
exports.buf2string = function (buf, max) {
|
|
var i, out, c, c_len;
|
|
var len = max || buf.length; // Reserve max possible length (2 words per char)
|
|
// NB: by unknown reasons, Array is significantly faster for
|
|
// String.fromCharCode.apply than Uint16Array.
|
|
|
|
var utf16buf = new Array(len * 2);
|
|
|
|
for (out = 0, i = 0; i < len;) {
|
|
c = buf[i++]; // quick process ascii
|
|
|
|
if (c < 0x80) {
|
|
utf16buf[out++] = c;
|
|
continue;
|
|
}
|
|
|
|
c_len = _utf8len[c]; // skip 5 & 6 byte codes
|
|
|
|
if (c_len > 4) {
|
|
utf16buf[out++] = 0xfffd;
|
|
i += c_len - 1;
|
|
continue;
|
|
} // apply mask on first byte
|
|
|
|
|
|
c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; // join the rest
|
|
|
|
while (c_len > 1 && i < len) {
|
|
c = c << 6 | buf[i++] & 0x3f;
|
|
c_len--;
|
|
} // terminated by end of string?
|
|
|
|
|
|
if (c_len > 1) {
|
|
utf16buf[out++] = 0xfffd;
|
|
continue;
|
|
}
|
|
|
|
if (c < 0x10000) {
|
|
utf16buf[out++] = c;
|
|
} else {
|
|
c -= 0x10000;
|
|
utf16buf[out++] = 0xd800 | c >> 10 & 0x3ff;
|
|
utf16buf[out++] = 0xdc00 | c & 0x3ff;
|
|
}
|
|
}
|
|
|
|
return buf2binstring(utf16buf, out);
|
|
}; // Calculate max possible position in utf8 buffer,
|
|
// that will not break sequence. If that's not possible
|
|
// - (very small limits) return max size as is.
|
|
//
|
|
// buf[] - utf8 bytes array
|
|
// max - length limit (mandatory);
|
|
|
|
|
|
exports.utf8border = function (buf, max) {
|
|
var pos;
|
|
max = max || buf.length;
|
|
|
|
if (max > buf.length) {
|
|
max = buf.length;
|
|
} // go back from last position, until start of sequence found
|
|
|
|
|
|
pos = max - 1;
|
|
|
|
while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) {
|
|
pos--;
|
|
} // Very small and broken sequence,
|
|
// return max, because we should return something anyway.
|
|
|
|
|
|
if (pos < 0) {
|
|
return max;
|
|
} // If we came to start of buffer - that means buffer is too small,
|
|
// return max too.
|
|
|
|
|
|
if (pos === 0) {
|
|
return max;
|
|
}
|
|
|
|
return pos + _utf8len[buf[pos]] > max ? pos : max;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/adler32.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/adler32.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// Note: adler32 takes 12% for level 0 and 2% for level 6.
|
|
// It isn't worth it to make additional optimizations as in original.
|
|
// Small size is preferable.
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
function adler32(adler, buf, len, pos) {
|
|
var s1 = adler & 0xffff | 0,
|
|
s2 = adler >>> 16 & 0xffff | 0,
|
|
n = 0;
|
|
|
|
while (len !== 0) {
|
|
// Set limit ~ twice less than 5552, to keep
|
|
// s2 in 31-bits, because we force signed ints.
|
|
// in other case %= will fail.
|
|
n = len > 2000 ? 2000 : len;
|
|
len -= n;
|
|
|
|
do {
|
|
s1 = s1 + buf[pos++] | 0;
|
|
s2 = s2 + s1 | 0;
|
|
} while (--n);
|
|
|
|
s1 %= 65521;
|
|
s2 %= 65521;
|
|
}
|
|
|
|
return s1 | s2 << 16 | 0;
|
|
}
|
|
|
|
module.exports = adler32;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/constants.js":
|
|
/*!*************************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/constants.js ***!
|
|
\*************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
module.exports = {
|
|
/* Allowed flush values; see deflate() and inflate() below for details */
|
|
Z_NO_FLUSH: 0,
|
|
Z_PARTIAL_FLUSH: 1,
|
|
Z_SYNC_FLUSH: 2,
|
|
Z_FULL_FLUSH: 3,
|
|
Z_FINISH: 4,
|
|
Z_BLOCK: 5,
|
|
Z_TREES: 6,
|
|
|
|
/* Return codes for the compression/decompression functions. Negative values
|
|
* are errors, positive values are used for special but normal events.
|
|
*/
|
|
Z_OK: 0,
|
|
Z_STREAM_END: 1,
|
|
Z_NEED_DICT: 2,
|
|
Z_ERRNO: -1,
|
|
Z_STREAM_ERROR: -2,
|
|
Z_DATA_ERROR: -3,
|
|
//Z_MEM_ERROR: -4,
|
|
Z_BUF_ERROR: -5,
|
|
//Z_VERSION_ERROR: -6,
|
|
|
|
/* compression levels */
|
|
Z_NO_COMPRESSION: 0,
|
|
Z_BEST_SPEED: 1,
|
|
Z_BEST_COMPRESSION: 9,
|
|
Z_DEFAULT_COMPRESSION: -1,
|
|
Z_FILTERED: 1,
|
|
Z_HUFFMAN_ONLY: 2,
|
|
Z_RLE: 3,
|
|
Z_FIXED: 4,
|
|
Z_DEFAULT_STRATEGY: 0,
|
|
|
|
/* Possible values of the data_type field (though see inflate()) */
|
|
Z_BINARY: 0,
|
|
Z_TEXT: 1,
|
|
//Z_ASCII: 1, // = Z_TEXT (deprecated)
|
|
Z_UNKNOWN: 2,
|
|
|
|
/* The deflate compression method */
|
|
Z_DEFLATED: 8 //Z_NULL: null // Use -1 or null inline, depending on var type
|
|
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/crc32.js":
|
|
/*!*********************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/crc32.js ***!
|
|
\*********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// Note: we can't get significant speed boost here.
|
|
// So write code to minimize size - no pregenerated tables
|
|
// and array tools dependencies.
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
// Use ordinary array, since untyped makes no boost here
|
|
|
|
function makeTable() {
|
|
var c,
|
|
table = [];
|
|
|
|
for (var n = 0; n < 256; n++) {
|
|
c = n;
|
|
|
|
for (var k = 0; k < 8; k++) {
|
|
c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;
|
|
}
|
|
|
|
table[n] = c;
|
|
}
|
|
|
|
return table;
|
|
} // Create table on load. Just 255 signed longs. Not a problem.
|
|
|
|
|
|
var crcTable = makeTable();
|
|
|
|
function crc32(crc, buf, len, pos) {
|
|
var t = crcTable,
|
|
end = pos + len;
|
|
crc ^= -1;
|
|
|
|
for (var i = pos; i < end; i++) {
|
|
crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];
|
|
}
|
|
|
|
return crc ^ -1; // >>> 0;
|
|
}
|
|
|
|
module.exports = crc32;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/deflate.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/deflate.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
var utils = __webpack_require__(/*! ../utils/common */ "./node_modules/pako/lib/utils/common.js");
|
|
|
|
var trees = __webpack_require__(/*! ./trees */ "./node_modules/pako/lib/zlib/trees.js");
|
|
|
|
var adler32 = __webpack_require__(/*! ./adler32 */ "./node_modules/pako/lib/zlib/adler32.js");
|
|
|
|
var crc32 = __webpack_require__(/*! ./crc32 */ "./node_modules/pako/lib/zlib/crc32.js");
|
|
|
|
var msg = __webpack_require__(/*! ./messages */ "./node_modules/pako/lib/zlib/messages.js");
|
|
/* Public constants ==========================================================*/
|
|
|
|
/* ===========================================================================*/
|
|
|
|
/* Allowed flush values; see deflate() and inflate() below for details */
|
|
|
|
|
|
var Z_NO_FLUSH = 0;
|
|
var Z_PARTIAL_FLUSH = 1; //var Z_SYNC_FLUSH = 2;
|
|
|
|
var Z_FULL_FLUSH = 3;
|
|
var Z_FINISH = 4;
|
|
var Z_BLOCK = 5; //var Z_TREES = 6;
|
|
|
|
/* Return codes for the compression/decompression functions. Negative values
|
|
* are errors, positive values are used for special but normal events.
|
|
*/
|
|
|
|
var Z_OK = 0;
|
|
var Z_STREAM_END = 1; //var Z_NEED_DICT = 2;
|
|
//var Z_ERRNO = -1;
|
|
|
|
var Z_STREAM_ERROR = -2;
|
|
var Z_DATA_ERROR = -3; //var Z_MEM_ERROR = -4;
|
|
|
|
var Z_BUF_ERROR = -5; //var Z_VERSION_ERROR = -6;
|
|
|
|
/* compression levels */
|
|
//var Z_NO_COMPRESSION = 0;
|
|
//var Z_BEST_SPEED = 1;
|
|
//var Z_BEST_COMPRESSION = 9;
|
|
|
|
var Z_DEFAULT_COMPRESSION = -1;
|
|
var Z_FILTERED = 1;
|
|
var Z_HUFFMAN_ONLY = 2;
|
|
var Z_RLE = 3;
|
|
var Z_FIXED = 4;
|
|
var Z_DEFAULT_STRATEGY = 0;
|
|
/* Possible values of the data_type field (though see inflate()) */
|
|
//var Z_BINARY = 0;
|
|
//var Z_TEXT = 1;
|
|
//var Z_ASCII = 1; // = Z_TEXT
|
|
|
|
var Z_UNKNOWN = 2;
|
|
/* The deflate compression method */
|
|
|
|
var Z_DEFLATED = 8;
|
|
/*============================================================================*/
|
|
|
|
var MAX_MEM_LEVEL = 9;
|
|
/* Maximum value for memLevel in deflateInit2 */
|
|
|
|
var MAX_WBITS = 15;
|
|
/* 32K LZ77 window */
|
|
|
|
var DEF_MEM_LEVEL = 8;
|
|
var LENGTH_CODES = 29;
|
|
/* number of length codes, not counting the special END_BLOCK code */
|
|
|
|
var LITERALS = 256;
|
|
/* number of literal bytes 0..255 */
|
|
|
|
var L_CODES = LITERALS + 1 + LENGTH_CODES;
|
|
/* number of Literal or Length codes, including the END_BLOCK code */
|
|
|
|
var D_CODES = 30;
|
|
/* number of distance codes */
|
|
|
|
var BL_CODES = 19;
|
|
/* number of codes used to transfer the bit lengths */
|
|
|
|
var HEAP_SIZE = 2 * L_CODES + 1;
|
|
/* maximum heap size */
|
|
|
|
var MAX_BITS = 15;
|
|
/* All codes must not exceed MAX_BITS bits */
|
|
|
|
var MIN_MATCH = 3;
|
|
var MAX_MATCH = 258;
|
|
var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
|
|
var PRESET_DICT = 0x20;
|
|
var INIT_STATE = 42;
|
|
var EXTRA_STATE = 69;
|
|
var NAME_STATE = 73;
|
|
var COMMENT_STATE = 91;
|
|
var HCRC_STATE = 103;
|
|
var BUSY_STATE = 113;
|
|
var FINISH_STATE = 666;
|
|
var BS_NEED_MORE = 1;
|
|
/* block not completed, need more input or more output */
|
|
|
|
var BS_BLOCK_DONE = 2;
|
|
/* block flush performed */
|
|
|
|
var BS_FINISH_STARTED = 3;
|
|
/* finish started, need only more output at next deflate */
|
|
|
|
var BS_FINISH_DONE = 4;
|
|
/* finish done, accept no more input or output */
|
|
|
|
var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
|
|
|
|
function err(strm, errorCode) {
|
|
strm.msg = msg[errorCode];
|
|
return errorCode;
|
|
}
|
|
|
|
function rank(f) {
|
|
return (f << 1) - (f > 4 ? 9 : 0);
|
|
}
|
|
|
|
function zero(buf) {
|
|
var len = buf.length;
|
|
|
|
while (--len >= 0) {
|
|
buf[len] = 0;
|
|
}
|
|
}
|
|
/* =========================================================================
|
|
* Flush as much pending output as possible. All deflate() output goes
|
|
* through this function so some applications may wish to modify it
|
|
* to avoid allocating a large strm->output buffer and copying into it.
|
|
* (See also read_buf()).
|
|
*/
|
|
|
|
|
|
function flush_pending(strm) {
|
|
var s = strm.state; //_tr_flush_bits(s);
|
|
|
|
var len = s.pending;
|
|
|
|
if (len > strm.avail_out) {
|
|
len = strm.avail_out;
|
|
}
|
|
|
|
if (len === 0) {
|
|
return;
|
|
}
|
|
|
|
utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
|
|
strm.next_out += len;
|
|
s.pending_out += len;
|
|
strm.total_out += len;
|
|
strm.avail_out -= len;
|
|
s.pending -= len;
|
|
|
|
if (s.pending === 0) {
|
|
s.pending_out = 0;
|
|
}
|
|
}
|
|
|
|
function flush_block_only(s, last) {
|
|
trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);
|
|
|
|
s.block_start = s.strstart;
|
|
flush_pending(s.strm);
|
|
}
|
|
|
|
function put_byte(s, b) {
|
|
s.pending_buf[s.pending++] = b;
|
|
}
|
|
/* =========================================================================
|
|
* Put a short in the pending buffer. The 16-bit value is put in MSB order.
|
|
* IN assertion: the stream state is correct and there is enough room in
|
|
* pending_buf.
|
|
*/
|
|
|
|
|
|
function putShortMSB(s, b) {
|
|
// put_byte(s, (Byte)(b >> 8));
|
|
// put_byte(s, (Byte)(b & 0xff));
|
|
s.pending_buf[s.pending++] = b >>> 8 & 0xff;
|
|
s.pending_buf[s.pending++] = b & 0xff;
|
|
}
|
|
/* ===========================================================================
|
|
* Read a new buffer from the current input stream, update the adler32
|
|
* and total number of bytes read. All deflate() input goes through
|
|
* this function so some applications may wish to modify it to avoid
|
|
* allocating a large strm->input buffer and copying from it.
|
|
* (See also flush_pending()).
|
|
*/
|
|
|
|
|
|
function read_buf(strm, buf, start, size) {
|
|
var len = strm.avail_in;
|
|
|
|
if (len > size) {
|
|
len = size;
|
|
}
|
|
|
|
if (len === 0) {
|
|
return 0;
|
|
}
|
|
|
|
strm.avail_in -= len; // zmemcpy(buf, strm->next_in, len);
|
|
|
|
utils.arraySet(buf, strm.input, strm.next_in, len, start);
|
|
|
|
if (strm.state.wrap === 1) {
|
|
strm.adler = adler32(strm.adler, buf, len, start);
|
|
} else if (strm.state.wrap === 2) {
|
|
strm.adler = crc32(strm.adler, buf, len, start);
|
|
}
|
|
|
|
strm.next_in += len;
|
|
strm.total_in += len;
|
|
return len;
|
|
}
|
|
/* ===========================================================================
|
|
* Set match_start to the longest match starting at the given string and
|
|
* return its length. Matches shorter or equal to prev_length are discarded,
|
|
* in which case the result is equal to prev_length and match_start is
|
|
* garbage.
|
|
* IN assertions: cur_match is the head of the hash chain for the current
|
|
* string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
|
|
* OUT assertion: the match length is not greater than s->lookahead.
|
|
*/
|
|
|
|
|
|
function longest_match(s, cur_match) {
|
|
var chain_length = s.max_chain_length;
|
|
/* max hash chain length */
|
|
|
|
var scan = s.strstart;
|
|
/* current string */
|
|
|
|
var match;
|
|
/* matched string */
|
|
|
|
var len;
|
|
/* length of current match */
|
|
|
|
var best_len = s.prev_length;
|
|
/* best match length so far */
|
|
|
|
var nice_match = s.nice_match;
|
|
/* stop if match long enough */
|
|
|
|
var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0
|
|
/*NIL*/
|
|
;
|
|
var _win = s.window; // shortcut
|
|
|
|
var wmask = s.w_mask;
|
|
var prev = s.prev;
|
|
/* Stop when cur_match becomes <= limit. To simplify the code,
|
|
* we prevent matches with the string of window index 0.
|
|
*/
|
|
|
|
var strend = s.strstart + MAX_MATCH;
|
|
var scan_end1 = _win[scan + best_len - 1];
|
|
var scan_end = _win[scan + best_len];
|
|
/* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
|
|
* It is easy to get rid of this optimization if necessary.
|
|
*/
|
|
// Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
|
|
|
|
/* Do not waste too much time if we already have a good match: */
|
|
|
|
if (s.prev_length >= s.good_match) {
|
|
chain_length >>= 2;
|
|
}
|
|
/* Do not look for matches beyond the end of the input. This is necessary
|
|
* to make deflate deterministic.
|
|
*/
|
|
|
|
|
|
if (nice_match > s.lookahead) {
|
|
nice_match = s.lookahead;
|
|
} // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
|
|
|
|
|
|
do {
|
|
// Assert(cur_match < s->strstart, "no future");
|
|
match = cur_match;
|
|
/* Skip to next match if the match length cannot increase
|
|
* or if the match length is less than 2. Note that the checks below
|
|
* for insufficient lookahead only occur occasionally for performance
|
|
* reasons. Therefore uninitialized memory will be accessed, and
|
|
* conditional jumps will be made that depend on those values.
|
|
* However the length of the match is limited to the lookahead, so
|
|
* the output of deflate is not affected by the uninitialized values.
|
|
*/
|
|
|
|
if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) {
|
|
continue;
|
|
}
|
|
/* The check at best_len-1 can be removed because it will be made
|
|
* again later. (This heuristic is not always a win.)
|
|
* It is not necessary to compare scan[2] and match[2] since they
|
|
* are always equal when the other bytes match, given that
|
|
* the hash keys are equal and that HASH_BITS >= 8.
|
|
*/
|
|
|
|
|
|
scan += 2;
|
|
match++; // Assert(*scan == *match, "match[2]?");
|
|
|
|
/* We check for insufficient lookahead only every 8th comparison;
|
|
* the 256th check will be made at strstart+258.
|
|
*/
|
|
|
|
do {
|
|
/*jshint noempty:false*/
|
|
} while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend); // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
|
|
|
|
|
|
len = MAX_MATCH - (strend - scan);
|
|
scan = strend - MAX_MATCH;
|
|
|
|
if (len > best_len) {
|
|
s.match_start = cur_match;
|
|
best_len = len;
|
|
|
|
if (len >= nice_match) {
|
|
break;
|
|
}
|
|
|
|
scan_end1 = _win[scan + best_len - 1];
|
|
scan_end = _win[scan + best_len];
|
|
}
|
|
} while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
|
|
|
|
if (best_len <= s.lookahead) {
|
|
return best_len;
|
|
}
|
|
|
|
return s.lookahead;
|
|
}
|
|
/* ===========================================================================
|
|
* Fill the window when the lookahead becomes insufficient.
|
|
* Updates strstart and lookahead.
|
|
*
|
|
* IN assertion: lookahead < MIN_LOOKAHEAD
|
|
* OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
|
|
* At least one byte has been read, or avail_in == 0; reads are
|
|
* performed for at least two bytes (required for the zip translate_eol
|
|
* option -- not supported here).
|
|
*/
|
|
|
|
|
|
function fill_window(s) {
|
|
var _w_size = s.w_size;
|
|
var p, n, m, more, str; //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
|
|
|
|
do {
|
|
more = s.window_size - s.lookahead - s.strstart; // JS ints have 32 bit, block below not needed
|
|
|
|
/* Deal with !@#$% 64K limit: */
|
|
//if (sizeof(int) <= 2) {
|
|
// if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
|
|
// more = wsize;
|
|
//
|
|
// } else if (more == (unsigned)(-1)) {
|
|
// /* Very unlikely, but possible on 16 bit machine if
|
|
// * strstart == 0 && lookahead == 1 (input done a byte at time)
|
|
// */
|
|
// more--;
|
|
// }
|
|
//}
|
|
|
|
/* If the window is almost full and there is insufficient lookahead,
|
|
* move the upper half to the lower one to make room in the upper half.
|
|
*/
|
|
|
|
if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
|
|
utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
|
|
s.match_start -= _w_size;
|
|
s.strstart -= _w_size;
|
|
/* we now have strstart >= MAX_DIST */
|
|
|
|
s.block_start -= _w_size;
|
|
/* Slide the hash table (could be avoided with 32 bit values
|
|
at the expense of memory usage). We slide even when level == 0
|
|
to keep the hash table consistent if we switch back to level > 0
|
|
later. (Using level 0 permanently is not an optimal usage of
|
|
zlib, so we don't care about this pathological case.)
|
|
*/
|
|
|
|
n = s.hash_size;
|
|
p = n;
|
|
|
|
do {
|
|
m = s.head[--p];
|
|
s.head[p] = m >= _w_size ? m - _w_size : 0;
|
|
} while (--n);
|
|
|
|
n = _w_size;
|
|
p = n;
|
|
|
|
do {
|
|
m = s.prev[--p];
|
|
s.prev[p] = m >= _w_size ? m - _w_size : 0;
|
|
/* If n is not on any hash chain, prev[n] is garbage but
|
|
* its value will never be used.
|
|
*/
|
|
} while (--n);
|
|
|
|
more += _w_size;
|
|
}
|
|
|
|
if (s.strm.avail_in === 0) {
|
|
break;
|
|
}
|
|
/* If there was no sliding:
|
|
* strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
|
|
* more == window_size - lookahead - strstart
|
|
* => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
|
|
* => more >= window_size - 2*WSIZE + 2
|
|
* In the BIG_MEM or MMAP case (not yet supported),
|
|
* window_size == input_size + MIN_LOOKAHEAD &&
|
|
* strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
|
|
* Otherwise, window_size == 2*WSIZE so more >= 2.
|
|
* If there was sliding, more >= WSIZE. So in all cases, more >= 2.
|
|
*/
|
|
//Assert(more >= 2, "more < 2");
|
|
|
|
|
|
n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
|
|
s.lookahead += n;
|
|
/* Initialize the hash value now that we have some input: */
|
|
|
|
if (s.lookahead + s.insert >= MIN_MATCH) {
|
|
str = s.strstart - s.insert;
|
|
s.ins_h = s.window[str];
|
|
/* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
|
|
|
|
s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask; //#if MIN_MATCH != 3
|
|
// Call update_hash() MIN_MATCH-3 more times
|
|
//#endif
|
|
|
|
while (s.insert) {
|
|
/* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
|
|
s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
|
|
s.prev[str & s.w_mask] = s.head[s.ins_h];
|
|
s.head[s.ins_h] = str;
|
|
str++;
|
|
s.insert--;
|
|
|
|
if (s.lookahead + s.insert < MIN_MATCH) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
/* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
|
|
* but this is not important since only literal bytes will be emitted.
|
|
*/
|
|
|
|
} while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
|
|
/* If the WIN_INIT bytes after the end of the current data have never been
|
|
* written, then zero those bytes in order to avoid memory check reports of
|
|
* the use of uninitialized (or uninitialised as Julian writes) bytes by
|
|
* the longest match routines. Update the high water mark for the next
|
|
* time through here. WIN_INIT is set to MAX_MATCH since the longest match
|
|
* routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
|
|
*/
|
|
// if (s.high_water < s.window_size) {
|
|
// var curr = s.strstart + s.lookahead;
|
|
// var init = 0;
|
|
//
|
|
// if (s.high_water < curr) {
|
|
// /* Previous high water mark below current data -- zero WIN_INIT
|
|
// * bytes or up to end of window, whichever is less.
|
|
// */
|
|
// init = s.window_size - curr;
|
|
// if (init > WIN_INIT)
|
|
// init = WIN_INIT;
|
|
// zmemzero(s->window + curr, (unsigned)init);
|
|
// s->high_water = curr + init;
|
|
// }
|
|
// else if (s->high_water < (ulg)curr + WIN_INIT) {
|
|
// /* High water mark at or above current data, but below current data
|
|
// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
|
|
// * to end of window, whichever is less.
|
|
// */
|
|
// init = (ulg)curr + WIN_INIT - s->high_water;
|
|
// if (init > s->window_size - s->high_water)
|
|
// init = s->window_size - s->high_water;
|
|
// zmemzero(s->window + s->high_water, (unsigned)init);
|
|
// s->high_water += init;
|
|
// }
|
|
// }
|
|
//
|
|
// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
|
|
// "not enough room for search");
|
|
|
|
}
|
|
/* ===========================================================================
|
|
* Copy without compression as much as possible from the input stream, return
|
|
* the current block state.
|
|
* This function does not insert new strings in the dictionary since
|
|
* uncompressible data is probably not useful. This function is used
|
|
* only for the level=0 compression option.
|
|
* NOTE: this function should be optimized to avoid extra copying from
|
|
* window to pending_buf.
|
|
*/
|
|
|
|
|
|
function deflate_stored(s, flush) {
|
|
/* Stored blocks are limited to 0xffff bytes, pending_buf is limited
|
|
* to pending_buf_size, and each stored block has a 5 byte header:
|
|
*/
|
|
var max_block_size = 0xffff;
|
|
|
|
if (max_block_size > s.pending_buf_size - 5) {
|
|
max_block_size = s.pending_buf_size - 5;
|
|
}
|
|
/* Copy as much as possible from input to output: */
|
|
|
|
|
|
for (;;) {
|
|
/* Fill the window as much as possible: */
|
|
if (s.lookahead <= 1) {
|
|
//Assert(s->strstart < s->w_size+MAX_DIST(s) ||
|
|
// s->block_start >= (long)s->w_size, "slide too late");
|
|
// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
|
|
// s.block_start >= s.w_size)) {
|
|
// throw new Error("slide too late");
|
|
// }
|
|
fill_window(s);
|
|
|
|
if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
|
|
if (s.lookahead === 0) {
|
|
break;
|
|
}
|
|
/* flush the current block */
|
|
|
|
} //Assert(s->block_start >= 0L, "block gone");
|
|
// if (s.block_start < 0) throw new Error("block gone");
|
|
|
|
|
|
s.strstart += s.lookahead;
|
|
s.lookahead = 0;
|
|
/* Emit a stored block if pending_buf will be full: */
|
|
|
|
var max_start = s.block_start + max_block_size;
|
|
|
|
if (s.strstart === 0 || s.strstart >= max_start) {
|
|
/* strstart == 0 is possible when wraparound on 16-bit machine */
|
|
s.lookahead = s.strstart - max_start;
|
|
s.strstart = max_start;
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
/* Flush if we may have to slide, otherwise block_start may become
|
|
* negative and the data will be gone:
|
|
*/
|
|
|
|
|
|
if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
}
|
|
|
|
s.insert = 0;
|
|
|
|
if (flush === Z_FINISH) {
|
|
/*** FLUSH_BLOCK(s, 1); ***/
|
|
flush_block_only(s, true);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_FINISH_STARTED;
|
|
}
|
|
/***/
|
|
|
|
|
|
return BS_FINISH_DONE;
|
|
}
|
|
|
|
if (s.strstart > s.block_start) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
|
|
return BS_NEED_MORE;
|
|
}
|
|
/* ===========================================================================
|
|
* Compress as much as possible from the input stream, return the current
|
|
* block state.
|
|
* This function does not perform lazy evaluation of matches and inserts
|
|
* new strings in the dictionary only for unmatched strings or for short
|
|
* matches. It is used only for the fast compression options.
|
|
*/
|
|
|
|
|
|
function deflate_fast(s, flush) {
|
|
var hash_head;
|
|
/* head of the hash chain */
|
|
|
|
var bflush;
|
|
/* set if current block must be flushed */
|
|
|
|
for (;;) {
|
|
/* Make sure that we always have enough lookahead, except
|
|
* at the end of the input file. We need MAX_MATCH bytes
|
|
* for the next match, plus MIN_MATCH bytes to insert the
|
|
* string following the next match.
|
|
*/
|
|
if (s.lookahead < MIN_LOOKAHEAD) {
|
|
fill_window(s);
|
|
|
|
if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
|
|
if (s.lookahead === 0) {
|
|
break;
|
|
/* flush the current block */
|
|
}
|
|
}
|
|
/* Insert the string window[strstart .. strstart+2] in the
|
|
* dictionary, and set hash_head to the head of the hash chain:
|
|
*/
|
|
|
|
|
|
hash_head = 0
|
|
/*NIL*/
|
|
;
|
|
|
|
if (s.lookahead >= MIN_MATCH) {
|
|
/*** INSERT_STRING(s, s.strstart, hash_head); ***/
|
|
s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
|
|
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
|
|
s.head[s.ins_h] = s.strstart;
|
|
/***/
|
|
}
|
|
/* Find the longest match, discarding those <= prev_length.
|
|
* At this point we have always match_length < MIN_MATCH
|
|
*/
|
|
|
|
|
|
if (hash_head !== 0
|
|
/*NIL*/
|
|
&& s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {
|
|
/* To simplify the code, we prevent matches with the string
|
|
* of window index 0 (in particular we have to avoid a match
|
|
* of the string with itself at the start of the input file).
|
|
*/
|
|
s.match_length = longest_match(s, hash_head);
|
|
/* longest_match() sets match_start */
|
|
}
|
|
|
|
if (s.match_length >= MIN_MATCH) {
|
|
// check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
|
|
|
|
/*** _tr_tally_dist(s, s.strstart - s.match_start,
|
|
s.match_length - MIN_MATCH, bflush); ***/
|
|
bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
|
|
s.lookahead -= s.match_length;
|
|
/* Insert new strings in the hash table only if the match length
|
|
* is not too large. This saves time but degrades compression.
|
|
*/
|
|
|
|
if (s.match_length <= s.max_lazy_match
|
|
/*max_insert_length*/
|
|
&& s.lookahead >= MIN_MATCH) {
|
|
s.match_length--;
|
|
/* string at strstart already in table */
|
|
|
|
do {
|
|
s.strstart++;
|
|
/*** INSERT_STRING(s, s.strstart, hash_head); ***/
|
|
|
|
s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
|
|
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
|
|
s.head[s.ins_h] = s.strstart;
|
|
/***/
|
|
|
|
/* strstart never exceeds WSIZE-MAX_MATCH, so there are
|
|
* always MIN_MATCH bytes ahead.
|
|
*/
|
|
} while (--s.match_length !== 0);
|
|
|
|
s.strstart++;
|
|
} else {
|
|
s.strstart += s.match_length;
|
|
s.match_length = 0;
|
|
s.ins_h = s.window[s.strstart];
|
|
/* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
|
|
|
|
s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask; //#if MIN_MATCH != 3
|
|
// Call UPDATE_HASH() MIN_MATCH-3 more times
|
|
//#endif
|
|
|
|
/* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
|
|
* matter since it will be recomputed at next deflate call.
|
|
*/
|
|
}
|
|
} else {
|
|
/* No match, output a literal byte */
|
|
//Tracevv((stderr,"%c", s.window[s.strstart]));
|
|
|
|
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
|
|
bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
|
|
s.lookahead--;
|
|
s.strstart++;
|
|
}
|
|
|
|
if (bflush) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
}
|
|
|
|
s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
|
|
|
|
if (flush === Z_FINISH) {
|
|
/*** FLUSH_BLOCK(s, 1); ***/
|
|
flush_block_only(s, true);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_FINISH_STARTED;
|
|
}
|
|
/***/
|
|
|
|
|
|
return BS_FINISH_DONE;
|
|
}
|
|
|
|
if (s.last_lit) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
|
|
return BS_BLOCK_DONE;
|
|
}
|
|
/* ===========================================================================
|
|
* Same as above, but achieves better compression. We use a lazy
|
|
* evaluation for matches: a match is finally adopted only if there is
|
|
* no better match at the next window position.
|
|
*/
|
|
|
|
|
|
function deflate_slow(s, flush) {
|
|
var hash_head;
|
|
/* head of hash chain */
|
|
|
|
var bflush;
|
|
/* set if current block must be flushed */
|
|
|
|
var max_insert;
|
|
/* Process the input block. */
|
|
|
|
for (;;) {
|
|
/* Make sure that we always have enough lookahead, except
|
|
* at the end of the input file. We need MAX_MATCH bytes
|
|
* for the next match, plus MIN_MATCH bytes to insert the
|
|
* string following the next match.
|
|
*/
|
|
if (s.lookahead < MIN_LOOKAHEAD) {
|
|
fill_window(s);
|
|
|
|
if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
|
|
if (s.lookahead === 0) {
|
|
break;
|
|
}
|
|
/* flush the current block */
|
|
|
|
}
|
|
/* Insert the string window[strstart .. strstart+2] in the
|
|
* dictionary, and set hash_head to the head of the hash chain:
|
|
*/
|
|
|
|
|
|
hash_head = 0
|
|
/*NIL*/
|
|
;
|
|
|
|
if (s.lookahead >= MIN_MATCH) {
|
|
/*** INSERT_STRING(s, s.strstart, hash_head); ***/
|
|
s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
|
|
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
|
|
s.head[s.ins_h] = s.strstart;
|
|
/***/
|
|
}
|
|
/* Find the longest match, discarding those <= prev_length.
|
|
*/
|
|
|
|
|
|
s.prev_length = s.match_length;
|
|
s.prev_match = s.match_start;
|
|
s.match_length = MIN_MATCH - 1;
|
|
|
|
if (hash_head !== 0
|
|
/*NIL*/
|
|
&& s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD
|
|
/*MAX_DIST(s)*/
|
|
) {
|
|
/* To simplify the code, we prevent matches with the string
|
|
* of window index 0 (in particular we have to avoid a match
|
|
* of the string with itself at the start of the input file).
|
|
*/
|
|
s.match_length = longest_match(s, hash_head);
|
|
/* longest_match() sets match_start */
|
|
|
|
if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096
|
|
/*TOO_FAR*/
|
|
)) {
|
|
/* If prev_match is also MIN_MATCH, match_start is garbage
|
|
* but we will ignore the current match anyway.
|
|
*/
|
|
s.match_length = MIN_MATCH - 1;
|
|
}
|
|
}
|
|
/* If there was a match at the previous step and the current
|
|
* match is not better, output the previous match:
|
|
*/
|
|
|
|
|
|
if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
|
|
max_insert = s.strstart + s.lookahead - MIN_MATCH;
|
|
/* Do not insert strings in hash table beyond this. */
|
|
//check_match(s, s.strstart-1, s.prev_match, s.prev_length);
|
|
|
|
/***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
|
|
s.prev_length - MIN_MATCH, bflush);***/
|
|
|
|
bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
|
|
/* Insert in hash table all strings up to the end of the match.
|
|
* strstart-1 and strstart are already inserted. If there is not
|
|
* enough lookahead, the last two strings are not inserted in
|
|
* the hash table.
|
|
*/
|
|
|
|
s.lookahead -= s.prev_length - 1;
|
|
s.prev_length -= 2;
|
|
|
|
do {
|
|
if (++s.strstart <= max_insert) {
|
|
/*** INSERT_STRING(s, s.strstart, hash_head); ***/
|
|
s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
|
|
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
|
|
s.head[s.ins_h] = s.strstart;
|
|
/***/
|
|
}
|
|
} while (--s.prev_length !== 0);
|
|
|
|
s.match_available = 0;
|
|
s.match_length = MIN_MATCH - 1;
|
|
s.strstart++;
|
|
|
|
if (bflush) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
} else if (s.match_available) {
|
|
/* If there was no match at the previous position, output a
|
|
* single literal. If there was a match but the current match
|
|
* is longer, truncate the previous match to a single literal.
|
|
*/
|
|
//Tracevv((stderr,"%c", s->window[s->strstart-1]));
|
|
|
|
/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
|
|
bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
|
|
|
|
if (bflush) {
|
|
/*** FLUSH_BLOCK_ONLY(s, 0) ***/
|
|
flush_block_only(s, false);
|
|
/***/
|
|
}
|
|
|
|
s.strstart++;
|
|
s.lookahead--;
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
} else {
|
|
/* There is no previous match to compare with, wait for
|
|
* the next step to decide.
|
|
*/
|
|
s.match_available = 1;
|
|
s.strstart++;
|
|
s.lookahead--;
|
|
}
|
|
} //Assert (flush != Z_NO_FLUSH, "no flush?");
|
|
|
|
|
|
if (s.match_available) {
|
|
//Tracevv((stderr,"%c", s->window[s->strstart-1]));
|
|
|
|
/*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
|
|
bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
|
|
s.match_available = 0;
|
|
}
|
|
|
|
s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
|
|
|
|
if (flush === Z_FINISH) {
|
|
/*** FLUSH_BLOCK(s, 1); ***/
|
|
flush_block_only(s, true);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_FINISH_STARTED;
|
|
}
|
|
/***/
|
|
|
|
|
|
return BS_FINISH_DONE;
|
|
}
|
|
|
|
if (s.last_lit) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
|
|
return BS_BLOCK_DONE;
|
|
}
|
|
/* ===========================================================================
|
|
* For Z_RLE, simply look for runs of bytes, generate matches only of distance
|
|
* one. Do not maintain a hash table. (It will be regenerated if this run of
|
|
* deflate switches away from Z_RLE.)
|
|
*/
|
|
|
|
|
|
function deflate_rle(s, flush) {
|
|
var bflush;
|
|
/* set if current block must be flushed */
|
|
|
|
var prev;
|
|
/* byte at distance one to match */
|
|
|
|
var scan, strend;
|
|
/* scan goes up to strend for length of run */
|
|
|
|
var _win = s.window;
|
|
|
|
for (;;) {
|
|
/* Make sure that we always have enough lookahead, except
|
|
* at the end of the input file. We need MAX_MATCH bytes
|
|
* for the longest run, plus one for the unrolled loop.
|
|
*/
|
|
if (s.lookahead <= MAX_MATCH) {
|
|
fill_window(s);
|
|
|
|
if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
|
|
if (s.lookahead === 0) {
|
|
break;
|
|
}
|
|
/* flush the current block */
|
|
|
|
}
|
|
/* See how many times the previous byte repeats */
|
|
|
|
|
|
s.match_length = 0;
|
|
|
|
if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
|
|
scan = s.strstart - 1;
|
|
prev = _win[scan];
|
|
|
|
if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
|
|
strend = s.strstart + MAX_MATCH;
|
|
|
|
do {
|
|
/*jshint noempty:false*/
|
|
} while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);
|
|
|
|
s.match_length = MAX_MATCH - (strend - scan);
|
|
|
|
if (s.match_length > s.lookahead) {
|
|
s.match_length = s.lookahead;
|
|
}
|
|
} //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
|
|
|
|
}
|
|
/* Emit match if have run of MIN_MATCH or longer, else emit literal */
|
|
|
|
|
|
if (s.match_length >= MIN_MATCH) {
|
|
//check_match(s, s.strstart, s.strstart - 1, s.match_length);
|
|
|
|
/*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
|
|
bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
|
|
s.lookahead -= s.match_length;
|
|
s.strstart += s.match_length;
|
|
s.match_length = 0;
|
|
} else {
|
|
/* No match, output a literal byte */
|
|
//Tracevv((stderr,"%c", s->window[s->strstart]));
|
|
|
|
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
|
|
bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
|
|
s.lookahead--;
|
|
s.strstart++;
|
|
}
|
|
|
|
if (bflush) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
}
|
|
|
|
s.insert = 0;
|
|
|
|
if (flush === Z_FINISH) {
|
|
/*** FLUSH_BLOCK(s, 1); ***/
|
|
flush_block_only(s, true);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_FINISH_STARTED;
|
|
}
|
|
/***/
|
|
|
|
|
|
return BS_FINISH_DONE;
|
|
}
|
|
|
|
if (s.last_lit) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
|
|
return BS_BLOCK_DONE;
|
|
}
|
|
/* ===========================================================================
|
|
* For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
|
|
* (It will be regenerated if this run of deflate switches away from Huffman.)
|
|
*/
|
|
|
|
|
|
function deflate_huff(s, flush) {
|
|
var bflush;
|
|
/* set if current block must be flushed */
|
|
|
|
for (;;) {
|
|
/* Make sure that we have a literal to write. */
|
|
if (s.lookahead === 0) {
|
|
fill_window(s);
|
|
|
|
if (s.lookahead === 0) {
|
|
if (flush === Z_NO_FLUSH) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
|
|
break;
|
|
/* flush the current block */
|
|
}
|
|
}
|
|
/* Output a literal byte */
|
|
|
|
|
|
s.match_length = 0; //Tracevv((stderr,"%c", s->window[s->strstart]));
|
|
|
|
/*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
|
|
|
|
bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
|
|
s.lookahead--;
|
|
s.strstart++;
|
|
|
|
if (bflush) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
}
|
|
|
|
s.insert = 0;
|
|
|
|
if (flush === Z_FINISH) {
|
|
/*** FLUSH_BLOCK(s, 1); ***/
|
|
flush_block_only(s, true);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_FINISH_STARTED;
|
|
}
|
|
/***/
|
|
|
|
|
|
return BS_FINISH_DONE;
|
|
}
|
|
|
|
if (s.last_lit) {
|
|
/*** FLUSH_BLOCK(s, 0); ***/
|
|
flush_block_only(s, false);
|
|
|
|
if (s.strm.avail_out === 0) {
|
|
return BS_NEED_MORE;
|
|
}
|
|
/***/
|
|
|
|
}
|
|
|
|
return BS_BLOCK_DONE;
|
|
}
|
|
/* Values for max_lazy_match, good_match and max_chain_length, depending on
|
|
* the desired pack level (0..9). The values given below have been tuned to
|
|
* exclude worst case performance for pathological files. Better values may be
|
|
* found for specific files.
|
|
*/
|
|
|
|
|
|
function Config(good_length, max_lazy, nice_length, max_chain, func) {
|
|
this.good_length = good_length;
|
|
this.max_lazy = max_lazy;
|
|
this.nice_length = nice_length;
|
|
this.max_chain = max_chain;
|
|
this.func = func;
|
|
}
|
|
|
|
var configuration_table;
|
|
configuration_table = [
|
|
/* good lazy nice chain */
|
|
new Config(0, 0, 0, 0, deflate_stored),
|
|
/* 0 store only */
|
|
new Config(4, 4, 8, 4, deflate_fast),
|
|
/* 1 max speed, no lazy matches */
|
|
new Config(4, 5, 16, 8, deflate_fast),
|
|
/* 2 */
|
|
new Config(4, 6, 32, 32, deflate_fast),
|
|
/* 3 */
|
|
new Config(4, 4, 16, 16, deflate_slow),
|
|
/* 4 lazy matches */
|
|
new Config(8, 16, 32, 32, deflate_slow),
|
|
/* 5 */
|
|
new Config(8, 16, 128, 128, deflate_slow),
|
|
/* 6 */
|
|
new Config(8, 32, 128, 256, deflate_slow),
|
|
/* 7 */
|
|
new Config(32, 128, 258, 1024, deflate_slow),
|
|
/* 8 */
|
|
new Config(32, 258, 258, 4096, deflate_slow)
|
|
/* 9 max compression */
|
|
];
|
|
/* ===========================================================================
|
|
* Initialize the "longest match" routines for a new zlib stream
|
|
*/
|
|
|
|
function lm_init(s) {
|
|
s.window_size = 2 * s.w_size;
|
|
/*** CLEAR_HASH(s); ***/
|
|
|
|
zero(s.head); // Fill with NIL (= 0);
|
|
|
|
/* Set the default configuration parameters:
|
|
*/
|
|
|
|
s.max_lazy_match = configuration_table[s.level].max_lazy;
|
|
s.good_match = configuration_table[s.level].good_length;
|
|
s.nice_match = configuration_table[s.level].nice_length;
|
|
s.max_chain_length = configuration_table[s.level].max_chain;
|
|
s.strstart = 0;
|
|
s.block_start = 0;
|
|
s.lookahead = 0;
|
|
s.insert = 0;
|
|
s.match_length = s.prev_length = MIN_MATCH - 1;
|
|
s.match_available = 0;
|
|
s.ins_h = 0;
|
|
}
|
|
|
|
function DeflateState() {
|
|
this.strm = null;
|
|
/* pointer back to this zlib stream */
|
|
|
|
this.status = 0;
|
|
/* as the name implies */
|
|
|
|
this.pending_buf = null;
|
|
/* output still pending */
|
|
|
|
this.pending_buf_size = 0;
|
|
/* size of pending_buf */
|
|
|
|
this.pending_out = 0;
|
|
/* next pending byte to output to the stream */
|
|
|
|
this.pending = 0;
|
|
/* nb of bytes in the pending buffer */
|
|
|
|
this.wrap = 0;
|
|
/* bit 0 true for zlib, bit 1 true for gzip */
|
|
|
|
this.gzhead = null;
|
|
/* gzip header information to write */
|
|
|
|
this.gzindex = 0;
|
|
/* where in extra, name, or comment */
|
|
|
|
this.method = Z_DEFLATED;
|
|
/* can only be DEFLATED */
|
|
|
|
this.last_flush = -1;
|
|
/* value of flush param for previous deflate call */
|
|
|
|
this.w_size = 0;
|
|
/* LZ77 window size (32K by default) */
|
|
|
|
this.w_bits = 0;
|
|
/* log2(w_size) (8..16) */
|
|
|
|
this.w_mask = 0;
|
|
/* w_size - 1 */
|
|
|
|
this.window = null;
|
|
/* Sliding window. Input bytes are read into the second half of the window,
|
|
* and move to the first half later to keep a dictionary of at least wSize
|
|
* bytes. With this organization, matches are limited to a distance of
|
|
* wSize-MAX_MATCH bytes, but this ensures that IO is always
|
|
* performed with a length multiple of the block size.
|
|
*/
|
|
|
|
this.window_size = 0;
|
|
/* Actual size of window: 2*wSize, except when the user input buffer
|
|
* is directly used as sliding window.
|
|
*/
|
|
|
|
this.prev = null;
|
|
/* Link to older string with same hash index. To limit the size of this
|
|
* array to 64K, this link is maintained only for the last 32K strings.
|
|
* An index in this array is thus a window index modulo 32K.
|
|
*/
|
|
|
|
this.head = null;
|
|
/* Heads of the hash chains or NIL. */
|
|
|
|
this.ins_h = 0;
|
|
/* hash index of string to be inserted */
|
|
|
|
this.hash_size = 0;
|
|
/* number of elements in hash table */
|
|
|
|
this.hash_bits = 0;
|
|
/* log2(hash_size) */
|
|
|
|
this.hash_mask = 0;
|
|
/* hash_size-1 */
|
|
|
|
this.hash_shift = 0;
|
|
/* Number of bits by which ins_h must be shifted at each input
|
|
* step. It must be such that after MIN_MATCH steps, the oldest
|
|
* byte no longer takes part in the hash key, that is:
|
|
* hash_shift * MIN_MATCH >= hash_bits
|
|
*/
|
|
|
|
this.block_start = 0;
|
|
/* Window position at the beginning of the current output block. Gets
|
|
* negative when the window is moved backwards.
|
|
*/
|
|
|
|
this.match_length = 0;
|
|
/* length of best match */
|
|
|
|
this.prev_match = 0;
|
|
/* previous match */
|
|
|
|
this.match_available = 0;
|
|
/* set if previous match exists */
|
|
|
|
this.strstart = 0;
|
|
/* start of string to insert */
|
|
|
|
this.match_start = 0;
|
|
/* start of matching string */
|
|
|
|
this.lookahead = 0;
|
|
/* number of valid bytes ahead in window */
|
|
|
|
this.prev_length = 0;
|
|
/* Length of the best match at previous step. Matches not greater than this
|
|
* are discarded. This is used in the lazy match evaluation.
|
|
*/
|
|
|
|
this.max_chain_length = 0;
|
|
/* To speed up deflation, hash chains are never searched beyond this
|
|
* length. A higher limit improves compression ratio but degrades the
|
|
* speed.
|
|
*/
|
|
|
|
this.max_lazy_match = 0;
|
|
/* Attempt to find a better match only when the current match is strictly
|
|
* smaller than this value. This mechanism is used only for compression
|
|
* levels >= 4.
|
|
*/
|
|
// That's alias to max_lazy_match, don't use directly
|
|
//this.max_insert_length = 0;
|
|
|
|
/* Insert new strings in the hash table only if the match length is not
|
|
* greater than this length. This saves time but degrades compression.
|
|
* max_insert_length is used only for compression levels <= 3.
|
|
*/
|
|
|
|
this.level = 0;
|
|
/* compression level (1..9) */
|
|
|
|
this.strategy = 0;
|
|
/* favor or force Huffman coding*/
|
|
|
|
this.good_match = 0;
|
|
/* Use a faster search when the previous match is longer than this */
|
|
|
|
this.nice_match = 0;
|
|
/* Stop searching when current match exceeds this */
|
|
|
|
/* used by trees.c: */
|
|
|
|
/* Didn't use ct_data typedef below to suppress compiler warning */
|
|
// struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
|
|
// struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
|
|
// struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
|
|
// Use flat array of DOUBLE size, with interleaved fata,
|
|
// because JS does not support effective
|
|
|
|
this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);
|
|
this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);
|
|
this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);
|
|
zero(this.dyn_ltree);
|
|
zero(this.dyn_dtree);
|
|
zero(this.bl_tree);
|
|
this.l_desc = null;
|
|
/* desc. for literal tree */
|
|
|
|
this.d_desc = null;
|
|
/* desc. for distance tree */
|
|
|
|
this.bl_desc = null;
|
|
/* desc. for bit length tree */
|
|
//ush bl_count[MAX_BITS+1];
|
|
|
|
this.bl_count = new utils.Buf16(MAX_BITS + 1);
|
|
/* number of codes at each bit length for an optimal tree */
|
|
//int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
|
|
|
|
this.heap = new utils.Buf16(2 * L_CODES + 1);
|
|
/* heap used to build the Huffman trees */
|
|
|
|
zero(this.heap);
|
|
this.heap_len = 0;
|
|
/* number of elements in the heap */
|
|
|
|
this.heap_max = 0;
|
|
/* element of largest frequency */
|
|
|
|
/* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
|
|
* The same heap array is used to build all trees.
|
|
*/
|
|
|
|
this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
|
|
|
|
zero(this.depth);
|
|
/* Depth of each subtree used as tie breaker for trees of equal frequency
|
|
*/
|
|
|
|
this.l_buf = 0;
|
|
/* buffer index for literals or lengths */
|
|
|
|
this.lit_bufsize = 0;
|
|
/* Size of match buffer for literals/lengths. There are 4 reasons for
|
|
* limiting lit_bufsize to 64K:
|
|
* - frequencies can be kept in 16 bit counters
|
|
* - if compression is not successful for the first block, all input
|
|
* data is still in the window so we can still emit a stored block even
|
|
* when input comes from standard input. (This can also be done for
|
|
* all blocks if lit_bufsize is not greater than 32K.)
|
|
* - if compression is not successful for a file smaller than 64K, we can
|
|
* even emit a stored file instead of a stored block (saving 5 bytes).
|
|
* This is applicable only for zip (not gzip or zlib).
|
|
* - creating new Huffman trees less frequently may not provide fast
|
|
* adaptation to changes in the input data statistics. (Take for
|
|
* example a binary file with poorly compressible code followed by
|
|
* a highly compressible string table.) Smaller buffer sizes give
|
|
* fast adaptation but have of course the overhead of transmitting
|
|
* trees more frequently.
|
|
* - I can't count above 4
|
|
*/
|
|
|
|
this.last_lit = 0;
|
|
/* running index in l_buf */
|
|
|
|
this.d_buf = 0;
|
|
/* Buffer index for distances. To simplify the code, d_buf and l_buf have
|
|
* the same number of elements. To use different lengths, an extra flag
|
|
* array would be necessary.
|
|
*/
|
|
|
|
this.opt_len = 0;
|
|
/* bit length of current block with optimal trees */
|
|
|
|
this.static_len = 0;
|
|
/* bit length of current block with static trees */
|
|
|
|
this.matches = 0;
|
|
/* number of string matches in current block */
|
|
|
|
this.insert = 0;
|
|
/* bytes at end of window left to insert */
|
|
|
|
this.bi_buf = 0;
|
|
/* Output buffer. bits are inserted starting at the bottom (least
|
|
* significant bits).
|
|
*/
|
|
|
|
this.bi_valid = 0;
|
|
/* Number of valid bits in bi_buf. All bits above the last valid bit
|
|
* are always zero.
|
|
*/
|
|
// Used for window memory init. We safely ignore it for JS. That makes
|
|
// sense only for pointers and memory check tools.
|
|
//this.high_water = 0;
|
|
|
|
/* High water mark offset in window for initialized bytes -- bytes above
|
|
* this are set to zero in order to avoid memory check warnings when
|
|
* longest match routines access bytes past the input. This is then
|
|
* updated to the new high water mark.
|
|
*/
|
|
}
|
|
|
|
function deflateResetKeep(strm) {
|
|
var s;
|
|
|
|
if (!strm || !strm.state) {
|
|
return err(strm, Z_STREAM_ERROR);
|
|
}
|
|
|
|
strm.total_in = strm.total_out = 0;
|
|
strm.data_type = Z_UNKNOWN;
|
|
s = strm.state;
|
|
s.pending = 0;
|
|
s.pending_out = 0;
|
|
|
|
if (s.wrap < 0) {
|
|
s.wrap = -s.wrap;
|
|
/* was made negative by deflate(..., Z_FINISH); */
|
|
}
|
|
|
|
s.status = s.wrap ? INIT_STATE : BUSY_STATE;
|
|
strm.adler = s.wrap === 2 ? 0 // crc32(0, Z_NULL, 0)
|
|
: 1; // adler32(0, Z_NULL, 0)
|
|
|
|
s.last_flush = Z_NO_FLUSH;
|
|
|
|
trees._tr_init(s);
|
|
|
|
return Z_OK;
|
|
}
|
|
|
|
function deflateReset(strm) {
|
|
var ret = deflateResetKeep(strm);
|
|
|
|
if (ret === Z_OK) {
|
|
lm_init(strm.state);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
function deflateSetHeader(strm, head) {
|
|
if (!strm || !strm.state) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
if (strm.state.wrap !== 2) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
strm.state.gzhead = head;
|
|
return Z_OK;
|
|
}
|
|
|
|
function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
|
|
if (!strm) {
|
|
// === Z_NULL
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
var wrap = 1;
|
|
|
|
if (level === Z_DEFAULT_COMPRESSION) {
|
|
level = 6;
|
|
}
|
|
|
|
if (windowBits < 0) {
|
|
/* suppress zlib wrapper */
|
|
wrap = 0;
|
|
windowBits = -windowBits;
|
|
} else if (windowBits > 15) {
|
|
wrap = 2;
|
|
/* write gzip wrapper instead */
|
|
|
|
windowBits -= 16;
|
|
}
|
|
|
|
if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
|
|
return err(strm, Z_STREAM_ERROR);
|
|
}
|
|
|
|
if (windowBits === 8) {
|
|
windowBits = 9;
|
|
}
|
|
/* until 256-byte window bug fixed */
|
|
|
|
|
|
var s = new DeflateState();
|
|
strm.state = s;
|
|
s.strm = strm;
|
|
s.wrap = wrap;
|
|
s.gzhead = null;
|
|
s.w_bits = windowBits;
|
|
s.w_size = 1 << s.w_bits;
|
|
s.w_mask = s.w_size - 1;
|
|
s.hash_bits = memLevel + 7;
|
|
s.hash_size = 1 << s.hash_bits;
|
|
s.hash_mask = s.hash_size - 1;
|
|
s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
|
|
s.window = new utils.Buf8(s.w_size * 2);
|
|
s.head = new utils.Buf16(s.hash_size);
|
|
s.prev = new utils.Buf16(s.w_size); // Don't need mem init magic for JS.
|
|
//s.high_water = 0; /* nothing written to s->window yet */
|
|
|
|
s.lit_bufsize = 1 << memLevel + 6;
|
|
/* 16K elements by default */
|
|
|
|
s.pending_buf_size = s.lit_bufsize * 4; //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
|
|
//s->pending_buf = (uchf *) overlay;
|
|
|
|
s.pending_buf = new utils.Buf8(s.pending_buf_size); // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
|
|
//s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
|
|
|
|
s.d_buf = 1 * s.lit_bufsize; //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
|
|
|
|
s.l_buf = (1 + 2) * s.lit_bufsize;
|
|
s.level = level;
|
|
s.strategy = strategy;
|
|
s.method = method;
|
|
return deflateReset(strm);
|
|
}
|
|
|
|
function deflateInit(strm, level) {
|
|
return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
|
|
}
|
|
|
|
function deflate(strm, flush) {
|
|
var old_flush, s;
|
|
var beg, val; // for gzip header write only
|
|
|
|
if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) {
|
|
return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
|
|
}
|
|
|
|
s = strm.state;
|
|
|
|
if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush !== Z_FINISH) {
|
|
return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR);
|
|
}
|
|
|
|
s.strm = strm;
|
|
/* just in case */
|
|
|
|
old_flush = s.last_flush;
|
|
s.last_flush = flush;
|
|
/* Write the header */
|
|
|
|
if (s.status === INIT_STATE) {
|
|
if (s.wrap === 2) {
|
|
// GZIP header
|
|
strm.adler = 0; //crc32(0L, Z_NULL, 0);
|
|
|
|
put_byte(s, 31);
|
|
put_byte(s, 139);
|
|
put_byte(s, 8);
|
|
|
|
if (!s.gzhead) {
|
|
// s->gzhead == Z_NULL
|
|
put_byte(s, 0);
|
|
put_byte(s, 0);
|
|
put_byte(s, 0);
|
|
put_byte(s, 0);
|
|
put_byte(s, 0);
|
|
put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
|
|
put_byte(s, OS_CODE);
|
|
s.status = BUSY_STATE;
|
|
} else {
|
|
put_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16));
|
|
put_byte(s, s.gzhead.time & 0xff);
|
|
put_byte(s, s.gzhead.time >> 8 & 0xff);
|
|
put_byte(s, s.gzhead.time >> 16 & 0xff);
|
|
put_byte(s, s.gzhead.time >> 24 & 0xff);
|
|
put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
|
|
put_byte(s, s.gzhead.os & 0xff);
|
|
|
|
if (s.gzhead.extra && s.gzhead.extra.length) {
|
|
put_byte(s, s.gzhead.extra.length & 0xff);
|
|
put_byte(s, s.gzhead.extra.length >> 8 & 0xff);
|
|
}
|
|
|
|
if (s.gzhead.hcrc) {
|
|
strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
|
|
}
|
|
|
|
s.gzindex = 0;
|
|
s.status = EXTRA_STATE;
|
|
}
|
|
} else // DEFLATE header
|
|
{
|
|
var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8;
|
|
var level_flags = -1;
|
|
|
|
if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
|
|
level_flags = 0;
|
|
} else if (s.level < 6) {
|
|
level_flags = 1;
|
|
} else if (s.level === 6) {
|
|
level_flags = 2;
|
|
} else {
|
|
level_flags = 3;
|
|
}
|
|
|
|
header |= level_flags << 6;
|
|
|
|
if (s.strstart !== 0) {
|
|
header |= PRESET_DICT;
|
|
}
|
|
|
|
header += 31 - header % 31;
|
|
s.status = BUSY_STATE;
|
|
putShortMSB(s, header);
|
|
/* Save the adler32 of the preset dictionary: */
|
|
|
|
if (s.strstart !== 0) {
|
|
putShortMSB(s, strm.adler >>> 16);
|
|
putShortMSB(s, strm.adler & 0xffff);
|
|
}
|
|
|
|
strm.adler = 1; // adler32(0L, Z_NULL, 0);
|
|
}
|
|
} //#ifdef GZIP
|
|
|
|
|
|
if (s.status === EXTRA_STATE) {
|
|
if (s.gzhead.extra
|
|
/* != Z_NULL*/
|
|
) {
|
|
beg = s.pending;
|
|
/* start of bytes to update crc */
|
|
|
|
while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
|
|
if (s.pending === s.pending_buf_size) {
|
|
if (s.gzhead.hcrc && s.pending > beg) {
|
|
strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
|
|
}
|
|
|
|
flush_pending(strm);
|
|
beg = s.pending;
|
|
|
|
if (s.pending === s.pending_buf_size) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
|
|
s.gzindex++;
|
|
}
|
|
|
|
if (s.gzhead.hcrc && s.pending > beg) {
|
|
strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
|
|
}
|
|
|
|
if (s.gzindex === s.gzhead.extra.length) {
|
|
s.gzindex = 0;
|
|
s.status = NAME_STATE;
|
|
}
|
|
} else {
|
|
s.status = NAME_STATE;
|
|
}
|
|
}
|
|
|
|
if (s.status === NAME_STATE) {
|
|
if (s.gzhead.name
|
|
/* != Z_NULL*/
|
|
) {
|
|
beg = s.pending;
|
|
/* start of bytes to update crc */
|
|
//int val;
|
|
|
|
do {
|
|
if (s.pending === s.pending_buf_size) {
|
|
if (s.gzhead.hcrc && s.pending > beg) {
|
|
strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
|
|
}
|
|
|
|
flush_pending(strm);
|
|
beg = s.pending;
|
|
|
|
if (s.pending === s.pending_buf_size) {
|
|
val = 1;
|
|
break;
|
|
}
|
|
} // JS specific: little magic to add zero terminator to end of string
|
|
|
|
|
|
if (s.gzindex < s.gzhead.name.length) {
|
|
val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
|
|
} else {
|
|
val = 0;
|
|
}
|
|
|
|
put_byte(s, val);
|
|
} while (val !== 0);
|
|
|
|
if (s.gzhead.hcrc && s.pending > beg) {
|
|
strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
|
|
}
|
|
|
|
if (val === 0) {
|
|
s.gzindex = 0;
|
|
s.status = COMMENT_STATE;
|
|
}
|
|
} else {
|
|
s.status = COMMENT_STATE;
|
|
}
|
|
}
|
|
|
|
if (s.status === COMMENT_STATE) {
|
|
if (s.gzhead.comment
|
|
/* != Z_NULL*/
|
|
) {
|
|
beg = s.pending;
|
|
/* start of bytes to update crc */
|
|
//int val;
|
|
|
|
do {
|
|
if (s.pending === s.pending_buf_size) {
|
|
if (s.gzhead.hcrc && s.pending > beg) {
|
|
strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
|
|
}
|
|
|
|
flush_pending(strm);
|
|
beg = s.pending;
|
|
|
|
if (s.pending === s.pending_buf_size) {
|
|
val = 1;
|
|
break;
|
|
}
|
|
} // JS specific: little magic to add zero terminator to end of string
|
|
|
|
|
|
if (s.gzindex < s.gzhead.comment.length) {
|
|
val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
|
|
} else {
|
|
val = 0;
|
|
}
|
|
|
|
put_byte(s, val);
|
|
} while (val !== 0);
|
|
|
|
if (s.gzhead.hcrc && s.pending > beg) {
|
|
strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
|
|
}
|
|
|
|
if (val === 0) {
|
|
s.status = HCRC_STATE;
|
|
}
|
|
} else {
|
|
s.status = HCRC_STATE;
|
|
}
|
|
}
|
|
|
|
if (s.status === HCRC_STATE) {
|
|
if (s.gzhead.hcrc) {
|
|
if (s.pending + 2 > s.pending_buf_size) {
|
|
flush_pending(strm);
|
|
}
|
|
|
|
if (s.pending + 2 <= s.pending_buf_size) {
|
|
put_byte(s, strm.adler & 0xff);
|
|
put_byte(s, strm.adler >> 8 & 0xff);
|
|
strm.adler = 0; //crc32(0L, Z_NULL, 0);
|
|
|
|
s.status = BUSY_STATE;
|
|
}
|
|
} else {
|
|
s.status = BUSY_STATE;
|
|
}
|
|
} //#endif
|
|
|
|
/* Flush as much pending output as possible */
|
|
|
|
|
|
if (s.pending !== 0) {
|
|
flush_pending(strm);
|
|
|
|
if (strm.avail_out === 0) {
|
|
/* Since avail_out is 0, deflate will be called again with
|
|
* more output space, but possibly with both pending and
|
|
* avail_in equal to zero. There won't be anything to do,
|
|
* but this is not an error situation so make sure we
|
|
* return OK instead of BUF_ERROR at next call of deflate:
|
|
*/
|
|
s.last_flush = -1;
|
|
return Z_OK;
|
|
}
|
|
/* Make sure there is something to do and avoid duplicate consecutive
|
|
* flushes. For repeated and useless calls with Z_FINISH, we keep
|
|
* returning Z_STREAM_END instead of Z_BUF_ERROR.
|
|
*/
|
|
|
|
} else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== Z_FINISH) {
|
|
return err(strm, Z_BUF_ERROR);
|
|
}
|
|
/* User must not provide more input after the first FINISH: */
|
|
|
|
|
|
if (s.status === FINISH_STATE && strm.avail_in !== 0) {
|
|
return err(strm, Z_BUF_ERROR);
|
|
}
|
|
/* Start a new block or continue the current one.
|
|
*/
|
|
|
|
|
|
if (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) {
|
|
var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : s.strategy === Z_RLE ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush);
|
|
|
|
if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
|
|
s.status = FINISH_STATE;
|
|
}
|
|
|
|
if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
|
|
if (strm.avail_out === 0) {
|
|
s.last_flush = -1;
|
|
/* avoid BUF_ERROR next call, see above */
|
|
}
|
|
|
|
return Z_OK;
|
|
/* If flush != Z_NO_FLUSH && avail_out == 0, the next call
|
|
* of deflate should use the same flush parameter to make sure
|
|
* that the flush is complete. So we don't have to output an
|
|
* empty block here, this will be done at next call. This also
|
|
* ensures that for a very small output buffer, we emit at most
|
|
* one empty block.
|
|
*/
|
|
}
|
|
|
|
if (bstate === BS_BLOCK_DONE) {
|
|
if (flush === Z_PARTIAL_FLUSH) {
|
|
trees._tr_align(s);
|
|
} else if (flush !== Z_BLOCK) {
|
|
/* FULL_FLUSH or SYNC_FLUSH */
|
|
trees._tr_stored_block(s, 0, 0, false);
|
|
/* For a full flush, this empty block will be recognized
|
|
* as a special marker by inflate_sync().
|
|
*/
|
|
|
|
|
|
if (flush === Z_FULL_FLUSH) {
|
|
/*** CLEAR_HASH(s); ***/
|
|
|
|
/* forget history */
|
|
zero(s.head); // Fill with NIL (= 0);
|
|
|
|
if (s.lookahead === 0) {
|
|
s.strstart = 0;
|
|
s.block_start = 0;
|
|
s.insert = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
flush_pending(strm);
|
|
|
|
if (strm.avail_out === 0) {
|
|
s.last_flush = -1;
|
|
/* avoid BUF_ERROR at next call, see above */
|
|
|
|
return Z_OK;
|
|
}
|
|
}
|
|
} //Assert(strm->avail_out > 0, "bug2");
|
|
//if (strm.avail_out <= 0) { throw new Error("bug2");}
|
|
|
|
|
|
if (flush !== Z_FINISH) {
|
|
return Z_OK;
|
|
}
|
|
|
|
if (s.wrap <= 0) {
|
|
return Z_STREAM_END;
|
|
}
|
|
/* Write the trailer */
|
|
|
|
|
|
if (s.wrap === 2) {
|
|
put_byte(s, strm.adler & 0xff);
|
|
put_byte(s, strm.adler >> 8 & 0xff);
|
|
put_byte(s, strm.adler >> 16 & 0xff);
|
|
put_byte(s, strm.adler >> 24 & 0xff);
|
|
put_byte(s, strm.total_in & 0xff);
|
|
put_byte(s, strm.total_in >> 8 & 0xff);
|
|
put_byte(s, strm.total_in >> 16 & 0xff);
|
|
put_byte(s, strm.total_in >> 24 & 0xff);
|
|
} else {
|
|
putShortMSB(s, strm.adler >>> 16);
|
|
putShortMSB(s, strm.adler & 0xffff);
|
|
}
|
|
|
|
flush_pending(strm);
|
|
/* If avail_out is zero, the application will call deflate again
|
|
* to flush the rest.
|
|
*/
|
|
|
|
if (s.wrap > 0) {
|
|
s.wrap = -s.wrap;
|
|
}
|
|
/* write the trailer only once! */
|
|
|
|
|
|
return s.pending !== 0 ? Z_OK : Z_STREAM_END;
|
|
}
|
|
|
|
function deflateEnd(strm) {
|
|
var status;
|
|
|
|
if (!strm
|
|
/*== Z_NULL*/
|
|
|| !strm.state
|
|
/*== Z_NULL*/
|
|
) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
status = strm.state.status;
|
|
|
|
if (status !== INIT_STATE && status !== EXTRA_STATE && status !== NAME_STATE && status !== COMMENT_STATE && status !== HCRC_STATE && status !== BUSY_STATE && status !== FINISH_STATE) {
|
|
return err(strm, Z_STREAM_ERROR);
|
|
}
|
|
|
|
strm.state = null;
|
|
return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
|
|
}
|
|
/* =========================================================================
|
|
* Initializes the compression dictionary from the given byte
|
|
* sequence without producing any compressed output.
|
|
*/
|
|
|
|
|
|
function deflateSetDictionary(strm, dictionary) {
|
|
var dictLength = dictionary.length;
|
|
var s;
|
|
var str, n;
|
|
var wrap;
|
|
var avail;
|
|
var next;
|
|
var input;
|
|
var tmpDict;
|
|
|
|
if (!strm
|
|
/*== Z_NULL*/
|
|
|| !strm.state
|
|
/*== Z_NULL*/
|
|
) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
s = strm.state;
|
|
wrap = s.wrap;
|
|
|
|
if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
/* when using zlib wrappers, compute Adler-32 for provided dictionary */
|
|
|
|
|
|
if (wrap === 1) {
|
|
/* adler32(strm->adler, dictionary, dictLength); */
|
|
strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
|
|
}
|
|
|
|
s.wrap = 0;
|
|
/* avoid computing Adler-32 in read_buf */
|
|
|
|
/* if dictionary would fill window, just replace the history */
|
|
|
|
if (dictLength >= s.w_size) {
|
|
if (wrap === 0) {
|
|
/* already empty otherwise */
|
|
|
|
/*** CLEAR_HASH(s); ***/
|
|
zero(s.head); // Fill with NIL (= 0);
|
|
|
|
s.strstart = 0;
|
|
s.block_start = 0;
|
|
s.insert = 0;
|
|
}
|
|
/* use the tail */
|
|
// dictionary = dictionary.slice(dictLength - s.w_size);
|
|
|
|
|
|
tmpDict = new utils.Buf8(s.w_size);
|
|
utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
|
|
dictionary = tmpDict;
|
|
dictLength = s.w_size;
|
|
}
|
|
/* insert dictionary into window and hash */
|
|
|
|
|
|
avail = strm.avail_in;
|
|
next = strm.next_in;
|
|
input = strm.input;
|
|
strm.avail_in = dictLength;
|
|
strm.next_in = 0;
|
|
strm.input = dictionary;
|
|
fill_window(s);
|
|
|
|
while (s.lookahead >= MIN_MATCH) {
|
|
str = s.strstart;
|
|
n = s.lookahead - (MIN_MATCH - 1);
|
|
|
|
do {
|
|
/* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
|
|
s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
|
|
s.prev[str & s.w_mask] = s.head[s.ins_h];
|
|
s.head[s.ins_h] = str;
|
|
str++;
|
|
} while (--n);
|
|
|
|
s.strstart = str;
|
|
s.lookahead = MIN_MATCH - 1;
|
|
fill_window(s);
|
|
}
|
|
|
|
s.strstart += s.lookahead;
|
|
s.block_start = s.strstart;
|
|
s.insert = s.lookahead;
|
|
s.lookahead = 0;
|
|
s.match_length = s.prev_length = MIN_MATCH - 1;
|
|
s.match_available = 0;
|
|
strm.next_in = next;
|
|
strm.input = input;
|
|
strm.avail_in = avail;
|
|
s.wrap = wrap;
|
|
return Z_OK;
|
|
}
|
|
|
|
exports.deflateInit = deflateInit;
|
|
exports.deflateInit2 = deflateInit2;
|
|
exports.deflateReset = deflateReset;
|
|
exports.deflateResetKeep = deflateResetKeep;
|
|
exports.deflateSetHeader = deflateSetHeader;
|
|
exports.deflate = deflate;
|
|
exports.deflateEnd = deflateEnd;
|
|
exports.deflateSetDictionary = deflateSetDictionary;
|
|
exports.deflateInfo = 'pako deflate (from Nodeca project)';
|
|
/* Not implemented
|
|
exports.deflateBound = deflateBound;
|
|
exports.deflateCopy = deflateCopy;
|
|
exports.deflateParams = deflateParams;
|
|
exports.deflatePending = deflatePending;
|
|
exports.deflatePrime = deflatePrime;
|
|
exports.deflateTune = deflateTune;
|
|
*/
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/gzheader.js":
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/gzheader.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
function GZheader() {
|
|
/* true if compressed data believed to be text */
|
|
this.text = 0;
|
|
/* modification time */
|
|
|
|
this.time = 0;
|
|
/* extra flags (not used when writing a gzip file) */
|
|
|
|
this.xflags = 0;
|
|
/* operating system */
|
|
|
|
this.os = 0;
|
|
/* pointer to extra field or Z_NULL if none */
|
|
|
|
this.extra = null;
|
|
/* extra field length (valid if extra != Z_NULL) */
|
|
|
|
this.extra_len = 0; // Actually, we don't need it in JS,
|
|
// but leave for few code modifications
|
|
//
|
|
// Setup limits is not necessary because in js we should not preallocate memory
|
|
// for inflate use constant limit in 65536 bytes
|
|
//
|
|
|
|
/* space at extra (only when reading header) */
|
|
// this.extra_max = 0;
|
|
|
|
/* pointer to zero-terminated file name or Z_NULL */
|
|
|
|
this.name = '';
|
|
/* space at name (only when reading header) */
|
|
// this.name_max = 0;
|
|
|
|
/* pointer to zero-terminated comment or Z_NULL */
|
|
|
|
this.comment = '';
|
|
/* space at comment (only when reading header) */
|
|
// this.comm_max = 0;
|
|
|
|
/* true if there was or will be a header crc */
|
|
|
|
this.hcrc = 0;
|
|
/* true when done reading gzip header (not used when writing a gzip file) */
|
|
|
|
this.done = false;
|
|
}
|
|
|
|
module.exports = GZheader;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/inffast.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/inffast.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
// See state defs from inflate.js
|
|
|
|
var BAD = 30;
|
|
/* got a data error -- remain here until reset */
|
|
|
|
var TYPE = 12;
|
|
/* i: waiting for type bits, including last-flag bit */
|
|
|
|
/*
|
|
Decode literal, length, and distance codes and write out the resulting
|
|
literal and match bytes until either not enough input or output is
|
|
available, an end-of-block is encountered, or a data error is encountered.
|
|
When large enough input and output buffers are supplied to inflate(), for
|
|
example, a 16K input buffer and a 64K output buffer, more than 95% of the
|
|
inflate execution time is spent in this routine.
|
|
|
|
Entry assumptions:
|
|
|
|
state.mode === LEN
|
|
strm.avail_in >= 6
|
|
strm.avail_out >= 258
|
|
start >= strm.avail_out
|
|
state.bits < 8
|
|
|
|
On return, state.mode is one of:
|
|
|
|
LEN -- ran out of enough output space or enough available input
|
|
TYPE -- reached end of block code, inflate() to interpret next block
|
|
BAD -- error in block data
|
|
|
|
Notes:
|
|
|
|
- The maximum input bits used by a length/distance pair is 15 bits for the
|
|
length code, 5 bits for the length extra, 15 bits for the distance code,
|
|
and 13 bits for the distance extra. This totals 48 bits, or six bytes.
|
|
Therefore if strm.avail_in >= 6, then there is enough input to avoid
|
|
checking for available input while decoding.
|
|
|
|
- The maximum bytes that a single length/distance pair can output is 258
|
|
bytes, which is the maximum length that can be coded. inflate_fast()
|
|
requires strm.avail_out >= 258 for each loop to avoid checking for
|
|
output space.
|
|
*/
|
|
|
|
module.exports = function inflate_fast(strm, start) {
|
|
var state;
|
|
|
|
var _in;
|
|
/* local strm.input */
|
|
|
|
|
|
var last;
|
|
/* have enough input while in < last */
|
|
|
|
var _out;
|
|
/* local strm.output */
|
|
|
|
|
|
var beg;
|
|
/* inflate()'s initial strm.output */
|
|
|
|
var end;
|
|
/* while out < end, enough space available */
|
|
//#ifdef INFLATE_STRICT
|
|
|
|
var dmax;
|
|
/* maximum distance from zlib header */
|
|
//#endif
|
|
|
|
var wsize;
|
|
/* window size or zero if not using window */
|
|
|
|
var whave;
|
|
/* valid bytes in the window */
|
|
|
|
var wnext;
|
|
/* window write index */
|
|
// Use `s_window` instead `window`, avoid conflict with instrumentation tools
|
|
|
|
var s_window;
|
|
/* allocated sliding window, if wsize != 0 */
|
|
|
|
var hold;
|
|
/* local strm.hold */
|
|
|
|
var bits;
|
|
/* local strm.bits */
|
|
|
|
var lcode;
|
|
/* local strm.lencode */
|
|
|
|
var dcode;
|
|
/* local strm.distcode */
|
|
|
|
var lmask;
|
|
/* mask for first level of length codes */
|
|
|
|
var dmask;
|
|
/* mask for first level of distance codes */
|
|
|
|
var here;
|
|
/* retrieved table entry */
|
|
|
|
var op;
|
|
/* code bits, operation, extra bits, or */
|
|
|
|
/* window position, window bytes to copy */
|
|
|
|
var len;
|
|
/* match length, unused bytes */
|
|
|
|
var dist;
|
|
/* match distance */
|
|
|
|
var from;
|
|
/* where to copy match from */
|
|
|
|
var from_source;
|
|
var input, output; // JS specific, because we have no pointers
|
|
|
|
/* copy state to local variables */
|
|
|
|
state = strm.state; //here = state.here;
|
|
|
|
_in = strm.next_in;
|
|
input = strm.input;
|
|
last = _in + (strm.avail_in - 5);
|
|
_out = strm.next_out;
|
|
output = strm.output;
|
|
beg = _out - (start - strm.avail_out);
|
|
end = _out + (strm.avail_out - 257); //#ifdef INFLATE_STRICT
|
|
|
|
dmax = state.dmax; //#endif
|
|
|
|
wsize = state.wsize;
|
|
whave = state.whave;
|
|
wnext = state.wnext;
|
|
s_window = state.window;
|
|
hold = state.hold;
|
|
bits = state.bits;
|
|
lcode = state.lencode;
|
|
dcode = state.distcode;
|
|
lmask = (1 << state.lenbits) - 1;
|
|
dmask = (1 << state.distbits) - 1;
|
|
/* decode literals and length/distances until end-of-block or not enough
|
|
input data or output space */
|
|
|
|
top: do {
|
|
if (bits < 15) {
|
|
hold += input[_in++] << bits;
|
|
bits += 8;
|
|
hold += input[_in++] << bits;
|
|
bits += 8;
|
|
}
|
|
|
|
here = lcode[hold & lmask];
|
|
|
|
dolen: for (;;) {
|
|
// Goto emulation
|
|
op = here >>> 24
|
|
/*here.bits*/
|
|
;
|
|
hold >>>= op;
|
|
bits -= op;
|
|
op = here >>> 16 & 0xff
|
|
/*here.op*/
|
|
;
|
|
|
|
if (op === 0) {
|
|
/* literal */
|
|
//Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
|
|
// "inflate: literal '%c'\n" :
|
|
// "inflate: literal 0x%02x\n", here.val));
|
|
output[_out++] = here & 0xffff
|
|
/*here.val*/
|
|
;
|
|
} else if (op & 16) {
|
|
/* length base */
|
|
len = here & 0xffff
|
|
/*here.val*/
|
|
;
|
|
op &= 15;
|
|
/* number of extra bits */
|
|
|
|
if (op) {
|
|
if (bits < op) {
|
|
hold += input[_in++] << bits;
|
|
bits += 8;
|
|
}
|
|
|
|
len += hold & (1 << op) - 1;
|
|
hold >>>= op;
|
|
bits -= op;
|
|
} //Tracevv((stderr, "inflate: length %u\n", len));
|
|
|
|
|
|
if (bits < 15) {
|
|
hold += input[_in++] << bits;
|
|
bits += 8;
|
|
hold += input[_in++] << bits;
|
|
bits += 8;
|
|
}
|
|
|
|
here = dcode[hold & dmask];
|
|
|
|
dodist: for (;;) {
|
|
// goto emulation
|
|
op = here >>> 24
|
|
/*here.bits*/
|
|
;
|
|
hold >>>= op;
|
|
bits -= op;
|
|
op = here >>> 16 & 0xff
|
|
/*here.op*/
|
|
;
|
|
|
|
if (op & 16) {
|
|
/* distance base */
|
|
dist = here & 0xffff
|
|
/*here.val*/
|
|
;
|
|
op &= 15;
|
|
/* number of extra bits */
|
|
|
|
if (bits < op) {
|
|
hold += input[_in++] << bits;
|
|
bits += 8;
|
|
|
|
if (bits < op) {
|
|
hold += input[_in++] << bits;
|
|
bits += 8;
|
|
}
|
|
}
|
|
|
|
dist += hold & (1 << op) - 1; //#ifdef INFLATE_STRICT
|
|
|
|
if (dist > dmax) {
|
|
strm.msg = 'invalid distance too far back';
|
|
state.mode = BAD;
|
|
break top;
|
|
} //#endif
|
|
|
|
|
|
hold >>>= op;
|
|
bits -= op; //Tracevv((stderr, "inflate: distance %u\n", dist));
|
|
|
|
op = _out - beg;
|
|
/* max distance in output */
|
|
|
|
if (dist > op) {
|
|
/* see if copy from window */
|
|
op = dist - op;
|
|
/* distance back in window */
|
|
|
|
if (op > whave) {
|
|
if (state.sane) {
|
|
strm.msg = 'invalid distance too far back';
|
|
state.mode = BAD;
|
|
break top;
|
|
} // (!) This block is disabled in zlib defaults,
|
|
// don't enable it for binary compatibility
|
|
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
|
|
// if (len <= op - whave) {
|
|
// do {
|
|
// output[_out++] = 0;
|
|
// } while (--len);
|
|
// continue top;
|
|
// }
|
|
// len -= op - whave;
|
|
// do {
|
|
// output[_out++] = 0;
|
|
// } while (--op > whave);
|
|
// if (op === 0) {
|
|
// from = _out - dist;
|
|
// do {
|
|
// output[_out++] = output[from++];
|
|
// } while (--len);
|
|
// continue top;
|
|
// }
|
|
//#endif
|
|
|
|
}
|
|
|
|
from = 0; // window index
|
|
|
|
from_source = s_window;
|
|
|
|
if (wnext === 0) {
|
|
/* very common case */
|
|
from += wsize - op;
|
|
|
|
if (op < len) {
|
|
/* some from window */
|
|
len -= op;
|
|
|
|
do {
|
|
output[_out++] = s_window[from++];
|
|
} while (--op);
|
|
|
|
from = _out - dist;
|
|
/* rest from output */
|
|
|
|
from_source = output;
|
|
}
|
|
} else if (wnext < op) {
|
|
/* wrap around window */
|
|
from += wsize + wnext - op;
|
|
op -= wnext;
|
|
|
|
if (op < len) {
|
|
/* some from end of window */
|
|
len -= op;
|
|
|
|
do {
|
|
output[_out++] = s_window[from++];
|
|
} while (--op);
|
|
|
|
from = 0;
|
|
|
|
if (wnext < len) {
|
|
/* some from start of window */
|
|
op = wnext;
|
|
len -= op;
|
|
|
|
do {
|
|
output[_out++] = s_window[from++];
|
|
} while (--op);
|
|
|
|
from = _out - dist;
|
|
/* rest from output */
|
|
|
|
from_source = output;
|
|
}
|
|
}
|
|
} else {
|
|
/* contiguous in window */
|
|
from += wnext - op;
|
|
|
|
if (op < len) {
|
|
/* some from window */
|
|
len -= op;
|
|
|
|
do {
|
|
output[_out++] = s_window[from++];
|
|
} while (--op);
|
|
|
|
from = _out - dist;
|
|
/* rest from output */
|
|
|
|
from_source = output;
|
|
}
|
|
}
|
|
|
|
while (len > 2) {
|
|
output[_out++] = from_source[from++];
|
|
output[_out++] = from_source[from++];
|
|
output[_out++] = from_source[from++];
|
|
len -= 3;
|
|
}
|
|
|
|
if (len) {
|
|
output[_out++] = from_source[from++];
|
|
|
|
if (len > 1) {
|
|
output[_out++] = from_source[from++];
|
|
}
|
|
}
|
|
} else {
|
|
from = _out - dist;
|
|
/* copy direct from output */
|
|
|
|
do {
|
|
/* minimum length is three */
|
|
output[_out++] = output[from++];
|
|
output[_out++] = output[from++];
|
|
output[_out++] = output[from++];
|
|
len -= 3;
|
|
} while (len > 2);
|
|
|
|
if (len) {
|
|
output[_out++] = output[from++];
|
|
|
|
if (len > 1) {
|
|
output[_out++] = output[from++];
|
|
}
|
|
}
|
|
}
|
|
} else if ((op & 64) === 0) {
|
|
/* 2nd level distance code */
|
|
here = dcode[(here & 0xffff) + (
|
|
/*here.val*/
|
|
hold & (1 << op) - 1)];
|
|
continue dodist;
|
|
} else {
|
|
strm.msg = 'invalid distance code';
|
|
state.mode = BAD;
|
|
break top;
|
|
}
|
|
|
|
break; // need to emulate goto via "continue"
|
|
}
|
|
} else if ((op & 64) === 0) {
|
|
/* 2nd level length code */
|
|
here = lcode[(here & 0xffff) + (
|
|
/*here.val*/
|
|
hold & (1 << op) - 1)];
|
|
continue dolen;
|
|
} else if (op & 32) {
|
|
/* end-of-block */
|
|
//Tracevv((stderr, "inflate: end of block\n"));
|
|
state.mode = TYPE;
|
|
break top;
|
|
} else {
|
|
strm.msg = 'invalid literal/length code';
|
|
state.mode = BAD;
|
|
break top;
|
|
}
|
|
|
|
break; // need to emulate goto via "continue"
|
|
}
|
|
} while (_in < last && _out < end);
|
|
/* return unused bytes (on entry, bits < 8, so in won't go too far back) */
|
|
|
|
|
|
len = bits >> 3;
|
|
_in -= len;
|
|
bits -= len << 3;
|
|
hold &= (1 << bits) - 1;
|
|
/* update state and return */
|
|
|
|
strm.next_in = _in;
|
|
strm.next_out = _out;
|
|
strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);
|
|
strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);
|
|
state.hold = hold;
|
|
state.bits = bits;
|
|
return;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/inflate.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/inflate.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
var utils = __webpack_require__(/*! ../utils/common */ "./node_modules/pako/lib/utils/common.js");
|
|
|
|
var adler32 = __webpack_require__(/*! ./adler32 */ "./node_modules/pako/lib/zlib/adler32.js");
|
|
|
|
var crc32 = __webpack_require__(/*! ./crc32 */ "./node_modules/pako/lib/zlib/crc32.js");
|
|
|
|
var inflate_fast = __webpack_require__(/*! ./inffast */ "./node_modules/pako/lib/zlib/inffast.js");
|
|
|
|
var inflate_table = __webpack_require__(/*! ./inftrees */ "./node_modules/pako/lib/zlib/inftrees.js");
|
|
|
|
var CODES = 0;
|
|
var LENS = 1;
|
|
var DISTS = 2;
|
|
/* Public constants ==========================================================*/
|
|
|
|
/* ===========================================================================*/
|
|
|
|
/* Allowed flush values; see deflate() and inflate() below for details */
|
|
//var Z_NO_FLUSH = 0;
|
|
//var Z_PARTIAL_FLUSH = 1;
|
|
//var Z_SYNC_FLUSH = 2;
|
|
//var Z_FULL_FLUSH = 3;
|
|
|
|
var Z_FINISH = 4;
|
|
var Z_BLOCK = 5;
|
|
var Z_TREES = 6;
|
|
/* Return codes for the compression/decompression functions. Negative values
|
|
* are errors, positive values are used for special but normal events.
|
|
*/
|
|
|
|
var Z_OK = 0;
|
|
var Z_STREAM_END = 1;
|
|
var Z_NEED_DICT = 2; //var Z_ERRNO = -1;
|
|
|
|
var Z_STREAM_ERROR = -2;
|
|
var Z_DATA_ERROR = -3;
|
|
var Z_MEM_ERROR = -4;
|
|
var Z_BUF_ERROR = -5; //var Z_VERSION_ERROR = -6;
|
|
|
|
/* The deflate compression method */
|
|
|
|
var Z_DEFLATED = 8;
|
|
/* STATES ====================================================================*/
|
|
|
|
/* ===========================================================================*/
|
|
|
|
var HEAD = 1;
|
|
/* i: waiting for magic header */
|
|
|
|
var FLAGS = 2;
|
|
/* i: waiting for method and flags (gzip) */
|
|
|
|
var TIME = 3;
|
|
/* i: waiting for modification time (gzip) */
|
|
|
|
var OS = 4;
|
|
/* i: waiting for extra flags and operating system (gzip) */
|
|
|
|
var EXLEN = 5;
|
|
/* i: waiting for extra length (gzip) */
|
|
|
|
var EXTRA = 6;
|
|
/* i: waiting for extra bytes (gzip) */
|
|
|
|
var NAME = 7;
|
|
/* i: waiting for end of file name (gzip) */
|
|
|
|
var COMMENT = 8;
|
|
/* i: waiting for end of comment (gzip) */
|
|
|
|
var HCRC = 9;
|
|
/* i: waiting for header crc (gzip) */
|
|
|
|
var DICTID = 10;
|
|
/* i: waiting for dictionary check value */
|
|
|
|
var DICT = 11;
|
|
/* waiting for inflateSetDictionary() call */
|
|
|
|
var TYPE = 12;
|
|
/* i: waiting for type bits, including last-flag bit */
|
|
|
|
var TYPEDO = 13;
|
|
/* i: same, but skip check to exit inflate on new block */
|
|
|
|
var STORED = 14;
|
|
/* i: waiting for stored size (length and complement) */
|
|
|
|
var COPY_ = 15;
|
|
/* i/o: same as COPY below, but only first time in */
|
|
|
|
var COPY = 16;
|
|
/* i/o: waiting for input or output to copy stored block */
|
|
|
|
var TABLE = 17;
|
|
/* i: waiting for dynamic block table lengths */
|
|
|
|
var LENLENS = 18;
|
|
/* i: waiting for code length code lengths */
|
|
|
|
var CODELENS = 19;
|
|
/* i: waiting for length/lit and distance code lengths */
|
|
|
|
var LEN_ = 20;
|
|
/* i: same as LEN below, but only first time in */
|
|
|
|
var LEN = 21;
|
|
/* i: waiting for length/lit/eob code */
|
|
|
|
var LENEXT = 22;
|
|
/* i: waiting for length extra bits */
|
|
|
|
var DIST = 23;
|
|
/* i: waiting for distance code */
|
|
|
|
var DISTEXT = 24;
|
|
/* i: waiting for distance extra bits */
|
|
|
|
var MATCH = 25;
|
|
/* o: waiting for output space to copy string */
|
|
|
|
var LIT = 26;
|
|
/* o: waiting for output space to write literal */
|
|
|
|
var CHECK = 27;
|
|
/* i: waiting for 32-bit check value */
|
|
|
|
var LENGTH = 28;
|
|
/* i: waiting for 32-bit length (gzip) */
|
|
|
|
var DONE = 29;
|
|
/* finished check, done -- remain here until reset */
|
|
|
|
var BAD = 30;
|
|
/* got a data error -- remain here until reset */
|
|
|
|
var MEM = 31;
|
|
/* got an inflate() memory error -- remain here until reset */
|
|
|
|
var SYNC = 32;
|
|
/* looking for synchronization bytes to restart inflate() */
|
|
|
|
/* ===========================================================================*/
|
|
|
|
var ENOUGH_LENS = 852;
|
|
var ENOUGH_DISTS = 592; //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
|
|
|
|
var MAX_WBITS = 15;
|
|
/* 32K LZ77 window */
|
|
|
|
var DEF_WBITS = MAX_WBITS;
|
|
|
|
function zswap32(q) {
|
|
return (q >>> 24 & 0xff) + (q >>> 8 & 0xff00) + ((q & 0xff00) << 8) + ((q & 0xff) << 24);
|
|
}
|
|
|
|
function InflateState() {
|
|
this.mode = 0;
|
|
/* current inflate mode */
|
|
|
|
this.last = false;
|
|
/* true if processing last block */
|
|
|
|
this.wrap = 0;
|
|
/* bit 0 true for zlib, bit 1 true for gzip */
|
|
|
|
this.havedict = false;
|
|
/* true if dictionary provided */
|
|
|
|
this.flags = 0;
|
|
/* gzip header method and flags (0 if zlib) */
|
|
|
|
this.dmax = 0;
|
|
/* zlib header max distance (INFLATE_STRICT) */
|
|
|
|
this.check = 0;
|
|
/* protected copy of check value */
|
|
|
|
this.total = 0;
|
|
/* protected copy of output count */
|
|
// TODO: may be {}
|
|
|
|
this.head = null;
|
|
/* where to save gzip header information */
|
|
|
|
/* sliding window */
|
|
|
|
this.wbits = 0;
|
|
/* log base 2 of requested window size */
|
|
|
|
this.wsize = 0;
|
|
/* window size or zero if not using window */
|
|
|
|
this.whave = 0;
|
|
/* valid bytes in the window */
|
|
|
|
this.wnext = 0;
|
|
/* window write index */
|
|
|
|
this.window = null;
|
|
/* allocated sliding window, if needed */
|
|
|
|
/* bit accumulator */
|
|
|
|
this.hold = 0;
|
|
/* input bit accumulator */
|
|
|
|
this.bits = 0;
|
|
/* number of bits in "in" */
|
|
|
|
/* for string and stored block copying */
|
|
|
|
this.length = 0;
|
|
/* literal or length of data to copy */
|
|
|
|
this.offset = 0;
|
|
/* distance back to copy string from */
|
|
|
|
/* for table and code decoding */
|
|
|
|
this.extra = 0;
|
|
/* extra bits needed */
|
|
|
|
/* fixed and dynamic code tables */
|
|
|
|
this.lencode = null;
|
|
/* starting table for length/literal codes */
|
|
|
|
this.distcode = null;
|
|
/* starting table for distance codes */
|
|
|
|
this.lenbits = 0;
|
|
/* index bits for lencode */
|
|
|
|
this.distbits = 0;
|
|
/* index bits for distcode */
|
|
|
|
/* dynamic table building */
|
|
|
|
this.ncode = 0;
|
|
/* number of code length code lengths */
|
|
|
|
this.nlen = 0;
|
|
/* number of length code lengths */
|
|
|
|
this.ndist = 0;
|
|
/* number of distance code lengths */
|
|
|
|
this.have = 0;
|
|
/* number of code lengths in lens[] */
|
|
|
|
this.next = null;
|
|
/* next available space in codes[] */
|
|
|
|
this.lens = new utils.Buf16(320);
|
|
/* temporary storage for code lengths */
|
|
|
|
this.work = new utils.Buf16(288);
|
|
/* work area for code table building */
|
|
|
|
/*
|
|
because we don't have pointers in js, we use lencode and distcode directly
|
|
as buffers so we don't need codes
|
|
*/
|
|
//this.codes = new utils.Buf32(ENOUGH); /* space for code tables */
|
|
|
|
this.lendyn = null;
|
|
/* dynamic table for length/literal codes (JS specific) */
|
|
|
|
this.distdyn = null;
|
|
/* dynamic table for distance codes (JS specific) */
|
|
|
|
this.sane = 0;
|
|
/* if false, allow invalid distance too far */
|
|
|
|
this.back = 0;
|
|
/* bits back of last unprocessed length/lit */
|
|
|
|
this.was = 0;
|
|
/* initial length of match */
|
|
}
|
|
|
|
function inflateResetKeep(strm) {
|
|
var state;
|
|
|
|
if (!strm || !strm.state) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
state = strm.state;
|
|
strm.total_in = strm.total_out = state.total = 0;
|
|
strm.msg = '';
|
|
/*Z_NULL*/
|
|
|
|
if (state.wrap) {
|
|
/* to support ill-conceived Java test suite */
|
|
strm.adler = state.wrap & 1;
|
|
}
|
|
|
|
state.mode = HEAD;
|
|
state.last = 0;
|
|
state.havedict = 0;
|
|
state.dmax = 32768;
|
|
state.head = null
|
|
/*Z_NULL*/
|
|
;
|
|
state.hold = 0;
|
|
state.bits = 0; //state.lencode = state.distcode = state.next = state.codes;
|
|
|
|
state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
|
|
state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
|
|
state.sane = 1;
|
|
state.back = -1; //Tracev((stderr, "inflate: reset\n"));
|
|
|
|
return Z_OK;
|
|
}
|
|
|
|
function inflateReset(strm) {
|
|
var state;
|
|
|
|
if (!strm || !strm.state) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
state = strm.state;
|
|
state.wsize = 0;
|
|
state.whave = 0;
|
|
state.wnext = 0;
|
|
return inflateResetKeep(strm);
|
|
}
|
|
|
|
function inflateReset2(strm, windowBits) {
|
|
var wrap;
|
|
var state;
|
|
/* get the state */
|
|
|
|
if (!strm || !strm.state) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
state = strm.state;
|
|
/* extract wrap request from windowBits parameter */
|
|
|
|
if (windowBits < 0) {
|
|
wrap = 0;
|
|
windowBits = -windowBits;
|
|
} else {
|
|
wrap = (windowBits >> 4) + 1;
|
|
|
|
if (windowBits < 48) {
|
|
windowBits &= 15;
|
|
}
|
|
}
|
|
/* set number of window bits, free window if different */
|
|
|
|
|
|
if (windowBits && (windowBits < 8 || windowBits > 15)) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
if (state.window !== null && state.wbits !== windowBits) {
|
|
state.window = null;
|
|
}
|
|
/* update state and reset the rest of it */
|
|
|
|
|
|
state.wrap = wrap;
|
|
state.wbits = windowBits;
|
|
return inflateReset(strm);
|
|
}
|
|
|
|
function inflateInit2(strm, windowBits) {
|
|
var ret;
|
|
var state;
|
|
|
|
if (!strm) {
|
|
return Z_STREAM_ERROR;
|
|
} //strm.msg = Z_NULL; /* in case we return an error */
|
|
|
|
|
|
state = new InflateState(); //if (state === Z_NULL) return Z_MEM_ERROR;
|
|
//Tracev((stderr, "inflate: allocated\n"));
|
|
|
|
strm.state = state;
|
|
state.window = null
|
|
/*Z_NULL*/
|
|
;
|
|
ret = inflateReset2(strm, windowBits);
|
|
|
|
if (ret !== Z_OK) {
|
|
strm.state = null
|
|
/*Z_NULL*/
|
|
;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
function inflateInit(strm) {
|
|
return inflateInit2(strm, DEF_WBITS);
|
|
}
|
|
/*
|
|
Return state with length and distance decoding tables and index sizes set to
|
|
fixed code decoding. Normally this returns fixed tables from inffixed.h.
|
|
If BUILDFIXED is defined, then instead this routine builds the tables the
|
|
first time it's called, and returns those tables the first time and
|
|
thereafter. This reduces the size of the code by about 2K bytes, in
|
|
exchange for a little execution time. However, BUILDFIXED should not be
|
|
used for threaded applications, since the rewriting of the tables and virgin
|
|
may not be thread-safe.
|
|
*/
|
|
|
|
|
|
var virgin = true;
|
|
var lenfix, distfix; // We have no pointers in JS, so keep tables separate
|
|
|
|
function fixedtables(state) {
|
|
/* build fixed huffman tables if first call (may not be thread safe) */
|
|
if (virgin) {
|
|
var sym;
|
|
lenfix = new utils.Buf32(512);
|
|
distfix = new utils.Buf32(32);
|
|
/* literal/length table */
|
|
|
|
sym = 0;
|
|
|
|
while (sym < 144) {
|
|
state.lens[sym++] = 8;
|
|
}
|
|
|
|
while (sym < 256) {
|
|
state.lens[sym++] = 9;
|
|
}
|
|
|
|
while (sym < 280) {
|
|
state.lens[sym++] = 7;
|
|
}
|
|
|
|
while (sym < 288) {
|
|
state.lens[sym++] = 8;
|
|
}
|
|
|
|
inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {
|
|
bits: 9
|
|
});
|
|
/* distance table */
|
|
|
|
sym = 0;
|
|
|
|
while (sym < 32) {
|
|
state.lens[sym++] = 5;
|
|
}
|
|
|
|
inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {
|
|
bits: 5
|
|
});
|
|
/* do this just once */
|
|
|
|
virgin = false;
|
|
}
|
|
|
|
state.lencode = lenfix;
|
|
state.lenbits = 9;
|
|
state.distcode = distfix;
|
|
state.distbits = 5;
|
|
}
|
|
/*
|
|
Update the window with the last wsize (normally 32K) bytes written before
|
|
returning. If window does not exist yet, create it. This is only called
|
|
when a window is already in use, or when output has been written during this
|
|
inflate call, but the end of the deflate stream has not been reached yet.
|
|
It is also called to create a window for dictionary data when a dictionary
|
|
is loaded.
|
|
|
|
Providing output buffers larger than 32K to inflate() should provide a speed
|
|
advantage, since only the last 32K of output is copied to the sliding window
|
|
upon return from inflate(), and since all distances after the first 32K of
|
|
output will fall in the output data, making match copies simpler and faster.
|
|
The advantage may be dependent on the size of the processor's data caches.
|
|
*/
|
|
|
|
|
|
function updatewindow(strm, src, end, copy) {
|
|
var dist;
|
|
var state = strm.state;
|
|
/* if it hasn't been done already, allocate space for the window */
|
|
|
|
if (state.window === null) {
|
|
state.wsize = 1 << state.wbits;
|
|
state.wnext = 0;
|
|
state.whave = 0;
|
|
state.window = new utils.Buf8(state.wsize);
|
|
}
|
|
/* copy state->wsize or less output bytes into the circular window */
|
|
|
|
|
|
if (copy >= state.wsize) {
|
|
utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
|
|
state.wnext = 0;
|
|
state.whave = state.wsize;
|
|
} else {
|
|
dist = state.wsize - state.wnext;
|
|
|
|
if (dist > copy) {
|
|
dist = copy;
|
|
} //zmemcpy(state->window + state->wnext, end - copy, dist);
|
|
|
|
|
|
utils.arraySet(state.window, src, end - copy, dist, state.wnext);
|
|
copy -= dist;
|
|
|
|
if (copy) {
|
|
//zmemcpy(state->window, end - copy, copy);
|
|
utils.arraySet(state.window, src, end - copy, copy, 0);
|
|
state.wnext = copy;
|
|
state.whave = state.wsize;
|
|
} else {
|
|
state.wnext += dist;
|
|
|
|
if (state.wnext === state.wsize) {
|
|
state.wnext = 0;
|
|
}
|
|
|
|
if (state.whave < state.wsize) {
|
|
state.whave += dist;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
function inflate(strm, flush) {
|
|
var state;
|
|
var input, output; // input/output buffers
|
|
|
|
var next;
|
|
/* next input INDEX */
|
|
|
|
var put;
|
|
/* next output INDEX */
|
|
|
|
var have, left;
|
|
/* available input and output */
|
|
|
|
var hold;
|
|
/* bit buffer */
|
|
|
|
var bits;
|
|
/* bits in bit buffer */
|
|
|
|
var _in, _out;
|
|
/* save starting available input and output */
|
|
|
|
|
|
var copy;
|
|
/* number of stored or match bytes to copy */
|
|
|
|
var from;
|
|
/* where to copy match bytes from */
|
|
|
|
var from_source;
|
|
var here = 0;
|
|
/* current decoding table entry */
|
|
|
|
var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
|
|
//var last; /* parent table entry */
|
|
|
|
var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
|
|
|
|
var len;
|
|
/* length to copy for repeats, bits to drop */
|
|
|
|
var ret;
|
|
/* return code */
|
|
|
|
var hbuf = new utils.Buf8(4);
|
|
/* buffer for gzip header crc calculation */
|
|
|
|
var opts;
|
|
var n; // temporary var for NEED_BITS
|
|
|
|
var order =
|
|
/* permutation of code lengths */
|
|
[16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
|
|
|
|
if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
state = strm.state;
|
|
|
|
if (state.mode === TYPE) {
|
|
state.mode = TYPEDO;
|
|
}
|
|
/* skip check */
|
|
//--- LOAD() ---
|
|
|
|
|
|
put = strm.next_out;
|
|
output = strm.output;
|
|
left = strm.avail_out;
|
|
next = strm.next_in;
|
|
input = strm.input;
|
|
have = strm.avail_in;
|
|
hold = state.hold;
|
|
bits = state.bits; //---
|
|
|
|
_in = have;
|
|
_out = left;
|
|
ret = Z_OK;
|
|
|
|
inf_leave: // goto emulation
|
|
for (;;) {
|
|
switch (state.mode) {
|
|
case HEAD:
|
|
if (state.wrap === 0) {
|
|
state.mode = TYPEDO;
|
|
break;
|
|
} //=== NEEDBITS(16);
|
|
|
|
|
|
while (bits < 16) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
if (state.wrap & 2 && hold === 0x8b1f) {
|
|
/* gzip header */
|
|
state.check = 0
|
|
/*crc32(0L, Z_NULL, 0)*/
|
|
; //=== CRC2(state.check, hold);
|
|
|
|
hbuf[0] = hold & 0xff;
|
|
hbuf[1] = hold >>> 8 & 0xff;
|
|
state.check = crc32(state.check, hbuf, 2, 0); //===//
|
|
//=== INITBITS();
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
|
|
state.mode = FLAGS;
|
|
break;
|
|
}
|
|
|
|
state.flags = 0;
|
|
/* expect zlib header */
|
|
|
|
if (state.head) {
|
|
state.head.done = false;
|
|
}
|
|
|
|
if (!(state.wrap & 1) ||
|
|
/* check if zlib header allowed */
|
|
(((hold & 0xff) <<
|
|
/*BITS(8)*/
|
|
8) + (hold >> 8)) % 31) {
|
|
strm.msg = 'incorrect header check';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
if ((hold & 0x0f) !==
|
|
/*BITS(4)*/
|
|
Z_DEFLATED) {
|
|
strm.msg = 'unknown compression method';
|
|
state.mode = BAD;
|
|
break;
|
|
} //--- DROPBITS(4) ---//
|
|
|
|
|
|
hold >>>= 4;
|
|
bits -= 4; //---//
|
|
|
|
len = (hold & 0x0f) +
|
|
/*BITS(4)*/
|
|
8;
|
|
|
|
if (state.wbits === 0) {
|
|
state.wbits = len;
|
|
} else if (len > state.wbits) {
|
|
strm.msg = 'invalid window size';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
state.dmax = 1 << len; //Tracev((stderr, "inflate: zlib header ok\n"));
|
|
|
|
strm.adler = state.check = 1
|
|
/*adler32(0L, Z_NULL, 0)*/
|
|
;
|
|
state.mode = hold & 0x200 ? DICTID : TYPE; //=== INITBITS();
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
|
|
break;
|
|
|
|
case FLAGS:
|
|
//=== NEEDBITS(16); */
|
|
while (bits < 16) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
state.flags = hold;
|
|
|
|
if ((state.flags & 0xff) !== Z_DEFLATED) {
|
|
strm.msg = 'unknown compression method';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
if (state.flags & 0xe000) {
|
|
strm.msg = 'unknown header flags set';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
if (state.head) {
|
|
state.head.text = hold >> 8 & 1;
|
|
}
|
|
|
|
if (state.flags & 0x0200) {
|
|
//=== CRC2(state.check, hold);
|
|
hbuf[0] = hold & 0xff;
|
|
hbuf[1] = hold >>> 8 & 0xff;
|
|
state.check = crc32(state.check, hbuf, 2, 0); //===//
|
|
} //=== INITBITS();
|
|
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
|
|
state.mode = TIME;
|
|
|
|
/* falls through */
|
|
|
|
case TIME:
|
|
//=== NEEDBITS(32); */
|
|
while (bits < 32) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
if (state.head) {
|
|
state.head.time = hold;
|
|
}
|
|
|
|
if (state.flags & 0x0200) {
|
|
//=== CRC4(state.check, hold)
|
|
hbuf[0] = hold & 0xff;
|
|
hbuf[1] = hold >>> 8 & 0xff;
|
|
hbuf[2] = hold >>> 16 & 0xff;
|
|
hbuf[3] = hold >>> 24 & 0xff;
|
|
state.check = crc32(state.check, hbuf, 4, 0); //===
|
|
} //=== INITBITS();
|
|
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
|
|
state.mode = OS;
|
|
|
|
/* falls through */
|
|
|
|
case OS:
|
|
//=== NEEDBITS(16); */
|
|
while (bits < 16) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
if (state.head) {
|
|
state.head.xflags = hold & 0xff;
|
|
state.head.os = hold >> 8;
|
|
}
|
|
|
|
if (state.flags & 0x0200) {
|
|
//=== CRC2(state.check, hold);
|
|
hbuf[0] = hold & 0xff;
|
|
hbuf[1] = hold >>> 8 & 0xff;
|
|
state.check = crc32(state.check, hbuf, 2, 0); //===//
|
|
} //=== INITBITS();
|
|
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
|
|
state.mode = EXLEN;
|
|
|
|
/* falls through */
|
|
|
|
case EXLEN:
|
|
if (state.flags & 0x0400) {
|
|
//=== NEEDBITS(16); */
|
|
while (bits < 16) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
state.length = hold;
|
|
|
|
if (state.head) {
|
|
state.head.extra_len = hold;
|
|
}
|
|
|
|
if (state.flags & 0x0200) {
|
|
//=== CRC2(state.check, hold);
|
|
hbuf[0] = hold & 0xff;
|
|
hbuf[1] = hold >>> 8 & 0xff;
|
|
state.check = crc32(state.check, hbuf, 2, 0); //===//
|
|
} //=== INITBITS();
|
|
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
} else if (state.head) {
|
|
state.head.extra = null
|
|
/*Z_NULL*/
|
|
;
|
|
}
|
|
|
|
state.mode = EXTRA;
|
|
|
|
/* falls through */
|
|
|
|
case EXTRA:
|
|
if (state.flags & 0x0400) {
|
|
copy = state.length;
|
|
|
|
if (copy > have) {
|
|
copy = have;
|
|
}
|
|
|
|
if (copy) {
|
|
if (state.head) {
|
|
len = state.head.extra_len - state.length;
|
|
|
|
if (!state.head.extra) {
|
|
// Use untyped array for more convenient processing later
|
|
state.head.extra = new Array(state.head.extra_len);
|
|
}
|
|
|
|
utils.arraySet(state.head.extra, input, next, // extra field is limited to 65536 bytes
|
|
// - no need for additional size check
|
|
copy,
|
|
/*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
|
|
len); //zmemcpy(state.head.extra + len, next,
|
|
// len + copy > state.head.extra_max ?
|
|
// state.head.extra_max - len : copy);
|
|
}
|
|
|
|
if (state.flags & 0x0200) {
|
|
state.check = crc32(state.check, input, copy, next);
|
|
}
|
|
|
|
have -= copy;
|
|
next += copy;
|
|
state.length -= copy;
|
|
}
|
|
|
|
if (state.length) {
|
|
break inf_leave;
|
|
}
|
|
}
|
|
|
|
state.length = 0;
|
|
state.mode = NAME;
|
|
|
|
/* falls through */
|
|
|
|
case NAME:
|
|
if (state.flags & 0x0800) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
copy = 0;
|
|
|
|
do {
|
|
// TODO: 2 or 1 bytes?
|
|
len = input[next + copy++];
|
|
/* use constant limit because in js we should not preallocate memory */
|
|
|
|
if (state.head && len && state.length < 65536
|
|
/*state.head.name_max*/
|
|
) {
|
|
state.head.name += String.fromCharCode(len);
|
|
}
|
|
} while (len && copy < have);
|
|
|
|
if (state.flags & 0x0200) {
|
|
state.check = crc32(state.check, input, copy, next);
|
|
}
|
|
|
|
have -= copy;
|
|
next += copy;
|
|
|
|
if (len) {
|
|
break inf_leave;
|
|
}
|
|
} else if (state.head) {
|
|
state.head.name = null;
|
|
}
|
|
|
|
state.length = 0;
|
|
state.mode = COMMENT;
|
|
|
|
/* falls through */
|
|
|
|
case COMMENT:
|
|
if (state.flags & 0x1000) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
copy = 0;
|
|
|
|
do {
|
|
len = input[next + copy++];
|
|
/* use constant limit because in js we should not preallocate memory */
|
|
|
|
if (state.head && len && state.length < 65536
|
|
/*state.head.comm_max*/
|
|
) {
|
|
state.head.comment += String.fromCharCode(len);
|
|
}
|
|
} while (len && copy < have);
|
|
|
|
if (state.flags & 0x0200) {
|
|
state.check = crc32(state.check, input, copy, next);
|
|
}
|
|
|
|
have -= copy;
|
|
next += copy;
|
|
|
|
if (len) {
|
|
break inf_leave;
|
|
}
|
|
} else if (state.head) {
|
|
state.head.comment = null;
|
|
}
|
|
|
|
state.mode = HCRC;
|
|
|
|
/* falls through */
|
|
|
|
case HCRC:
|
|
if (state.flags & 0x0200) {
|
|
//=== NEEDBITS(16); */
|
|
while (bits < 16) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
if (hold !== (state.check & 0xffff)) {
|
|
strm.msg = 'header crc mismatch';
|
|
state.mode = BAD;
|
|
break;
|
|
} //=== INITBITS();
|
|
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
}
|
|
|
|
if (state.head) {
|
|
state.head.hcrc = state.flags >> 9 & 1;
|
|
state.head.done = true;
|
|
}
|
|
|
|
strm.adler = state.check = 0;
|
|
state.mode = TYPE;
|
|
break;
|
|
|
|
case DICTID:
|
|
//=== NEEDBITS(32); */
|
|
while (bits < 32) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
strm.adler = state.check = zswap32(hold); //=== INITBITS();
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
|
|
state.mode = DICT;
|
|
|
|
/* falls through */
|
|
|
|
case DICT:
|
|
if (state.havedict === 0) {
|
|
//--- RESTORE() ---
|
|
strm.next_out = put;
|
|
strm.avail_out = left;
|
|
strm.next_in = next;
|
|
strm.avail_in = have;
|
|
state.hold = hold;
|
|
state.bits = bits; //---
|
|
|
|
return Z_NEED_DICT;
|
|
}
|
|
|
|
strm.adler = state.check = 1
|
|
/*adler32(0L, Z_NULL, 0)*/
|
|
;
|
|
state.mode = TYPE;
|
|
|
|
/* falls through */
|
|
|
|
case TYPE:
|
|
if (flush === Z_BLOCK || flush === Z_TREES) {
|
|
break inf_leave;
|
|
}
|
|
|
|
/* falls through */
|
|
|
|
case TYPEDO:
|
|
if (state.last) {
|
|
//--- BYTEBITS() ---//
|
|
hold >>>= bits & 7;
|
|
bits -= bits & 7; //---//
|
|
|
|
state.mode = CHECK;
|
|
break;
|
|
} //=== NEEDBITS(3); */
|
|
|
|
|
|
while (bits < 3) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
state.last = hold & 0x01
|
|
/*BITS(1)*/
|
|
; //--- DROPBITS(1) ---//
|
|
|
|
hold >>>= 1;
|
|
bits -= 1; //---//
|
|
|
|
switch (hold & 0x03) {
|
|
/*BITS(2)*/
|
|
case 0:
|
|
/* stored block */
|
|
//Tracev((stderr, "inflate: stored block%s\n",
|
|
// state.last ? " (last)" : ""));
|
|
state.mode = STORED;
|
|
break;
|
|
|
|
case 1:
|
|
/* fixed block */
|
|
fixedtables(state); //Tracev((stderr, "inflate: fixed codes block%s\n",
|
|
// state.last ? " (last)" : ""));
|
|
|
|
state.mode = LEN_;
|
|
/* decode codes */
|
|
|
|
if (flush === Z_TREES) {
|
|
//--- DROPBITS(2) ---//
|
|
hold >>>= 2;
|
|
bits -= 2; //---//
|
|
|
|
break inf_leave;
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
/* dynamic block */
|
|
//Tracev((stderr, "inflate: dynamic codes block%s\n",
|
|
// state.last ? " (last)" : ""));
|
|
state.mode = TABLE;
|
|
break;
|
|
|
|
case 3:
|
|
strm.msg = 'invalid block type';
|
|
state.mode = BAD;
|
|
} //--- DROPBITS(2) ---//
|
|
|
|
|
|
hold >>>= 2;
|
|
bits -= 2; //---//
|
|
|
|
break;
|
|
|
|
case STORED:
|
|
//--- BYTEBITS() ---// /* go to byte boundary */
|
|
hold >>>= bits & 7;
|
|
bits -= bits & 7; //---//
|
|
//=== NEEDBITS(32); */
|
|
|
|
while (bits < 32) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
if ((hold & 0xffff) !== (hold >>> 16 ^ 0xffff)) {
|
|
strm.msg = 'invalid stored block lengths';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
state.length = hold & 0xffff; //Tracev((stderr, "inflate: stored length %u\n",
|
|
// state.length));
|
|
//=== INITBITS();
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
|
|
state.mode = COPY_;
|
|
|
|
if (flush === Z_TREES) {
|
|
break inf_leave;
|
|
}
|
|
|
|
/* falls through */
|
|
|
|
case COPY_:
|
|
state.mode = COPY;
|
|
|
|
/* falls through */
|
|
|
|
case COPY:
|
|
copy = state.length;
|
|
|
|
if (copy) {
|
|
if (copy > have) {
|
|
copy = have;
|
|
}
|
|
|
|
if (copy > left) {
|
|
copy = left;
|
|
}
|
|
|
|
if (copy === 0) {
|
|
break inf_leave;
|
|
} //--- zmemcpy(put, next, copy); ---
|
|
|
|
|
|
utils.arraySet(output, input, next, copy, put); //---//
|
|
|
|
have -= copy;
|
|
next += copy;
|
|
left -= copy;
|
|
put += copy;
|
|
state.length -= copy;
|
|
break;
|
|
} //Tracev((stderr, "inflate: stored end\n"));
|
|
|
|
|
|
state.mode = TYPE;
|
|
break;
|
|
|
|
case TABLE:
|
|
//=== NEEDBITS(14); */
|
|
while (bits < 14) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
state.nlen = (hold & 0x1f) +
|
|
/*BITS(5)*/
|
|
257; //--- DROPBITS(5) ---//
|
|
|
|
hold >>>= 5;
|
|
bits -= 5; //---//
|
|
|
|
state.ndist = (hold & 0x1f) +
|
|
/*BITS(5)*/
|
|
1; //--- DROPBITS(5) ---//
|
|
|
|
hold >>>= 5;
|
|
bits -= 5; //---//
|
|
|
|
state.ncode = (hold & 0x0f) +
|
|
/*BITS(4)*/
|
|
4; //--- DROPBITS(4) ---//
|
|
|
|
hold >>>= 4;
|
|
bits -= 4; //---//
|
|
//#ifndef PKZIP_BUG_WORKAROUND
|
|
|
|
if (state.nlen > 286 || state.ndist > 30) {
|
|
strm.msg = 'too many length or distance symbols';
|
|
state.mode = BAD;
|
|
break;
|
|
} //#endif
|
|
//Tracev((stderr, "inflate: table sizes ok\n"));
|
|
|
|
|
|
state.have = 0;
|
|
state.mode = LENLENS;
|
|
|
|
/* falls through */
|
|
|
|
case LENLENS:
|
|
while (state.have < state.ncode) {
|
|
//=== NEEDBITS(3);
|
|
while (bits < 3) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
state.lens[order[state.have++]] = hold & 0x07; //BITS(3);
|
|
//--- DROPBITS(3) ---//
|
|
|
|
hold >>>= 3;
|
|
bits -= 3; //---//
|
|
}
|
|
|
|
while (state.have < 19) {
|
|
state.lens[order[state.have++]] = 0;
|
|
} // We have separate tables & no pointers. 2 commented lines below not needed.
|
|
//state.next = state.codes;
|
|
//state.lencode = state.next;
|
|
// Switch to use dynamic table
|
|
|
|
|
|
state.lencode = state.lendyn;
|
|
state.lenbits = 7;
|
|
opts = {
|
|
bits: state.lenbits
|
|
};
|
|
ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
|
|
state.lenbits = opts.bits;
|
|
|
|
if (ret) {
|
|
strm.msg = 'invalid code lengths set';
|
|
state.mode = BAD;
|
|
break;
|
|
} //Tracev((stderr, "inflate: code lengths ok\n"));
|
|
|
|
|
|
state.have = 0;
|
|
state.mode = CODELENS;
|
|
|
|
/* falls through */
|
|
|
|
case CODELENS:
|
|
while (state.have < state.nlen + state.ndist) {
|
|
for (;;) {
|
|
here = state.lencode[hold & (1 << state.lenbits) - 1];
|
|
/*BITS(state.lenbits)*/
|
|
|
|
here_bits = here >>> 24;
|
|
here_op = here >>> 16 & 0xff;
|
|
here_val = here & 0xffff;
|
|
|
|
if (here_bits <= bits) {
|
|
break;
|
|
} //--- PULLBYTE() ---//
|
|
|
|
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8; //---//
|
|
}
|
|
|
|
if (here_val < 16) {
|
|
//--- DROPBITS(here.bits) ---//
|
|
hold >>>= here_bits;
|
|
bits -= here_bits; //---//
|
|
|
|
state.lens[state.have++] = here_val;
|
|
} else {
|
|
if (here_val === 16) {
|
|
//=== NEEDBITS(here.bits + 2);
|
|
n = here_bits + 2;
|
|
|
|
while (bits < n) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
//--- DROPBITS(here.bits) ---//
|
|
|
|
|
|
hold >>>= here_bits;
|
|
bits -= here_bits; //---//
|
|
|
|
if (state.have === 0) {
|
|
strm.msg = 'invalid bit length repeat';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
len = state.lens[state.have - 1];
|
|
copy = 3 + (hold & 0x03); //BITS(2);
|
|
//--- DROPBITS(2) ---//
|
|
|
|
hold >>>= 2;
|
|
bits -= 2; //---//
|
|
} else if (here_val === 17) {
|
|
//=== NEEDBITS(here.bits + 3);
|
|
n = here_bits + 3;
|
|
|
|
while (bits < n) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
//--- DROPBITS(here.bits) ---//
|
|
|
|
|
|
hold >>>= here_bits;
|
|
bits -= here_bits; //---//
|
|
|
|
len = 0;
|
|
copy = 3 + (hold & 0x07); //BITS(3);
|
|
//--- DROPBITS(3) ---//
|
|
|
|
hold >>>= 3;
|
|
bits -= 3; //---//
|
|
} else {
|
|
//=== NEEDBITS(here.bits + 7);
|
|
n = here_bits + 7;
|
|
|
|
while (bits < n) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
//--- DROPBITS(here.bits) ---//
|
|
|
|
|
|
hold >>>= here_bits;
|
|
bits -= here_bits; //---//
|
|
|
|
len = 0;
|
|
copy = 11 + (hold & 0x7f); //BITS(7);
|
|
//--- DROPBITS(7) ---//
|
|
|
|
hold >>>= 7;
|
|
bits -= 7; //---//
|
|
}
|
|
|
|
if (state.have + copy > state.nlen + state.ndist) {
|
|
strm.msg = 'invalid bit length repeat';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
while (copy--) {
|
|
state.lens[state.have++] = len;
|
|
}
|
|
}
|
|
}
|
|
/* handle error breaks in while */
|
|
|
|
|
|
if (state.mode === BAD) {
|
|
break;
|
|
}
|
|
/* check for end-of-block code (better have one) */
|
|
|
|
|
|
if (state.lens[256] === 0) {
|
|
strm.msg = 'invalid code -- missing end-of-block';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
/* build code tables -- note: do not change the lenbits or distbits
|
|
values here (9 and 6) without reading the comments in inftrees.h
|
|
concerning the ENOUGH constants, which depend on those values */
|
|
|
|
|
|
state.lenbits = 9;
|
|
opts = {
|
|
bits: state.lenbits
|
|
};
|
|
ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); // We have separate tables & no pointers. 2 commented lines below not needed.
|
|
// state.next_index = opts.table_index;
|
|
|
|
state.lenbits = opts.bits; // state.lencode = state.next;
|
|
|
|
if (ret) {
|
|
strm.msg = 'invalid literal/lengths set';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
state.distbits = 6; //state.distcode.copy(state.codes);
|
|
// Switch to use dynamic table
|
|
|
|
state.distcode = state.distdyn;
|
|
opts = {
|
|
bits: state.distbits
|
|
};
|
|
ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); // We have separate tables & no pointers. 2 commented lines below not needed.
|
|
// state.next_index = opts.table_index;
|
|
|
|
state.distbits = opts.bits; // state.distcode = state.next;
|
|
|
|
if (ret) {
|
|
strm.msg = 'invalid distances set';
|
|
state.mode = BAD;
|
|
break;
|
|
} //Tracev((stderr, 'inflate: codes ok\n'));
|
|
|
|
|
|
state.mode = LEN_;
|
|
|
|
if (flush === Z_TREES) {
|
|
break inf_leave;
|
|
}
|
|
|
|
/* falls through */
|
|
|
|
case LEN_:
|
|
state.mode = LEN;
|
|
|
|
/* falls through */
|
|
|
|
case LEN:
|
|
if (have >= 6 && left >= 258) {
|
|
//--- RESTORE() ---
|
|
strm.next_out = put;
|
|
strm.avail_out = left;
|
|
strm.next_in = next;
|
|
strm.avail_in = have;
|
|
state.hold = hold;
|
|
state.bits = bits; //---
|
|
|
|
inflate_fast(strm, _out); //--- LOAD() ---
|
|
|
|
put = strm.next_out;
|
|
output = strm.output;
|
|
left = strm.avail_out;
|
|
next = strm.next_in;
|
|
input = strm.input;
|
|
have = strm.avail_in;
|
|
hold = state.hold;
|
|
bits = state.bits; //---
|
|
|
|
if (state.mode === TYPE) {
|
|
state.back = -1;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
state.back = 0;
|
|
|
|
for (;;) {
|
|
here = state.lencode[hold & (1 << state.lenbits) - 1];
|
|
/*BITS(state.lenbits)*/
|
|
|
|
here_bits = here >>> 24;
|
|
here_op = here >>> 16 & 0xff;
|
|
here_val = here & 0xffff;
|
|
|
|
if (here_bits <= bits) {
|
|
break;
|
|
} //--- PULLBYTE() ---//
|
|
|
|
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8; //---//
|
|
}
|
|
|
|
if (here_op && (here_op & 0xf0) === 0) {
|
|
last_bits = here_bits;
|
|
last_op = here_op;
|
|
last_val = here_val;
|
|
|
|
for (;;) {
|
|
here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >>
|
|
/*BITS(last.bits + last.op)*/
|
|
last_bits)];
|
|
here_bits = here >>> 24;
|
|
here_op = here >>> 16 & 0xff;
|
|
here_val = here & 0xffff;
|
|
|
|
if (last_bits + here_bits <= bits) {
|
|
break;
|
|
} //--- PULLBYTE() ---//
|
|
|
|
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8; //---//
|
|
} //--- DROPBITS(last.bits) ---//
|
|
|
|
|
|
hold >>>= last_bits;
|
|
bits -= last_bits; //---//
|
|
|
|
state.back += last_bits;
|
|
} //--- DROPBITS(here.bits) ---//
|
|
|
|
|
|
hold >>>= here_bits;
|
|
bits -= here_bits; //---//
|
|
|
|
state.back += here_bits;
|
|
state.length = here_val;
|
|
|
|
if (here_op === 0) {
|
|
//Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
|
|
// "inflate: literal '%c'\n" :
|
|
// "inflate: literal 0x%02x\n", here.val));
|
|
state.mode = LIT;
|
|
break;
|
|
}
|
|
|
|
if (here_op & 32) {
|
|
//Tracevv((stderr, "inflate: end of block\n"));
|
|
state.back = -1;
|
|
state.mode = TYPE;
|
|
break;
|
|
}
|
|
|
|
if (here_op & 64) {
|
|
strm.msg = 'invalid literal/length code';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
state.extra = here_op & 15;
|
|
state.mode = LENEXT;
|
|
|
|
/* falls through */
|
|
|
|
case LENEXT:
|
|
if (state.extra) {
|
|
//=== NEEDBITS(state.extra);
|
|
n = state.extra;
|
|
|
|
while (bits < n) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
state.length += hold & (1 << state.extra) - 1
|
|
/*BITS(state.extra)*/
|
|
; //--- DROPBITS(state.extra) ---//
|
|
|
|
hold >>>= state.extra;
|
|
bits -= state.extra; //---//
|
|
|
|
state.back += state.extra;
|
|
} //Tracevv((stderr, "inflate: length %u\n", state.length));
|
|
|
|
|
|
state.was = state.length;
|
|
state.mode = DIST;
|
|
|
|
/* falls through */
|
|
|
|
case DIST:
|
|
for (;;) {
|
|
here = state.distcode[hold & (1 << state.distbits) - 1];
|
|
/*BITS(state.distbits)*/
|
|
|
|
here_bits = here >>> 24;
|
|
here_op = here >>> 16 & 0xff;
|
|
here_val = here & 0xffff;
|
|
|
|
if (here_bits <= bits) {
|
|
break;
|
|
} //--- PULLBYTE() ---//
|
|
|
|
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8; //---//
|
|
}
|
|
|
|
if ((here_op & 0xf0) === 0) {
|
|
last_bits = here_bits;
|
|
last_op = here_op;
|
|
last_val = here_val;
|
|
|
|
for (;;) {
|
|
here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >>
|
|
/*BITS(last.bits + last.op)*/
|
|
last_bits)];
|
|
here_bits = here >>> 24;
|
|
here_op = here >>> 16 & 0xff;
|
|
here_val = here & 0xffff;
|
|
|
|
if (last_bits + here_bits <= bits) {
|
|
break;
|
|
} //--- PULLBYTE() ---//
|
|
|
|
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8; //---//
|
|
} //--- DROPBITS(last.bits) ---//
|
|
|
|
|
|
hold >>>= last_bits;
|
|
bits -= last_bits; //---//
|
|
|
|
state.back += last_bits;
|
|
} //--- DROPBITS(here.bits) ---//
|
|
|
|
|
|
hold >>>= here_bits;
|
|
bits -= here_bits; //---//
|
|
|
|
state.back += here_bits;
|
|
|
|
if (here_op & 64) {
|
|
strm.msg = 'invalid distance code';
|
|
state.mode = BAD;
|
|
break;
|
|
}
|
|
|
|
state.offset = here_val;
|
|
state.extra = here_op & 15;
|
|
state.mode = DISTEXT;
|
|
|
|
/* falls through */
|
|
|
|
case DISTEXT:
|
|
if (state.extra) {
|
|
//=== NEEDBITS(state.extra);
|
|
n = state.extra;
|
|
|
|
while (bits < n) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
state.offset += hold & (1 << state.extra) - 1
|
|
/*BITS(state.extra)*/
|
|
; //--- DROPBITS(state.extra) ---//
|
|
|
|
hold >>>= state.extra;
|
|
bits -= state.extra; //---//
|
|
|
|
state.back += state.extra;
|
|
} //#ifdef INFLATE_STRICT
|
|
|
|
|
|
if (state.offset > state.dmax) {
|
|
strm.msg = 'invalid distance too far back';
|
|
state.mode = BAD;
|
|
break;
|
|
} //#endif
|
|
//Tracevv((stderr, "inflate: distance %u\n", state.offset));
|
|
|
|
|
|
state.mode = MATCH;
|
|
|
|
/* falls through */
|
|
|
|
case MATCH:
|
|
if (left === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
copy = _out - left;
|
|
|
|
if (state.offset > copy) {
|
|
/* copy from window */
|
|
copy = state.offset - copy;
|
|
|
|
if (copy > state.whave) {
|
|
if (state.sane) {
|
|
strm.msg = 'invalid distance too far back';
|
|
state.mode = BAD;
|
|
break;
|
|
} // (!) This block is disabled in zlib defaults,
|
|
// don't enable it for binary compatibility
|
|
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
|
|
// Trace((stderr, "inflate.c too far\n"));
|
|
// copy -= state.whave;
|
|
// if (copy > state.length) { copy = state.length; }
|
|
// if (copy > left) { copy = left; }
|
|
// left -= copy;
|
|
// state.length -= copy;
|
|
// do {
|
|
// output[put++] = 0;
|
|
// } while (--copy);
|
|
// if (state.length === 0) { state.mode = LEN; }
|
|
// break;
|
|
//#endif
|
|
|
|
}
|
|
|
|
if (copy > state.wnext) {
|
|
copy -= state.wnext;
|
|
from = state.wsize - copy;
|
|
} else {
|
|
from = state.wnext - copy;
|
|
}
|
|
|
|
if (copy > state.length) {
|
|
copy = state.length;
|
|
}
|
|
|
|
from_source = state.window;
|
|
} else {
|
|
/* copy from output */
|
|
from_source = output;
|
|
from = put - state.offset;
|
|
copy = state.length;
|
|
}
|
|
|
|
if (copy > left) {
|
|
copy = left;
|
|
}
|
|
|
|
left -= copy;
|
|
state.length -= copy;
|
|
|
|
do {
|
|
output[put++] = from_source[from++];
|
|
} while (--copy);
|
|
|
|
if (state.length === 0) {
|
|
state.mode = LEN;
|
|
}
|
|
|
|
break;
|
|
|
|
case LIT:
|
|
if (left === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
output[put++] = state.length;
|
|
left--;
|
|
state.mode = LEN;
|
|
break;
|
|
|
|
case CHECK:
|
|
if (state.wrap) {
|
|
//=== NEEDBITS(32);
|
|
while (bits < 32) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--; // Use '|' instead of '+' to make sure that result is signed
|
|
|
|
hold |= input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
_out -= left;
|
|
strm.total_out += _out;
|
|
state.total += _out;
|
|
|
|
if (_out) {
|
|
strm.adler = state.check =
|
|
/*UPDATE(state.check, put - _out, _out);*/
|
|
state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out);
|
|
}
|
|
|
|
_out = left; // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
|
|
|
|
if ((state.flags ? hold : zswap32(hold)) !== state.check) {
|
|
strm.msg = 'incorrect data check';
|
|
state.mode = BAD;
|
|
break;
|
|
} //=== INITBITS();
|
|
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
//Tracev((stderr, "inflate: check matches trailer\n"));
|
|
}
|
|
|
|
state.mode = LENGTH;
|
|
|
|
/* falls through */
|
|
|
|
case LENGTH:
|
|
if (state.wrap && state.flags) {
|
|
//=== NEEDBITS(32);
|
|
while (bits < 32) {
|
|
if (have === 0) {
|
|
break inf_leave;
|
|
}
|
|
|
|
have--;
|
|
hold += input[next++] << bits;
|
|
bits += 8;
|
|
} //===//
|
|
|
|
|
|
if (hold !== (state.total & 0xffffffff)) {
|
|
strm.msg = 'incorrect length check';
|
|
state.mode = BAD;
|
|
break;
|
|
} //=== INITBITS();
|
|
|
|
|
|
hold = 0;
|
|
bits = 0; //===//
|
|
//Tracev((stderr, "inflate: length matches trailer\n"));
|
|
}
|
|
|
|
state.mode = DONE;
|
|
|
|
/* falls through */
|
|
|
|
case DONE:
|
|
ret = Z_STREAM_END;
|
|
break inf_leave;
|
|
|
|
case BAD:
|
|
ret = Z_DATA_ERROR;
|
|
break inf_leave;
|
|
|
|
case MEM:
|
|
return Z_MEM_ERROR;
|
|
|
|
case SYNC:
|
|
/* falls through */
|
|
|
|
default:
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
} // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
|
|
|
|
/*
|
|
Return from inflate(), updating the total counts and the check value.
|
|
If there was no progress during the inflate() call, return a buffer
|
|
error. Call updatewindow() to create and/or update the window state.
|
|
Note: a memory error from inflate() is non-recoverable.
|
|
*/
|
|
//--- RESTORE() ---
|
|
|
|
|
|
strm.next_out = put;
|
|
strm.avail_out = left;
|
|
strm.next_in = next;
|
|
strm.avail_in = have;
|
|
state.hold = hold;
|
|
state.bits = bits; //---
|
|
|
|
if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) {
|
|
if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
|
|
state.mode = MEM;
|
|
return Z_MEM_ERROR;
|
|
}
|
|
}
|
|
|
|
_in -= strm.avail_in;
|
|
_out -= strm.avail_out;
|
|
strm.total_in += _in;
|
|
strm.total_out += _out;
|
|
state.total += _out;
|
|
|
|
if (state.wrap && _out) {
|
|
strm.adler = state.check =
|
|
/*UPDATE(state.check, strm.next_out - _out, _out);*/
|
|
state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out);
|
|
}
|
|
|
|
strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
|
|
|
|
if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) {
|
|
ret = Z_BUF_ERROR;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
function inflateEnd(strm) {
|
|
if (!strm || !strm.state
|
|
/*|| strm->zfree == (free_func)0*/
|
|
) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
var state = strm.state;
|
|
|
|
if (state.window) {
|
|
state.window = null;
|
|
}
|
|
|
|
strm.state = null;
|
|
return Z_OK;
|
|
}
|
|
|
|
function inflateGetHeader(strm, head) {
|
|
var state;
|
|
/* check state */
|
|
|
|
if (!strm || !strm.state) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
state = strm.state;
|
|
|
|
if ((state.wrap & 2) === 0) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
/* save header structure */
|
|
|
|
|
|
state.head = head;
|
|
head.done = false;
|
|
return Z_OK;
|
|
}
|
|
|
|
function inflateSetDictionary(strm, dictionary) {
|
|
var dictLength = dictionary.length;
|
|
var state;
|
|
var dictid;
|
|
var ret;
|
|
/* check state */
|
|
|
|
if (!strm
|
|
/* == Z_NULL */
|
|
|| !strm.state
|
|
/* == Z_NULL */
|
|
) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
|
|
state = strm.state;
|
|
|
|
if (state.wrap !== 0 && state.mode !== DICT) {
|
|
return Z_STREAM_ERROR;
|
|
}
|
|
/* check for correct dictionary identifier */
|
|
|
|
|
|
if (state.mode === DICT) {
|
|
dictid = 1;
|
|
/* adler32(0, null, 0)*/
|
|
|
|
/* dictid = adler32(dictid, dictionary, dictLength); */
|
|
|
|
dictid = adler32(dictid, dictionary, dictLength, 0);
|
|
|
|
if (dictid !== state.check) {
|
|
return Z_DATA_ERROR;
|
|
}
|
|
}
|
|
/* copy dictionary to window using updatewindow(), which will amend the
|
|
existing dictionary if appropriate */
|
|
|
|
|
|
ret = updatewindow(strm, dictionary, dictLength, dictLength);
|
|
|
|
if (ret) {
|
|
state.mode = MEM;
|
|
return Z_MEM_ERROR;
|
|
}
|
|
|
|
state.havedict = 1; // Tracev((stderr, "inflate: dictionary set\n"));
|
|
|
|
return Z_OK;
|
|
}
|
|
|
|
exports.inflateReset = inflateReset;
|
|
exports.inflateReset2 = inflateReset2;
|
|
exports.inflateResetKeep = inflateResetKeep;
|
|
exports.inflateInit = inflateInit;
|
|
exports.inflateInit2 = inflateInit2;
|
|
exports.inflate = inflate;
|
|
exports.inflateEnd = inflateEnd;
|
|
exports.inflateGetHeader = inflateGetHeader;
|
|
exports.inflateSetDictionary = inflateSetDictionary;
|
|
exports.inflateInfo = 'pako inflate (from Nodeca project)';
|
|
/* Not implemented
|
|
exports.inflateCopy = inflateCopy;
|
|
exports.inflateGetDictionary = inflateGetDictionary;
|
|
exports.inflateMark = inflateMark;
|
|
exports.inflatePrime = inflatePrime;
|
|
exports.inflateSync = inflateSync;
|
|
exports.inflateSyncPoint = inflateSyncPoint;
|
|
exports.inflateUndermine = inflateUndermine;
|
|
*/
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/inftrees.js":
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/inftrees.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
var utils = __webpack_require__(/*! ../utils/common */ "./node_modules/pako/lib/utils/common.js");
|
|
|
|
var MAXBITS = 15;
|
|
var ENOUGH_LENS = 852;
|
|
var ENOUGH_DISTS = 592; //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
|
|
|
|
var CODES = 0;
|
|
var LENS = 1;
|
|
var DISTS = 2;
|
|
var lbase = [
|
|
/* Length codes 257..285 base */
|
|
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0];
|
|
var lext = [
|
|
/* Length codes 257..285 extra */
|
|
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78];
|
|
var dbase = [
|
|
/* Distance codes 0..29 base */
|
|
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0];
|
|
var dext = [
|
|
/* Distance codes 0..29 extra */
|
|
16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64];
|
|
|
|
module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {
|
|
var bits = opts.bits; //here = opts.here; /* table entry for duplication */
|
|
|
|
var len = 0;
|
|
/* a code's length in bits */
|
|
|
|
var sym = 0;
|
|
/* index of code symbols */
|
|
|
|
var min = 0,
|
|
max = 0;
|
|
/* minimum and maximum code lengths */
|
|
|
|
var root = 0;
|
|
/* number of index bits for root table */
|
|
|
|
var curr = 0;
|
|
/* number of index bits for current table */
|
|
|
|
var drop = 0;
|
|
/* code bits to drop for sub-table */
|
|
|
|
var left = 0;
|
|
/* number of prefix codes available */
|
|
|
|
var used = 0;
|
|
/* code entries in table used */
|
|
|
|
var huff = 0;
|
|
/* Huffman code */
|
|
|
|
var incr;
|
|
/* for incrementing code, index */
|
|
|
|
var fill;
|
|
/* index for replicating entries */
|
|
|
|
var low;
|
|
/* low bits for current root entry */
|
|
|
|
var mask;
|
|
/* mask for low root bits */
|
|
|
|
var next;
|
|
/* next available space in table */
|
|
|
|
var base = null;
|
|
/* base value table to use */
|
|
|
|
var base_index = 0; // var shoextra; /* extra bits table to use */
|
|
|
|
var end;
|
|
/* use base and extra for symbol > end */
|
|
|
|
var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */
|
|
|
|
var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */
|
|
|
|
var extra = null;
|
|
var extra_index = 0;
|
|
var here_bits, here_op, here_val;
|
|
/*
|
|
Process a set of code lengths to create a canonical Huffman code. The
|
|
code lengths are lens[0..codes-1]. Each length corresponds to the
|
|
symbols 0..codes-1. The Huffman code is generated by first sorting the
|
|
symbols by length from short to long, and retaining the symbol order
|
|
for codes with equal lengths. Then the code starts with all zero bits
|
|
for the first code of the shortest length, and the codes are integer
|
|
increments for the same length, and zeros are appended as the length
|
|
increases. For the deflate format, these bits are stored backwards
|
|
from their more natural integer increment ordering, and so when the
|
|
decoding tables are built in the large loop below, the integer codes
|
|
are incremented backwards.
|
|
This routine assumes, but does not check, that all of the entries in
|
|
lens[] are in the range 0..MAXBITS. The caller must assure this.
|
|
1..MAXBITS is interpreted as that code length. zero means that that
|
|
symbol does not occur in this code.
|
|
The codes are sorted by computing a count of codes for each length,
|
|
creating from that a table of starting indices for each length in the
|
|
sorted table, and then entering the symbols in order in the sorted
|
|
table. The sorted table is work[], with that space being provided by
|
|
the caller.
|
|
The length counts are used for other purposes as well, i.e. finding
|
|
the minimum and maximum length codes, determining if there are any
|
|
codes at all, checking for a valid set of lengths, and looking ahead
|
|
at length counts to determine sub-table sizes when building the
|
|
decoding tables.
|
|
*/
|
|
|
|
/* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
|
|
|
|
for (len = 0; len <= MAXBITS; len++) {
|
|
count[len] = 0;
|
|
}
|
|
|
|
for (sym = 0; sym < codes; sym++) {
|
|
count[lens[lens_index + sym]]++;
|
|
}
|
|
/* bound code lengths, force root to be within code lengths */
|
|
|
|
|
|
root = bits;
|
|
|
|
for (max = MAXBITS; max >= 1; max--) {
|
|
if (count[max] !== 0) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (root > max) {
|
|
root = max;
|
|
}
|
|
|
|
if (max === 0) {
|
|
/* no symbols to code at all */
|
|
//table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */
|
|
//table.bits[opts.table_index] = 1; //here.bits = (var char)1;
|
|
//table.val[opts.table_index++] = 0; //here.val = (var short)0;
|
|
table[table_index++] = 1 << 24 | 64 << 16 | 0; //table.op[opts.table_index] = 64;
|
|
//table.bits[opts.table_index] = 1;
|
|
//table.val[opts.table_index++] = 0;
|
|
|
|
table[table_index++] = 1 << 24 | 64 << 16 | 0;
|
|
opts.bits = 1;
|
|
return 0;
|
|
/* no symbols, but wait for decoding to report error */
|
|
}
|
|
|
|
for (min = 1; min < max; min++) {
|
|
if (count[min] !== 0) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (root < min) {
|
|
root = min;
|
|
}
|
|
/* check for an over-subscribed or incomplete set of lengths */
|
|
|
|
|
|
left = 1;
|
|
|
|
for (len = 1; len <= MAXBITS; len++) {
|
|
left <<= 1;
|
|
left -= count[len];
|
|
|
|
if (left < 0) {
|
|
return -1;
|
|
}
|
|
/* over-subscribed */
|
|
|
|
}
|
|
|
|
if (left > 0 && (type === CODES || max !== 1)) {
|
|
return -1;
|
|
/* incomplete set */
|
|
}
|
|
/* generate offsets into symbol table for each length for sorting */
|
|
|
|
|
|
offs[1] = 0;
|
|
|
|
for (len = 1; len < MAXBITS; len++) {
|
|
offs[len + 1] = offs[len] + count[len];
|
|
}
|
|
/* sort symbols by length, by symbol order within each length */
|
|
|
|
|
|
for (sym = 0; sym < codes; sym++) {
|
|
if (lens[lens_index + sym] !== 0) {
|
|
work[offs[lens[lens_index + sym]]++] = sym;
|
|
}
|
|
}
|
|
/*
|
|
Create and fill in decoding tables. In this loop, the table being
|
|
filled is at next and has curr index bits. The code being used is huff
|
|
with length len. That code is converted to an index by dropping drop
|
|
bits off of the bottom. For codes where len is less than drop + curr,
|
|
those top drop + curr - len bits are incremented through all values to
|
|
fill the table with replicated entries.
|
|
root is the number of index bits for the root table. When len exceeds
|
|
root, sub-tables are created pointed to by the root entry with an index
|
|
of the low root bits of huff. This is saved in low to check for when a
|
|
new sub-table should be started. drop is zero when the root table is
|
|
being filled, and drop is root when sub-tables are being filled.
|
|
When a new sub-table is needed, it is necessary to look ahead in the
|
|
code lengths to determine what size sub-table is needed. The length
|
|
counts are used for this, and so count[] is decremented as codes are
|
|
entered in the tables.
|
|
used keeps track of how many table entries have been allocated from the
|
|
provided *table space. It is checked for LENS and DIST tables against
|
|
the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
|
|
the initial root table size constants. See the comments in inftrees.h
|
|
for more information.
|
|
sym increments through all symbols, and the loop terminates when
|
|
all codes of length max, i.e. all codes, have been processed. This
|
|
routine permits incomplete codes, so another loop after this one fills
|
|
in the rest of the decoding tables with invalid code markers.
|
|
*/
|
|
|
|
/* set up for code type */
|
|
// poor man optimization - use if-else instead of switch,
|
|
// to avoid deopts in old v8
|
|
|
|
|
|
if (type === CODES) {
|
|
base = extra = work;
|
|
/* dummy value--not used */
|
|
|
|
end = 19;
|
|
} else if (type === LENS) {
|
|
base = lbase;
|
|
base_index -= 257;
|
|
extra = lext;
|
|
extra_index -= 257;
|
|
end = 256;
|
|
} else {
|
|
/* DISTS */
|
|
base = dbase;
|
|
extra = dext;
|
|
end = -1;
|
|
}
|
|
/* initialize opts for loop */
|
|
|
|
|
|
huff = 0;
|
|
/* starting code */
|
|
|
|
sym = 0;
|
|
/* starting code symbol */
|
|
|
|
len = min;
|
|
/* starting code length */
|
|
|
|
next = table_index;
|
|
/* current table to fill in */
|
|
|
|
curr = root;
|
|
/* current table index bits */
|
|
|
|
drop = 0;
|
|
/* current bits to drop from code for index */
|
|
|
|
low = -1;
|
|
/* trigger new sub-table when len > root */
|
|
|
|
used = 1 << root;
|
|
/* use root table entries */
|
|
|
|
mask = used - 1;
|
|
/* mask for comparing low */
|
|
|
|
/* check available table space */
|
|
|
|
if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
|
|
return 1;
|
|
}
|
|
/* process all codes and make table entries */
|
|
|
|
|
|
for (;;) {
|
|
/* create table entry */
|
|
here_bits = len - drop;
|
|
|
|
if (work[sym] < end) {
|
|
here_op = 0;
|
|
here_val = work[sym];
|
|
} else if (work[sym] > end) {
|
|
here_op = extra[extra_index + work[sym]];
|
|
here_val = base[base_index + work[sym]];
|
|
} else {
|
|
here_op = 32 + 64;
|
|
/* end of block */
|
|
|
|
here_val = 0;
|
|
}
|
|
/* replicate for those indices with low len bits equal to huff */
|
|
|
|
|
|
incr = 1 << len - drop;
|
|
fill = 1 << curr;
|
|
min = fill;
|
|
/* save offset to next table */
|
|
|
|
do {
|
|
fill -= incr;
|
|
table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;
|
|
} while (fill !== 0);
|
|
/* backwards increment the len-bit code huff */
|
|
|
|
|
|
incr = 1 << len - 1;
|
|
|
|
while (huff & incr) {
|
|
incr >>= 1;
|
|
}
|
|
|
|
if (incr !== 0) {
|
|
huff &= incr - 1;
|
|
huff += incr;
|
|
} else {
|
|
huff = 0;
|
|
}
|
|
/* go to next symbol, update count, len */
|
|
|
|
|
|
sym++;
|
|
|
|
if (--count[len] === 0) {
|
|
if (len === max) {
|
|
break;
|
|
}
|
|
|
|
len = lens[lens_index + work[sym]];
|
|
}
|
|
/* create new sub-table if needed */
|
|
|
|
|
|
if (len > root && (huff & mask) !== low) {
|
|
/* if first time, transition to sub-tables */
|
|
if (drop === 0) {
|
|
drop = root;
|
|
}
|
|
/* increment past last table */
|
|
|
|
|
|
next += min;
|
|
/* here min is 1 << curr */
|
|
|
|
/* determine length of next table */
|
|
|
|
curr = len - drop;
|
|
left = 1 << curr;
|
|
|
|
while (curr + drop < max) {
|
|
left -= count[curr + drop];
|
|
|
|
if (left <= 0) {
|
|
break;
|
|
}
|
|
|
|
curr++;
|
|
left <<= 1;
|
|
}
|
|
/* check for enough space */
|
|
|
|
|
|
used += 1 << curr;
|
|
|
|
if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
|
|
return 1;
|
|
}
|
|
/* point entry in root table to sub-table */
|
|
|
|
|
|
low = huff & mask;
|
|
/*table.op[low] = curr;
|
|
table.bits[low] = root;
|
|
table.val[low] = next - opts.table_index;*/
|
|
|
|
table[low] = root << 24 | curr << 16 | next - table_index | 0;
|
|
}
|
|
}
|
|
/* fill in remaining table entry if code is incomplete (guaranteed to have
|
|
at most one remaining entry, since if the code is incomplete, the
|
|
maximum code length that was allowed to get this far is one bit) */
|
|
|
|
|
|
if (huff !== 0) {
|
|
//table.op[next + huff] = 64; /* invalid code marker */
|
|
//table.bits[next + huff] = len - drop;
|
|
//table.val[next + huff] = 0;
|
|
table[next + huff] = len - drop << 24 | 64 << 16 | 0;
|
|
}
|
|
/* set return parameters */
|
|
//opts.table_index += used;
|
|
|
|
|
|
opts.bits = root;
|
|
return 0;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/messages.js":
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/messages.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
module.exports = {
|
|
2: 'need dictionary',
|
|
|
|
/* Z_NEED_DICT 2 */
|
|
1: 'stream end',
|
|
|
|
/* Z_STREAM_END 1 */
|
|
0: '',
|
|
|
|
/* Z_OK 0 */
|
|
'-1': 'file error',
|
|
|
|
/* Z_ERRNO (-1) */
|
|
'-2': 'stream error',
|
|
|
|
/* Z_STREAM_ERROR (-2) */
|
|
'-3': 'data error',
|
|
|
|
/* Z_DATA_ERROR (-3) */
|
|
'-4': 'insufficient memory',
|
|
|
|
/* Z_MEM_ERROR (-4) */
|
|
'-5': 'buffer error',
|
|
|
|
/* Z_BUF_ERROR (-5) */
|
|
'-6': 'incompatible version'
|
|
/* Z_VERSION_ERROR (-6) */
|
|
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/trees.js":
|
|
/*!*********************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/trees.js ***!
|
|
\*********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
/* eslint-disable space-unary-ops */
|
|
|
|
var utils = __webpack_require__(/*! ../utils/common */ "./node_modules/pako/lib/utils/common.js");
|
|
/* Public constants ==========================================================*/
|
|
|
|
/* ===========================================================================*/
|
|
//var Z_FILTERED = 1;
|
|
//var Z_HUFFMAN_ONLY = 2;
|
|
//var Z_RLE = 3;
|
|
|
|
|
|
var Z_FIXED = 4; //var Z_DEFAULT_STRATEGY = 0;
|
|
|
|
/* Possible values of the data_type field (though see inflate()) */
|
|
|
|
var Z_BINARY = 0;
|
|
var Z_TEXT = 1; //var Z_ASCII = 1; // = Z_TEXT
|
|
|
|
var Z_UNKNOWN = 2;
|
|
/*============================================================================*/
|
|
|
|
function zero(buf) {
|
|
var len = buf.length;
|
|
|
|
while (--len >= 0) {
|
|
buf[len] = 0;
|
|
}
|
|
} // From zutil.h
|
|
|
|
|
|
var STORED_BLOCK = 0;
|
|
var STATIC_TREES = 1;
|
|
var DYN_TREES = 2;
|
|
/* The three kinds of block type */
|
|
|
|
var MIN_MATCH = 3;
|
|
var MAX_MATCH = 258;
|
|
/* The minimum and maximum match lengths */
|
|
// From deflate.h
|
|
|
|
/* ===========================================================================
|
|
* Internal compression state.
|
|
*/
|
|
|
|
var LENGTH_CODES = 29;
|
|
/* number of length codes, not counting the special END_BLOCK code */
|
|
|
|
var LITERALS = 256;
|
|
/* number of literal bytes 0..255 */
|
|
|
|
var L_CODES = LITERALS + 1 + LENGTH_CODES;
|
|
/* number of Literal or Length codes, including the END_BLOCK code */
|
|
|
|
var D_CODES = 30;
|
|
/* number of distance codes */
|
|
|
|
var BL_CODES = 19;
|
|
/* number of codes used to transfer the bit lengths */
|
|
|
|
var HEAP_SIZE = 2 * L_CODES + 1;
|
|
/* maximum heap size */
|
|
|
|
var MAX_BITS = 15;
|
|
/* All codes must not exceed MAX_BITS bits */
|
|
|
|
var Buf_size = 16;
|
|
/* size of bit buffer in bi_buf */
|
|
|
|
/* ===========================================================================
|
|
* Constants
|
|
*/
|
|
|
|
var MAX_BL_BITS = 7;
|
|
/* Bit length codes must not exceed MAX_BL_BITS bits */
|
|
|
|
var END_BLOCK = 256;
|
|
/* end of block literal code */
|
|
|
|
var REP_3_6 = 16;
|
|
/* repeat previous bit length 3-6 times (2 bits of repeat count) */
|
|
|
|
var REPZ_3_10 = 17;
|
|
/* repeat a zero length 3-10 times (3 bits of repeat count) */
|
|
|
|
var REPZ_11_138 = 18;
|
|
/* repeat a zero length 11-138 times (7 bits of repeat count) */
|
|
|
|
/* eslint-disable comma-spacing,array-bracket-spacing */
|
|
|
|
var extra_lbits =
|
|
/* extra bits for each length code */
|
|
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0];
|
|
var extra_dbits =
|
|
/* extra bits for each distance code */
|
|
[0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];
|
|
var extra_blbits =
|
|
/* extra bits for each bit length code */
|
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];
|
|
var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
|
|
/* eslint-enable comma-spacing,array-bracket-spacing */
|
|
|
|
/* The lengths of the bit length codes are sent in order of decreasing
|
|
* probability, to avoid transmitting the lengths for unused bit length codes.
|
|
*/
|
|
|
|
/* ===========================================================================
|
|
* Local data. These are initialized only once.
|
|
*/
|
|
// We pre-fill arrays with 0 to avoid uninitialized gaps
|
|
|
|
var DIST_CODE_LEN = 512;
|
|
/* see definition of array dist_code below */
|
|
// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
|
|
|
|
var static_ltree = new Array((L_CODES + 2) * 2);
|
|
zero(static_ltree);
|
|
/* The static literal tree. Since the bit lengths are imposed, there is no
|
|
* need for the L_CODES extra codes used during heap construction. However
|
|
* The codes 286 and 287 are needed to build a canonical tree (see _tr_init
|
|
* below).
|
|
*/
|
|
|
|
var static_dtree = new Array(D_CODES * 2);
|
|
zero(static_dtree);
|
|
/* The static distance tree. (Actually a trivial tree since all codes use
|
|
* 5 bits.)
|
|
*/
|
|
|
|
var _dist_code = new Array(DIST_CODE_LEN);
|
|
|
|
zero(_dist_code);
|
|
/* Distance codes. The first 256 values correspond to the distances
|
|
* 3 .. 258, the last 256 values correspond to the top 8 bits of
|
|
* the 15 bit distances.
|
|
*/
|
|
|
|
var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
|
|
|
|
zero(_length_code);
|
|
/* length code for each normalized match length (0 == MIN_MATCH) */
|
|
|
|
var base_length = new Array(LENGTH_CODES);
|
|
zero(base_length);
|
|
/* First normalized length for each code (0 = MIN_MATCH) */
|
|
|
|
var base_dist = new Array(D_CODES);
|
|
zero(base_dist);
|
|
/* First normalized distance for each code (0 = distance of 1) */
|
|
|
|
function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
|
|
this.static_tree = static_tree;
|
|
/* static tree or NULL */
|
|
|
|
this.extra_bits = extra_bits;
|
|
/* extra bits for each code or NULL */
|
|
|
|
this.extra_base = extra_base;
|
|
/* base index for extra_bits */
|
|
|
|
this.elems = elems;
|
|
/* max number of elements in the tree */
|
|
|
|
this.max_length = max_length;
|
|
/* max bit length for the codes */
|
|
// show if `static_tree` has data or dummy - needed for monomorphic objects
|
|
|
|
this.has_stree = static_tree && static_tree.length;
|
|
}
|
|
|
|
var static_l_desc;
|
|
var static_d_desc;
|
|
var static_bl_desc;
|
|
|
|
function TreeDesc(dyn_tree, stat_desc) {
|
|
this.dyn_tree = dyn_tree;
|
|
/* the dynamic tree */
|
|
|
|
this.max_code = 0;
|
|
/* largest code with non zero frequency */
|
|
|
|
this.stat_desc = stat_desc;
|
|
/* the corresponding static tree */
|
|
}
|
|
|
|
function d_code(dist) {
|
|
return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
|
|
}
|
|
/* ===========================================================================
|
|
* Output a short LSB first on the stream.
|
|
* IN assertion: there is enough room in pendingBuf.
|
|
*/
|
|
|
|
|
|
function put_short(s, w) {
|
|
// put_byte(s, (uch)((w) & 0xff));
|
|
// put_byte(s, (uch)((ush)(w) >> 8));
|
|
s.pending_buf[s.pending++] = w & 0xff;
|
|
s.pending_buf[s.pending++] = w >>> 8 & 0xff;
|
|
}
|
|
/* ===========================================================================
|
|
* Send a value on a given number of bits.
|
|
* IN assertion: length <= 16 and value fits in length bits.
|
|
*/
|
|
|
|
|
|
function send_bits(s, value, length) {
|
|
if (s.bi_valid > Buf_size - length) {
|
|
s.bi_buf |= value << s.bi_valid & 0xffff;
|
|
put_short(s, s.bi_buf);
|
|
s.bi_buf = value >> Buf_size - s.bi_valid;
|
|
s.bi_valid += length - Buf_size;
|
|
} else {
|
|
s.bi_buf |= value << s.bi_valid & 0xffff;
|
|
s.bi_valid += length;
|
|
}
|
|
}
|
|
|
|
function send_code(s, c, tree) {
|
|
send_bits(s, tree[c * 2]
|
|
/*.Code*/
|
|
, tree[c * 2 + 1]
|
|
/*.Len*/
|
|
);
|
|
}
|
|
/* ===========================================================================
|
|
* Reverse the first len bits of a code, using straightforward code (a faster
|
|
* method would use a table)
|
|
* IN assertion: 1 <= len <= 15
|
|
*/
|
|
|
|
|
|
function bi_reverse(code, len) {
|
|
var res = 0;
|
|
|
|
do {
|
|
res |= code & 1;
|
|
code >>>= 1;
|
|
res <<= 1;
|
|
} while (--len > 0);
|
|
|
|
return res >>> 1;
|
|
}
|
|
/* ===========================================================================
|
|
* Flush the bit buffer, keeping at most 7 bits in it.
|
|
*/
|
|
|
|
|
|
function bi_flush(s) {
|
|
if (s.bi_valid === 16) {
|
|
put_short(s, s.bi_buf);
|
|
s.bi_buf = 0;
|
|
s.bi_valid = 0;
|
|
} else if (s.bi_valid >= 8) {
|
|
s.pending_buf[s.pending++] = s.bi_buf & 0xff;
|
|
s.bi_buf >>= 8;
|
|
s.bi_valid -= 8;
|
|
}
|
|
}
|
|
/* ===========================================================================
|
|
* Compute the optimal bit lengths for a tree and update the total bit length
|
|
* for the current block.
|
|
* IN assertion: the fields freq and dad are set, heap[heap_max] and
|
|
* above are the tree nodes sorted by increasing frequency.
|
|
* OUT assertions: the field len is set to the optimal bit length, the
|
|
* array bl_count contains the frequencies for each bit length.
|
|
* The length opt_len is updated; static_len is also updated if stree is
|
|
* not null.
|
|
*/
|
|
|
|
|
|
function gen_bitlen(s, desc) // deflate_state *s;
|
|
// tree_desc *desc; /* the tree descriptor */
|
|
{
|
|
var tree = desc.dyn_tree;
|
|
var max_code = desc.max_code;
|
|
var stree = desc.stat_desc.static_tree;
|
|
var has_stree = desc.stat_desc.has_stree;
|
|
var extra = desc.stat_desc.extra_bits;
|
|
var base = desc.stat_desc.extra_base;
|
|
var max_length = desc.stat_desc.max_length;
|
|
var h;
|
|
/* heap index */
|
|
|
|
var n, m;
|
|
/* iterate over the tree elements */
|
|
|
|
var bits;
|
|
/* bit length */
|
|
|
|
var xbits;
|
|
/* extra bits */
|
|
|
|
var f;
|
|
/* frequency */
|
|
|
|
var overflow = 0;
|
|
/* number of elements with bit length too large */
|
|
|
|
for (bits = 0; bits <= MAX_BITS; bits++) {
|
|
s.bl_count[bits] = 0;
|
|
}
|
|
/* In a first pass, compute the optimal bit lengths (which may
|
|
* overflow in the case of the bit length tree).
|
|
*/
|
|
|
|
|
|
tree[s.heap[s.heap_max] * 2 + 1]
|
|
/*.Len*/
|
|
= 0;
|
|
/* root of the heap */
|
|
|
|
for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
|
|
n = s.heap[h];
|
|
bits = tree[tree[n * 2 + 1]
|
|
/*.Dad*/
|
|
* 2 + 1]
|
|
/*.Len*/
|
|
+ 1;
|
|
|
|
if (bits > max_length) {
|
|
bits = max_length;
|
|
overflow++;
|
|
}
|
|
|
|
tree[n * 2 + 1]
|
|
/*.Len*/
|
|
= bits;
|
|
/* We overwrite tree[n].Dad which is no longer needed */
|
|
|
|
if (n > max_code) {
|
|
continue;
|
|
}
|
|
/* not a leaf node */
|
|
|
|
|
|
s.bl_count[bits]++;
|
|
xbits = 0;
|
|
|
|
if (n >= base) {
|
|
xbits = extra[n - base];
|
|
}
|
|
|
|
f = tree[n * 2]
|
|
/*.Freq*/
|
|
;
|
|
s.opt_len += f * (bits + xbits);
|
|
|
|
if (has_stree) {
|
|
s.static_len += f * (stree[n * 2 + 1]
|
|
/*.Len*/
|
|
+ xbits);
|
|
}
|
|
}
|
|
|
|
if (overflow === 0) {
|
|
return;
|
|
} // Trace((stderr,"\nbit length overflow\n"));
|
|
|
|
/* This happens for example on obj2 and pic of the Calgary corpus */
|
|
|
|
/* Find the first bit length which could increase: */
|
|
|
|
|
|
do {
|
|
bits = max_length - 1;
|
|
|
|
while (s.bl_count[bits] === 0) {
|
|
bits--;
|
|
}
|
|
|
|
s.bl_count[bits]--;
|
|
/* move one leaf down the tree */
|
|
|
|
s.bl_count[bits + 1] += 2;
|
|
/* move one overflow item as its brother */
|
|
|
|
s.bl_count[max_length]--;
|
|
/* The brother of the overflow item also moves one step up,
|
|
* but this does not affect bl_count[max_length]
|
|
*/
|
|
|
|
overflow -= 2;
|
|
} while (overflow > 0);
|
|
/* Now recompute all bit lengths, scanning in increasing frequency.
|
|
* h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
|
|
* lengths instead of fixing only the wrong ones. This idea is taken
|
|
* from 'ar' written by Haruhiko Okumura.)
|
|
*/
|
|
|
|
|
|
for (bits = max_length; bits !== 0; bits--) {
|
|
n = s.bl_count[bits];
|
|
|
|
while (n !== 0) {
|
|
m = s.heap[--h];
|
|
|
|
if (m > max_code) {
|
|
continue;
|
|
}
|
|
|
|
if (tree[m * 2 + 1]
|
|
/*.Len*/
|
|
!== bits) {
|
|
// Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
|
|
s.opt_len += (bits - tree[m * 2 + 1]
|
|
/*.Len*/
|
|
) * tree[m * 2]
|
|
/*.Freq*/
|
|
;
|
|
tree[m * 2 + 1]
|
|
/*.Len*/
|
|
= bits;
|
|
}
|
|
|
|
n--;
|
|
}
|
|
}
|
|
}
|
|
/* ===========================================================================
|
|
* Generate the codes for a given tree and bit counts (which need not be
|
|
* optimal).
|
|
* IN assertion: the array bl_count contains the bit length statistics for
|
|
* the given tree and the field len is set for all tree elements.
|
|
* OUT assertion: the field code is set for all tree elements of non
|
|
* zero code length.
|
|
*/
|
|
|
|
|
|
function gen_codes(tree, max_code, bl_count) // ct_data *tree; /* the tree to decorate */
|
|
// int max_code; /* largest code with non zero frequency */
|
|
// ushf *bl_count; /* number of codes at each bit length */
|
|
{
|
|
var next_code = new Array(MAX_BITS + 1);
|
|
/* next code value for each bit length */
|
|
|
|
var code = 0;
|
|
/* running code value */
|
|
|
|
var bits;
|
|
/* bit index */
|
|
|
|
var n;
|
|
/* code index */
|
|
|
|
/* The distribution counts are first used to generate the code values
|
|
* without bit reversal.
|
|
*/
|
|
|
|
for (bits = 1; bits <= MAX_BITS; bits++) {
|
|
next_code[bits] = code = code + bl_count[bits - 1] << 1;
|
|
}
|
|
/* Check that the bit counts in bl_count are consistent. The last code
|
|
* must be all ones.
|
|
*/
|
|
//Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
|
|
// "inconsistent bit counts");
|
|
//Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
|
|
|
|
|
|
for (n = 0; n <= max_code; n++) {
|
|
var len = tree[n * 2 + 1]
|
|
/*.Len*/
|
|
;
|
|
|
|
if (len === 0) {
|
|
continue;
|
|
}
|
|
/* Now reverse the bits */
|
|
|
|
|
|
tree[n * 2]
|
|
/*.Code*/
|
|
= bi_reverse(next_code[len]++, len); //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
|
|
// n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
|
|
}
|
|
}
|
|
/* ===========================================================================
|
|
* Initialize the various 'constant' tables.
|
|
*/
|
|
|
|
|
|
function tr_static_init() {
|
|
var n;
|
|
/* iterates over tree elements */
|
|
|
|
var bits;
|
|
/* bit counter */
|
|
|
|
var length;
|
|
/* length value */
|
|
|
|
var code;
|
|
/* code value */
|
|
|
|
var dist;
|
|
/* distance index */
|
|
|
|
var bl_count = new Array(MAX_BITS + 1);
|
|
/* number of codes at each bit length for an optimal tree */
|
|
// do check in _tr_init()
|
|
//if (static_init_done) return;
|
|
|
|
/* For some embedded targets, global variables are not initialized: */
|
|
|
|
/*#ifdef NO_INIT_GLOBAL_POINTERS
|
|
static_l_desc.static_tree = static_ltree;
|
|
static_l_desc.extra_bits = extra_lbits;
|
|
static_d_desc.static_tree = static_dtree;
|
|
static_d_desc.extra_bits = extra_dbits;
|
|
static_bl_desc.extra_bits = extra_blbits;
|
|
#endif*/
|
|
|
|
/* Initialize the mapping length (0..255) -> length code (0..28) */
|
|
|
|
length = 0;
|
|
|
|
for (code = 0; code < LENGTH_CODES - 1; code++) {
|
|
base_length[code] = length;
|
|
|
|
for (n = 0; n < 1 << extra_lbits[code]; n++) {
|
|
_length_code[length++] = code;
|
|
}
|
|
} //Assert (length == 256, "tr_static_init: length != 256");
|
|
|
|
/* Note that the length 255 (match length 258) can be represented
|
|
* in two different ways: code 284 + 5 bits or code 285, so we
|
|
* overwrite length_code[255] to use the best encoding:
|
|
*/
|
|
|
|
|
|
_length_code[length - 1] = code;
|
|
/* Initialize the mapping dist (0..32K) -> dist code (0..29) */
|
|
|
|
dist = 0;
|
|
|
|
for (code = 0; code < 16; code++) {
|
|
base_dist[code] = dist;
|
|
|
|
for (n = 0; n < 1 << extra_dbits[code]; n++) {
|
|
_dist_code[dist++] = code;
|
|
}
|
|
} //Assert (dist == 256, "tr_static_init: dist != 256");
|
|
|
|
|
|
dist >>= 7;
|
|
/* from now on, all distances are divided by 128 */
|
|
|
|
for (; code < D_CODES; code++) {
|
|
base_dist[code] = dist << 7;
|
|
|
|
for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {
|
|
_dist_code[256 + dist++] = code;
|
|
}
|
|
} //Assert (dist == 256, "tr_static_init: 256+dist != 512");
|
|
|
|
/* Construct the codes of the static literal tree */
|
|
|
|
|
|
for (bits = 0; bits <= MAX_BITS; bits++) {
|
|
bl_count[bits] = 0;
|
|
}
|
|
|
|
n = 0;
|
|
|
|
while (n <= 143) {
|
|
static_ltree[n * 2 + 1]
|
|
/*.Len*/
|
|
= 8;
|
|
n++;
|
|
bl_count[8]++;
|
|
}
|
|
|
|
while (n <= 255) {
|
|
static_ltree[n * 2 + 1]
|
|
/*.Len*/
|
|
= 9;
|
|
n++;
|
|
bl_count[9]++;
|
|
}
|
|
|
|
while (n <= 279) {
|
|
static_ltree[n * 2 + 1]
|
|
/*.Len*/
|
|
= 7;
|
|
n++;
|
|
bl_count[7]++;
|
|
}
|
|
|
|
while (n <= 287) {
|
|
static_ltree[n * 2 + 1]
|
|
/*.Len*/
|
|
= 8;
|
|
n++;
|
|
bl_count[8]++;
|
|
}
|
|
/* Codes 286 and 287 do not exist, but we must include them in the
|
|
* tree construction to get a canonical Huffman tree (longest code
|
|
* all ones)
|
|
*/
|
|
|
|
|
|
gen_codes(static_ltree, L_CODES + 1, bl_count);
|
|
/* The static distance tree is trivial: */
|
|
|
|
for (n = 0; n < D_CODES; n++) {
|
|
static_dtree[n * 2 + 1]
|
|
/*.Len*/
|
|
= 5;
|
|
static_dtree[n * 2]
|
|
/*.Code*/
|
|
= bi_reverse(n, 5);
|
|
} // Now data ready and we can init static trees
|
|
|
|
|
|
static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
|
|
static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);
|
|
static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); //static_init_done = true;
|
|
}
|
|
/* ===========================================================================
|
|
* Initialize a new block.
|
|
*/
|
|
|
|
|
|
function init_block(s) {
|
|
var n;
|
|
/* iterates over tree elements */
|
|
|
|
/* Initialize the trees. */
|
|
|
|
for (n = 0; n < L_CODES; n++) {
|
|
s.dyn_ltree[n * 2]
|
|
/*.Freq*/
|
|
= 0;
|
|
}
|
|
|
|
for (n = 0; n < D_CODES; n++) {
|
|
s.dyn_dtree[n * 2]
|
|
/*.Freq*/
|
|
= 0;
|
|
}
|
|
|
|
for (n = 0; n < BL_CODES; n++) {
|
|
s.bl_tree[n * 2]
|
|
/*.Freq*/
|
|
= 0;
|
|
}
|
|
|
|
s.dyn_ltree[END_BLOCK * 2]
|
|
/*.Freq*/
|
|
= 1;
|
|
s.opt_len = s.static_len = 0;
|
|
s.last_lit = s.matches = 0;
|
|
}
|
|
/* ===========================================================================
|
|
* Flush the bit buffer and align the output on a byte boundary
|
|
*/
|
|
|
|
|
|
function bi_windup(s) {
|
|
if (s.bi_valid > 8) {
|
|
put_short(s, s.bi_buf);
|
|
} else if (s.bi_valid > 0) {
|
|
//put_byte(s, (Byte)s->bi_buf);
|
|
s.pending_buf[s.pending++] = s.bi_buf;
|
|
}
|
|
|
|
s.bi_buf = 0;
|
|
s.bi_valid = 0;
|
|
}
|
|
/* ===========================================================================
|
|
* Copy a stored block, storing first the length and its
|
|
* one's complement if requested.
|
|
*/
|
|
|
|
|
|
function copy_block(s, buf, len, header) //DeflateState *s;
|
|
//charf *buf; /* the input data */
|
|
//unsigned len; /* its length */
|
|
//int header; /* true if block header must be written */
|
|
{
|
|
bi_windup(s);
|
|
/* align on byte boundary */
|
|
|
|
if (header) {
|
|
put_short(s, len);
|
|
put_short(s, ~len);
|
|
} // while (len--) {
|
|
// put_byte(s, *buf++);
|
|
// }
|
|
|
|
|
|
utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
|
|
s.pending += len;
|
|
}
|
|
/* ===========================================================================
|
|
* Compares to subtrees, using the tree depth as tie breaker when
|
|
* the subtrees have equal frequency. This minimizes the worst case length.
|
|
*/
|
|
|
|
|
|
function smaller(tree, n, m, depth) {
|
|
var _n2 = n * 2;
|
|
|
|
var _m2 = m * 2;
|
|
|
|
return tree[_n2]
|
|
/*.Freq*/
|
|
< tree[_m2]
|
|
/*.Freq*/
|
|
|| tree[_n2]
|
|
/*.Freq*/
|
|
=== tree[_m2]
|
|
/*.Freq*/
|
|
&& depth[n] <= depth[m];
|
|
}
|
|
/* ===========================================================================
|
|
* Restore the heap property by moving down the tree starting at node k,
|
|
* exchanging a node with the smallest of its two sons if necessary, stopping
|
|
* when the heap property is re-established (each father smaller than its
|
|
* two sons).
|
|
*/
|
|
|
|
|
|
function pqdownheap(s, tree, k) // deflate_state *s;
|
|
// ct_data *tree; /* the tree to restore */
|
|
// int k; /* node to move down */
|
|
{
|
|
var v = s.heap[k];
|
|
var j = k << 1;
|
|
/* left son of k */
|
|
|
|
while (j <= s.heap_len) {
|
|
/* Set j to the smallest of the two sons: */
|
|
if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
|
|
j++;
|
|
}
|
|
/* Exit if v is smaller than both sons */
|
|
|
|
|
|
if (smaller(tree, v, s.heap[j], s.depth)) {
|
|
break;
|
|
}
|
|
/* Exchange v with the smallest son */
|
|
|
|
|
|
s.heap[k] = s.heap[j];
|
|
k = j;
|
|
/* And continue down the tree, setting j to the left son of k */
|
|
|
|
j <<= 1;
|
|
}
|
|
|
|
s.heap[k] = v;
|
|
} // inlined manually
|
|
// var SMALLEST = 1;
|
|
|
|
/* ===========================================================================
|
|
* Send the block data compressed using the given Huffman trees
|
|
*/
|
|
|
|
|
|
function compress_block(s, ltree, dtree) // deflate_state *s;
|
|
// const ct_data *ltree; /* literal tree */
|
|
// const ct_data *dtree; /* distance tree */
|
|
{
|
|
var dist;
|
|
/* distance of matched string */
|
|
|
|
var lc;
|
|
/* match length or unmatched char (if dist == 0) */
|
|
|
|
var lx = 0;
|
|
/* running index in l_buf */
|
|
|
|
var code;
|
|
/* the code to send */
|
|
|
|
var extra;
|
|
/* number of extra bits to send */
|
|
|
|
if (s.last_lit !== 0) {
|
|
do {
|
|
dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1];
|
|
lc = s.pending_buf[s.l_buf + lx];
|
|
lx++;
|
|
|
|
if (dist === 0) {
|
|
send_code(s, lc, ltree);
|
|
/* send a literal byte */
|
|
//Tracecv(isgraph(lc), (stderr," '%c' ", lc));
|
|
} else {
|
|
/* Here, lc is the match length - MIN_MATCH */
|
|
code = _length_code[lc];
|
|
send_code(s, code + LITERALS + 1, ltree);
|
|
/* send the length code */
|
|
|
|
extra = extra_lbits[code];
|
|
|
|
if (extra !== 0) {
|
|
lc -= base_length[code];
|
|
send_bits(s, lc, extra);
|
|
/* send the extra length bits */
|
|
}
|
|
|
|
dist--;
|
|
/* dist is now the match distance - 1 */
|
|
|
|
code = d_code(dist); //Assert (code < D_CODES, "bad d_code");
|
|
|
|
send_code(s, code, dtree);
|
|
/* send the distance code */
|
|
|
|
extra = extra_dbits[code];
|
|
|
|
if (extra !== 0) {
|
|
dist -= base_dist[code];
|
|
send_bits(s, dist, extra);
|
|
/* send the extra distance bits */
|
|
}
|
|
}
|
|
/* literal or match pair ? */
|
|
|
|
/* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
|
|
//Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
|
|
// "pendingBuf overflow");
|
|
|
|
} while (lx < s.last_lit);
|
|
}
|
|
|
|
send_code(s, END_BLOCK, ltree);
|
|
}
|
|
/* ===========================================================================
|
|
* Construct one Huffman tree and assigns the code bit strings and lengths.
|
|
* Update the total bit length for the current block.
|
|
* IN assertion: the field freq is set for all tree elements.
|
|
* OUT assertions: the fields len and code are set to the optimal bit length
|
|
* and corresponding code. The length opt_len is updated; static_len is
|
|
* also updated if stree is not null. The field max_code is set.
|
|
*/
|
|
|
|
|
|
function build_tree(s, desc) // deflate_state *s;
|
|
// tree_desc *desc; /* the tree descriptor */
|
|
{
|
|
var tree = desc.dyn_tree;
|
|
var stree = desc.stat_desc.static_tree;
|
|
var has_stree = desc.stat_desc.has_stree;
|
|
var elems = desc.stat_desc.elems;
|
|
var n, m;
|
|
/* iterate over heap elements */
|
|
|
|
var max_code = -1;
|
|
/* largest code with non zero frequency */
|
|
|
|
var node;
|
|
/* new node being created */
|
|
|
|
/* Construct the initial heap, with least frequent element in
|
|
* heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
|
|
* heap[0] is not used.
|
|
*/
|
|
|
|
s.heap_len = 0;
|
|
s.heap_max = HEAP_SIZE;
|
|
|
|
for (n = 0; n < elems; n++) {
|
|
if (tree[n * 2]
|
|
/*.Freq*/
|
|
!== 0) {
|
|
s.heap[++s.heap_len] = max_code = n;
|
|
s.depth[n] = 0;
|
|
} else {
|
|
tree[n * 2 + 1]
|
|
/*.Len*/
|
|
= 0;
|
|
}
|
|
}
|
|
/* The pkzip format requires that at least one distance code exists,
|
|
* and that at least one bit should be sent even if there is only one
|
|
* possible code. So to avoid special checks later on we force at least
|
|
* two codes of non zero frequency.
|
|
*/
|
|
|
|
|
|
while (s.heap_len < 2) {
|
|
node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;
|
|
tree[node * 2]
|
|
/*.Freq*/
|
|
= 1;
|
|
s.depth[node] = 0;
|
|
s.opt_len--;
|
|
|
|
if (has_stree) {
|
|
s.static_len -= stree[node * 2 + 1]
|
|
/*.Len*/
|
|
;
|
|
}
|
|
/* node is 0 or 1 so it does not have extra bits */
|
|
|
|
}
|
|
|
|
desc.max_code = max_code;
|
|
/* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
|
|
* establish sub-heaps of increasing lengths:
|
|
*/
|
|
|
|
for (n = s.heap_len >> 1
|
|
/*int /2*/
|
|
; n >= 1; n--) {
|
|
pqdownheap(s, tree, n);
|
|
}
|
|
/* Construct the Huffman tree by repeatedly combining the least two
|
|
* frequent nodes.
|
|
*/
|
|
|
|
|
|
node = elems;
|
|
/* next internal node of the tree */
|
|
|
|
do {
|
|
//pqremove(s, tree, n); /* n = node of least frequency */
|
|
|
|
/*** pqremove ***/
|
|
n = s.heap[1
|
|
/*SMALLEST*/
|
|
];
|
|
s.heap[1
|
|
/*SMALLEST*/
|
|
] = s.heap[s.heap_len--];
|
|
pqdownheap(s, tree, 1
|
|
/*SMALLEST*/
|
|
);
|
|
/***/
|
|
|
|
m = s.heap[1
|
|
/*SMALLEST*/
|
|
];
|
|
/* m = node of next least frequency */
|
|
|
|
s.heap[--s.heap_max] = n;
|
|
/* keep the nodes sorted by frequency */
|
|
|
|
s.heap[--s.heap_max] = m;
|
|
/* Create a new node father of n and m */
|
|
|
|
tree[node * 2]
|
|
/*.Freq*/
|
|
= tree[n * 2]
|
|
/*.Freq*/
|
|
+ tree[m * 2]
|
|
/*.Freq*/
|
|
;
|
|
s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
|
|
tree[n * 2 + 1]
|
|
/*.Dad*/
|
|
= tree[m * 2 + 1]
|
|
/*.Dad*/
|
|
= node;
|
|
/* and insert the new node in the heap */
|
|
|
|
s.heap[1
|
|
/*SMALLEST*/
|
|
] = node++;
|
|
pqdownheap(s, tree, 1
|
|
/*SMALLEST*/
|
|
);
|
|
} while (s.heap_len >= 2);
|
|
|
|
s.heap[--s.heap_max] = s.heap[1
|
|
/*SMALLEST*/
|
|
];
|
|
/* At this point, the fields freq and dad are set. We can now
|
|
* generate the bit lengths.
|
|
*/
|
|
|
|
gen_bitlen(s, desc);
|
|
/* The field len is now set, we can generate the bit codes */
|
|
|
|
gen_codes(tree, max_code, s.bl_count);
|
|
}
|
|
/* ===========================================================================
|
|
* Scan a literal or distance tree to determine the frequencies of the codes
|
|
* in the bit length tree.
|
|
*/
|
|
|
|
|
|
function scan_tree(s, tree, max_code) // deflate_state *s;
|
|
// ct_data *tree; /* the tree to be scanned */
|
|
// int max_code; /* and its largest code of non zero frequency */
|
|
{
|
|
var n;
|
|
/* iterates over all tree elements */
|
|
|
|
var prevlen = -1;
|
|
/* last emitted length */
|
|
|
|
var curlen;
|
|
/* length of current code */
|
|
|
|
var nextlen = tree[0 * 2 + 1]
|
|
/*.Len*/
|
|
;
|
|
/* length of next code */
|
|
|
|
var count = 0;
|
|
/* repeat count of the current code */
|
|
|
|
var max_count = 7;
|
|
/* max repeat count */
|
|
|
|
var min_count = 4;
|
|
/* min repeat count */
|
|
|
|
if (nextlen === 0) {
|
|
max_count = 138;
|
|
min_count = 3;
|
|
}
|
|
|
|
tree[(max_code + 1) * 2 + 1]
|
|
/*.Len*/
|
|
= 0xffff;
|
|
/* guard */
|
|
|
|
for (n = 0; n <= max_code; n++) {
|
|
curlen = nextlen;
|
|
nextlen = tree[(n + 1) * 2 + 1]
|
|
/*.Len*/
|
|
;
|
|
|
|
if (++count < max_count && curlen === nextlen) {
|
|
continue;
|
|
} else if (count < min_count) {
|
|
s.bl_tree[curlen * 2]
|
|
/*.Freq*/
|
|
+= count;
|
|
} else if (curlen !== 0) {
|
|
if (curlen !== prevlen) {
|
|
s.bl_tree[curlen * 2] /*.Freq*/++;
|
|
}
|
|
|
|
s.bl_tree[REP_3_6 * 2] /*.Freq*/++;
|
|
} else if (count <= 10) {
|
|
s.bl_tree[REPZ_3_10 * 2] /*.Freq*/++;
|
|
} else {
|
|
s.bl_tree[REPZ_11_138 * 2] /*.Freq*/++;
|
|
}
|
|
|
|
count = 0;
|
|
prevlen = curlen;
|
|
|
|
if (nextlen === 0) {
|
|
max_count = 138;
|
|
min_count = 3;
|
|
} else if (curlen === nextlen) {
|
|
max_count = 6;
|
|
min_count = 3;
|
|
} else {
|
|
max_count = 7;
|
|
min_count = 4;
|
|
}
|
|
}
|
|
}
|
|
/* ===========================================================================
|
|
* Send a literal or distance tree in compressed form, using the codes in
|
|
* bl_tree.
|
|
*/
|
|
|
|
|
|
function send_tree(s, tree, max_code) // deflate_state *s;
|
|
// ct_data *tree; /* the tree to be scanned */
|
|
// int max_code; /* and its largest code of non zero frequency */
|
|
{
|
|
var n;
|
|
/* iterates over all tree elements */
|
|
|
|
var prevlen = -1;
|
|
/* last emitted length */
|
|
|
|
var curlen;
|
|
/* length of current code */
|
|
|
|
var nextlen = tree[0 * 2 + 1]
|
|
/*.Len*/
|
|
;
|
|
/* length of next code */
|
|
|
|
var count = 0;
|
|
/* repeat count of the current code */
|
|
|
|
var max_count = 7;
|
|
/* max repeat count */
|
|
|
|
var min_count = 4;
|
|
/* min repeat count */
|
|
|
|
/* tree[max_code+1].Len = -1; */
|
|
|
|
/* guard already set */
|
|
|
|
if (nextlen === 0) {
|
|
max_count = 138;
|
|
min_count = 3;
|
|
}
|
|
|
|
for (n = 0; n <= max_code; n++) {
|
|
curlen = nextlen;
|
|
nextlen = tree[(n + 1) * 2 + 1]
|
|
/*.Len*/
|
|
;
|
|
|
|
if (++count < max_count && curlen === nextlen) {
|
|
continue;
|
|
} else if (count < min_count) {
|
|
do {
|
|
send_code(s, curlen, s.bl_tree);
|
|
} while (--count !== 0);
|
|
} else if (curlen !== 0) {
|
|
if (curlen !== prevlen) {
|
|
send_code(s, curlen, s.bl_tree);
|
|
count--;
|
|
} //Assert(count >= 3 && count <= 6, " 3_6?");
|
|
|
|
|
|
send_code(s, REP_3_6, s.bl_tree);
|
|
send_bits(s, count - 3, 2);
|
|
} else if (count <= 10) {
|
|
send_code(s, REPZ_3_10, s.bl_tree);
|
|
send_bits(s, count - 3, 3);
|
|
} else {
|
|
send_code(s, REPZ_11_138, s.bl_tree);
|
|
send_bits(s, count - 11, 7);
|
|
}
|
|
|
|
count = 0;
|
|
prevlen = curlen;
|
|
|
|
if (nextlen === 0) {
|
|
max_count = 138;
|
|
min_count = 3;
|
|
} else if (curlen === nextlen) {
|
|
max_count = 6;
|
|
min_count = 3;
|
|
} else {
|
|
max_count = 7;
|
|
min_count = 4;
|
|
}
|
|
}
|
|
}
|
|
/* ===========================================================================
|
|
* Construct the Huffman tree for the bit lengths and return the index in
|
|
* bl_order of the last bit length code to send.
|
|
*/
|
|
|
|
|
|
function build_bl_tree(s) {
|
|
var max_blindex;
|
|
/* index of last bit length code of non zero freq */
|
|
|
|
/* Determine the bit length frequencies for literal and distance trees */
|
|
|
|
scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
|
|
scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
|
|
/* Build the bit length tree: */
|
|
|
|
build_tree(s, s.bl_desc);
|
|
/* opt_len now includes the length of the tree representations, except
|
|
* the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
|
|
*/
|
|
|
|
/* Determine the number of bit length codes to send. The pkzip format
|
|
* requires that at least 4 bit length codes be sent. (appnote.txt says
|
|
* 3 but the actual value used is 4.)
|
|
*/
|
|
|
|
for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
|
|
if (s.bl_tree[bl_order[max_blindex] * 2 + 1]
|
|
/*.Len*/
|
|
!== 0) {
|
|
break;
|
|
}
|
|
}
|
|
/* Update opt_len to include the bit length tree and counts */
|
|
|
|
|
|
s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
|
|
// s->opt_len, s->static_len));
|
|
|
|
return max_blindex;
|
|
}
|
|
/* ===========================================================================
|
|
* Send the header for a block using dynamic Huffman trees: the counts, the
|
|
* lengths of the bit length codes, the literal tree and the distance tree.
|
|
* IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
|
|
*/
|
|
|
|
|
|
function send_all_trees(s, lcodes, dcodes, blcodes) // deflate_state *s;
|
|
// int lcodes, dcodes, blcodes; /* number of codes for each tree */
|
|
{
|
|
var rank;
|
|
/* index in bl_order */
|
|
//Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
|
|
//Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
|
|
// "too many codes");
|
|
//Tracev((stderr, "\nbl counts: "));
|
|
|
|
send_bits(s, lcodes - 257, 5);
|
|
/* not +255 as stated in appnote.txt */
|
|
|
|
send_bits(s, dcodes - 1, 5);
|
|
send_bits(s, blcodes - 4, 4);
|
|
/* not -3 as stated in appnote.txt */
|
|
|
|
for (rank = 0; rank < blcodes; rank++) {
|
|
//Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
|
|
send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]
|
|
/*.Len*/
|
|
, 3);
|
|
} //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
|
|
|
|
|
|
send_tree(s, s.dyn_ltree, lcodes - 1);
|
|
/* literal tree */
|
|
//Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
|
|
|
|
send_tree(s, s.dyn_dtree, dcodes - 1);
|
|
/* distance tree */
|
|
//Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
|
|
}
|
|
/* ===========================================================================
|
|
* Check if the data type is TEXT or BINARY, using the following algorithm:
|
|
* - TEXT if the two conditions below are satisfied:
|
|
* a) There are no non-portable control characters belonging to the
|
|
* "black list" (0..6, 14..25, 28..31).
|
|
* b) There is at least one printable character belonging to the
|
|
* "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
|
|
* - BINARY otherwise.
|
|
* - The following partially-portable control characters form a
|
|
* "gray list" that is ignored in this detection algorithm:
|
|
* (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
|
|
* IN assertion: the fields Freq of dyn_ltree are set.
|
|
*/
|
|
|
|
|
|
function detect_data_type(s) {
|
|
/* black_mask is the bit mask of black-listed bytes
|
|
* set bits 0..6, 14..25, and 28..31
|
|
* 0xf3ffc07f = binary 11110011111111111100000001111111
|
|
*/
|
|
var black_mask = 0xf3ffc07f;
|
|
var n;
|
|
/* Check for non-textual ("black-listed") bytes. */
|
|
|
|
for (n = 0; n <= 31; n++, black_mask >>>= 1) {
|
|
if (black_mask & 1 && s.dyn_ltree[n * 2]
|
|
/*.Freq*/
|
|
!== 0) {
|
|
return Z_BINARY;
|
|
}
|
|
}
|
|
/* Check for textual ("white-listed") bytes. */
|
|
|
|
|
|
if (s.dyn_ltree[9 * 2]
|
|
/*.Freq*/
|
|
!== 0 || s.dyn_ltree[10 * 2]
|
|
/*.Freq*/
|
|
!== 0 || s.dyn_ltree[13 * 2]
|
|
/*.Freq*/
|
|
!== 0) {
|
|
return Z_TEXT;
|
|
}
|
|
|
|
for (n = 32; n < LITERALS; n++) {
|
|
if (s.dyn_ltree[n * 2]
|
|
/*.Freq*/
|
|
!== 0) {
|
|
return Z_TEXT;
|
|
}
|
|
}
|
|
/* There are no "black-listed" or "white-listed" bytes:
|
|
* this stream either is empty or has tolerated ("gray-listed") bytes only.
|
|
*/
|
|
|
|
|
|
return Z_BINARY;
|
|
}
|
|
|
|
var static_init_done = false;
|
|
/* ===========================================================================
|
|
* Initialize the tree data structures for a new zlib stream.
|
|
*/
|
|
|
|
function _tr_init(s) {
|
|
if (!static_init_done) {
|
|
tr_static_init();
|
|
static_init_done = true;
|
|
}
|
|
|
|
s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
|
|
s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
|
|
s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
|
|
s.bi_buf = 0;
|
|
s.bi_valid = 0;
|
|
/* Initialize the first block of the first file: */
|
|
|
|
init_block(s);
|
|
}
|
|
/* ===========================================================================
|
|
* Send a stored block
|
|
*/
|
|
|
|
|
|
function _tr_stored_block(s, buf, stored_len, last) //DeflateState *s;
|
|
//charf *buf; /* input block */
|
|
//ulg stored_len; /* length of input block */
|
|
//int last; /* one if this is the last block for a file */
|
|
{
|
|
send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);
|
|
/* send block type */
|
|
|
|
copy_block(s, buf, stored_len, true);
|
|
/* with header */
|
|
}
|
|
/* ===========================================================================
|
|
* Send one empty static block to give enough lookahead for inflate.
|
|
* This takes 10 bits, of which 7 may remain in the bit buffer.
|
|
*/
|
|
|
|
|
|
function _tr_align(s) {
|
|
send_bits(s, STATIC_TREES << 1, 3);
|
|
send_code(s, END_BLOCK, static_ltree);
|
|
bi_flush(s);
|
|
}
|
|
/* ===========================================================================
|
|
* Determine the best encoding for the current block: dynamic trees, static
|
|
* trees or store, and output the encoded block to the zip file.
|
|
*/
|
|
|
|
|
|
function _tr_flush_block(s, buf, stored_len, last) //DeflateState *s;
|
|
//charf *buf; /* input block, or NULL if too old */
|
|
//ulg stored_len; /* length of input block */
|
|
//int last; /* one if this is the last block for a file */
|
|
{
|
|
var opt_lenb, static_lenb;
|
|
/* opt_len and static_len in bytes */
|
|
|
|
var max_blindex = 0;
|
|
/* index of last bit length code of non zero freq */
|
|
|
|
/* Build the Huffman trees unless a stored block is forced */
|
|
|
|
if (s.level > 0) {
|
|
/* Check if the file is binary or text */
|
|
if (s.strm.data_type === Z_UNKNOWN) {
|
|
s.strm.data_type = detect_data_type(s);
|
|
}
|
|
/* Construct the literal and distance trees */
|
|
|
|
|
|
build_tree(s, s.l_desc); // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
|
|
// s->static_len));
|
|
|
|
build_tree(s, s.d_desc); // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
|
|
// s->static_len));
|
|
|
|
/* At this point, opt_len and static_len are the total bit lengths of
|
|
* the compressed block data, excluding the tree representations.
|
|
*/
|
|
|
|
/* Build the bit length tree for the above two trees, and get the index
|
|
* in bl_order of the last bit length code to send.
|
|
*/
|
|
|
|
max_blindex = build_bl_tree(s);
|
|
/* Determine the best encoding. Compute the block lengths in bytes. */
|
|
|
|
opt_lenb = s.opt_len + 3 + 7 >>> 3;
|
|
static_lenb = s.static_len + 3 + 7 >>> 3; // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
|
|
// opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
|
|
// s->last_lit));
|
|
|
|
if (static_lenb <= opt_lenb) {
|
|
opt_lenb = static_lenb;
|
|
}
|
|
} else {
|
|
// Assert(buf != (char*)0, "lost buf");
|
|
opt_lenb = static_lenb = stored_len + 5;
|
|
/* force a stored block */
|
|
}
|
|
|
|
if (stored_len + 4 <= opt_lenb && buf !== -1) {
|
|
/* 4: two words for the lengths */
|
|
|
|
/* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
|
|
* Otherwise we can't have processed more than WSIZE input bytes since
|
|
* the last block flush, because compression would have been
|
|
* successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
|
|
* transform a block into a stored block.
|
|
*/
|
|
_tr_stored_block(s, buf, stored_len, last);
|
|
} else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
|
|
send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
|
|
compress_block(s, static_ltree, static_dtree);
|
|
} else {
|
|
send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
|
|
send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
|
|
compress_block(s, s.dyn_ltree, s.dyn_dtree);
|
|
} // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
|
|
|
|
/* The above check is made mod 2^32, for files larger than 512 MB
|
|
* and uLong implemented on 32 bits.
|
|
*/
|
|
|
|
|
|
init_block(s);
|
|
|
|
if (last) {
|
|
bi_windup(s);
|
|
} // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
|
|
// s->compressed_len-7*last));
|
|
|
|
}
|
|
/* ===========================================================================
|
|
* Save the match info and tally the frequency counts. Return true if
|
|
* the current block must be flushed.
|
|
*/
|
|
|
|
|
|
function _tr_tally(s, dist, lc) // deflate_state *s;
|
|
// unsigned dist; /* distance of matched string */
|
|
// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
|
|
{
|
|
//var out_length, in_length, dcode;
|
|
s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 0xff;
|
|
s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
|
|
s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
|
|
s.last_lit++;
|
|
|
|
if (dist === 0) {
|
|
/* lc is the unmatched char */
|
|
s.dyn_ltree[lc * 2] /*.Freq*/++;
|
|
} else {
|
|
s.matches++;
|
|
/* Here, lc is the match length - MIN_MATCH */
|
|
|
|
dist--;
|
|
/* dist = match distance - 1 */
|
|
//Assert((ush)dist < (ush)MAX_DIST(s) &&
|
|
// (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
|
|
// (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
|
|
|
|
s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2] /*.Freq*/++;
|
|
s.dyn_dtree[d_code(dist) * 2] /*.Freq*/++;
|
|
} // (!) This block is disabled in zlib defaults,
|
|
// don't enable it for binary compatibility
|
|
//#ifdef TRUNCATE_BLOCK
|
|
// /* Try to guess if it is profitable to stop the current block here */
|
|
// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
|
|
// /* Compute an upper bound for the compressed length */
|
|
// out_length = s.last_lit*8;
|
|
// in_length = s.strstart - s.block_start;
|
|
//
|
|
// for (dcode = 0; dcode < D_CODES; dcode++) {
|
|
// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
|
|
// }
|
|
// out_length >>>= 3;
|
|
// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
|
|
// // s->last_lit, in_length, out_length,
|
|
// // 100L - out_length*100L/in_length));
|
|
// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
|
|
// return true;
|
|
// }
|
|
// }
|
|
//#endif
|
|
|
|
|
|
return s.last_lit === s.lit_bufsize - 1;
|
|
/* We avoid equality with lit_bufsize because of wraparound at 64K
|
|
* on 16 bit machines and because stored blocks are restricted to
|
|
* 64K-1 bytes.
|
|
*/
|
|
}
|
|
|
|
exports._tr_init = _tr_init;
|
|
exports._tr_stored_block = _tr_stored_block;
|
|
exports._tr_flush_block = _tr_flush_block;
|
|
exports._tr_tally = _tr_tally;
|
|
exports._tr_align = _tr_align;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/pako/lib/zlib/zstream.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/pako/lib/zlib/zstream.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
|
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would be
|
|
// appreciated but is not required.
|
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
|
// misrepresented as being the original software.
|
|
// 3. This notice may not be removed or altered from any source distribution.
|
|
|
|
function ZStream() {
|
|
/* next input byte */
|
|
this.input = null; // JS specific, because we have no pointers
|
|
|
|
this.next_in = 0;
|
|
/* number of bytes available at input */
|
|
|
|
this.avail_in = 0;
|
|
/* total number of input bytes read so far */
|
|
|
|
this.total_in = 0;
|
|
/* next output byte should be put there */
|
|
|
|
this.output = null; // JS specific, because we have no pointers
|
|
|
|
this.next_out = 0;
|
|
/* remaining free space at output */
|
|
|
|
this.avail_out = 0;
|
|
/* total number of bytes output so far */
|
|
|
|
this.total_out = 0;
|
|
/* last error message, NULL if no error */
|
|
|
|
this.msg = ''
|
|
/*Z_NULL*/
|
|
;
|
|
/* not visible by applications */
|
|
|
|
this.state = null;
|
|
/* best guess about the data type: binary or text */
|
|
|
|
this.data_type = 2
|
|
/*Z_UNKNOWN*/
|
|
;
|
|
/* adler32 value of the uncompressed data */
|
|
|
|
this.adler = 0;
|
|
}
|
|
|
|
module.exports = ZStream;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/process-nextick-args/index.js":
|
|
/*!****************************************************!*\
|
|
!*** ./node_modules/process-nextick-args/index.js ***!
|
|
\****************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* WEBPACK VAR INJECTION */(function(process) {
|
|
|
|
if (!process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
|
|
module.exports = {
|
|
nextTick: nextTick
|
|
};
|
|
} else {
|
|
module.exports = process;
|
|
}
|
|
|
|
function nextTick(fn, arg1, arg2, arg3) {
|
|
if (typeof fn !== 'function') {
|
|
throw new TypeError('"callback" argument must be a function');
|
|
}
|
|
|
|
var len = arguments.length;
|
|
var args, i;
|
|
|
|
switch (len) {
|
|
case 0:
|
|
case 1:
|
|
return process.nextTick(fn);
|
|
|
|
case 2:
|
|
return process.nextTick(function afterTickOne() {
|
|
fn.call(null, arg1);
|
|
});
|
|
|
|
case 3:
|
|
return process.nextTick(function afterTickTwo() {
|
|
fn.call(null, arg1, arg2);
|
|
});
|
|
|
|
case 4:
|
|
return process.nextTick(function afterTickThree() {
|
|
fn.call(null, arg1, arg2, arg3);
|
|
});
|
|
|
|
default:
|
|
args = new Array(len - 1);
|
|
i = 0;
|
|
|
|
while (i < args.length) {
|
|
args[i++] = arguments[i];
|
|
}
|
|
|
|
return process.nextTick(function afterTick() {
|
|
fn.apply(null, args);
|
|
});
|
|
}
|
|
}
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js")))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/process/browser.js":
|
|
/*!*****************************************!*\
|
|
!*** ./node_modules/process/browser.js ***!
|
|
\*****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
// shim for using process in browser
|
|
var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it
|
|
// don't break things. But we need to wrap it in a try catch in case it is
|
|
// wrapped in strict mode code which doesn't define any globals. It's inside a
|
|
// function because try/catches deoptimize in certain engines.
|
|
|
|
var cachedSetTimeout;
|
|
var cachedClearTimeout;
|
|
|
|
function defaultSetTimout() {
|
|
throw new Error('setTimeout has not been defined');
|
|
}
|
|
|
|
function defaultClearTimeout() {
|
|
throw new Error('clearTimeout has not been defined');
|
|
}
|
|
|
|
(function () {
|
|
try {
|
|
if (typeof setTimeout === 'function') {
|
|
cachedSetTimeout = setTimeout;
|
|
} else {
|
|
cachedSetTimeout = defaultSetTimout;
|
|
}
|
|
} catch (e) {
|
|
cachedSetTimeout = defaultSetTimout;
|
|
}
|
|
|
|
try {
|
|
if (typeof clearTimeout === 'function') {
|
|
cachedClearTimeout = clearTimeout;
|
|
} else {
|
|
cachedClearTimeout = defaultClearTimeout;
|
|
}
|
|
} catch (e) {
|
|
cachedClearTimeout = defaultClearTimeout;
|
|
}
|
|
})();
|
|
|
|
function runTimeout(fun) {
|
|
if (cachedSetTimeout === setTimeout) {
|
|
//normal enviroments in sane situations
|
|
return setTimeout(fun, 0);
|
|
} // if setTimeout wasn't available but was latter defined
|
|
|
|
|
|
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
|
|
cachedSetTimeout = setTimeout;
|
|
return setTimeout(fun, 0);
|
|
}
|
|
|
|
try {
|
|
// when when somebody has screwed with setTimeout but no I.E. maddness
|
|
return cachedSetTimeout(fun, 0);
|
|
} catch (e) {
|
|
try {
|
|
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
|
return cachedSetTimeout.call(null, fun, 0);
|
|
} catch (e) {
|
|
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
|
|
return cachedSetTimeout.call(this, fun, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
function runClearTimeout(marker) {
|
|
if (cachedClearTimeout === clearTimeout) {
|
|
//normal enviroments in sane situations
|
|
return clearTimeout(marker);
|
|
} // if clearTimeout wasn't available but was latter defined
|
|
|
|
|
|
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
|
|
cachedClearTimeout = clearTimeout;
|
|
return clearTimeout(marker);
|
|
}
|
|
|
|
try {
|
|
// when when somebody has screwed with setTimeout but no I.E. maddness
|
|
return cachedClearTimeout(marker);
|
|
} catch (e) {
|
|
try {
|
|
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
|
return cachedClearTimeout.call(null, marker);
|
|
} catch (e) {
|
|
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
|
|
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
|
|
return cachedClearTimeout.call(this, marker);
|
|
}
|
|
}
|
|
}
|
|
|
|
var queue = [];
|
|
var draining = false;
|
|
var currentQueue;
|
|
var queueIndex = -1;
|
|
|
|
function cleanUpNextTick() {
|
|
if (!draining || !currentQueue) {
|
|
return;
|
|
}
|
|
|
|
draining = false;
|
|
|
|
if (currentQueue.length) {
|
|
queue = currentQueue.concat(queue);
|
|
} else {
|
|
queueIndex = -1;
|
|
}
|
|
|
|
if (queue.length) {
|
|
drainQueue();
|
|
}
|
|
}
|
|
|
|
function drainQueue() {
|
|
if (draining) {
|
|
return;
|
|
}
|
|
|
|
var timeout = runTimeout(cleanUpNextTick);
|
|
draining = true;
|
|
var len = queue.length;
|
|
|
|
while (len) {
|
|
currentQueue = queue;
|
|
queue = [];
|
|
|
|
while (++queueIndex < len) {
|
|
if (currentQueue) {
|
|
currentQueue[queueIndex].run();
|
|
}
|
|
}
|
|
|
|
queueIndex = -1;
|
|
len = queue.length;
|
|
}
|
|
|
|
currentQueue = null;
|
|
draining = false;
|
|
runClearTimeout(timeout);
|
|
}
|
|
|
|
process.nextTick = function (fun) {
|
|
var args = new Array(arguments.length - 1);
|
|
|
|
if (arguments.length > 1) {
|
|
for (var i = 1; i < arguments.length; i++) {
|
|
args[i - 1] = arguments[i];
|
|
}
|
|
}
|
|
|
|
queue.push(new Item(fun, args));
|
|
|
|
if (queue.length === 1 && !draining) {
|
|
runTimeout(drainQueue);
|
|
}
|
|
}; // v8 likes predictible objects
|
|
|
|
|
|
function Item(fun, array) {
|
|
this.fun = fun;
|
|
this.array = array;
|
|
}
|
|
|
|
Item.prototype.run = function () {
|
|
this.fun.apply(null, this.array);
|
|
};
|
|
|
|
process.title = 'browser';
|
|
process.browser = true;
|
|
process.env = {};
|
|
process.argv = [];
|
|
process.version = ''; // empty string to avoid regexp issues
|
|
|
|
process.versions = {};
|
|
|
|
function noop() {}
|
|
|
|
process.on = noop;
|
|
process.addListener = noop;
|
|
process.once = noop;
|
|
process.off = noop;
|
|
process.removeListener = noop;
|
|
process.removeAllListeners = noop;
|
|
process.emit = noop;
|
|
process.prependListener = noop;
|
|
process.prependOnceListener = noop;
|
|
|
|
process.listeners = function (name) {
|
|
return [];
|
|
};
|
|
|
|
process.binding = function (name) {
|
|
throw new Error('process.binding is not supported');
|
|
};
|
|
|
|
process.cwd = function () {
|
|
return '/';
|
|
};
|
|
|
|
process.chdir = function (dir) {
|
|
throw new Error('process.chdir is not supported');
|
|
};
|
|
|
|
process.umask = function () {
|
|
return 0;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/duplex-browser.js":
|
|
/*!********************************************************!*\
|
|
!*** ./node_modules/readable-stream/duplex-browser.js ***!
|
|
\********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(/*! ./lib/_stream_duplex.js */ "./node_modules/readable-stream/lib/_stream_duplex.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/lib/_stream_duplex.js":
|
|
/*!************************************************************!*\
|
|
!*** ./node_modules/readable-stream/lib/_stream_duplex.js ***!
|
|
\************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
// a duplex stream is just a stream that is both readable and writable.
|
|
// Since JS doesn't have multiple prototypal inheritance, this class
|
|
// prototypally inherits from Readable, and then parasitically from
|
|
// Writable.
|
|
|
|
/*<replacement>*/
|
|
|
|
var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js");
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
|
|
var objectKeys = Object.keys || function (obj) {
|
|
var keys = [];
|
|
|
|
for (var key in obj) {
|
|
keys.push(key);
|
|
}
|
|
|
|
return keys;
|
|
};
|
|
/*</replacement>*/
|
|
|
|
|
|
module.exports = Duplex;
|
|
/*<replacement>*/
|
|
|
|
var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js");
|
|
|
|
util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js");
|
|
/*</replacement>*/
|
|
|
|
var Readable = __webpack_require__(/*! ./_stream_readable */ "./node_modules/readable-stream/lib/_stream_readable.js");
|
|
|
|
var Writable = __webpack_require__(/*! ./_stream_writable */ "./node_modules/readable-stream/lib/_stream_writable.js");
|
|
|
|
util.inherits(Duplex, Readable);
|
|
{
|
|
// avoid scope creep, the keys array can then be collected
|
|
var keys = objectKeys(Writable.prototype);
|
|
|
|
for (var v = 0; v < keys.length; v++) {
|
|
var method = keys[v];
|
|
if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
|
|
}
|
|
}
|
|
|
|
function Duplex(options) {
|
|
if (!(this instanceof Duplex)) return new Duplex(options);
|
|
Readable.call(this, options);
|
|
Writable.call(this, options);
|
|
if (options && options.readable === false) this.readable = false;
|
|
if (options && options.writable === false) this.writable = false;
|
|
this.allowHalfOpen = true;
|
|
if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
|
|
this.once('end', onend);
|
|
}
|
|
|
|
Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
|
|
// making it explicit this property is not enumerable
|
|
// because otherwise some prototype manipulation in
|
|
// userland will fail
|
|
enumerable: false,
|
|
get: function () {
|
|
return this._writableState.highWaterMark;
|
|
}
|
|
}); // the no-half-open enforcer
|
|
|
|
function onend() {
|
|
// if we allow half-open state, or if the writable side ended,
|
|
// then we're ok.
|
|
if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written.
|
|
// But allow more writes to happen in this tick.
|
|
|
|
pna.nextTick(onEndNT, this);
|
|
}
|
|
|
|
function onEndNT(self) {
|
|
self.end();
|
|
}
|
|
|
|
Object.defineProperty(Duplex.prototype, 'destroyed', {
|
|
get: function () {
|
|
if (this._readableState === undefined || this._writableState === undefined) {
|
|
return false;
|
|
}
|
|
|
|
return this._readableState.destroyed && this._writableState.destroyed;
|
|
},
|
|
set: function (value) {
|
|
// we ignore the value if the stream
|
|
// has not been initialized yet
|
|
if (this._readableState === undefined || this._writableState === undefined) {
|
|
return;
|
|
} // backward compatibility, the user is explicitly
|
|
// managing destroyed
|
|
|
|
|
|
this._readableState.destroyed = value;
|
|
this._writableState.destroyed = value;
|
|
}
|
|
});
|
|
|
|
Duplex.prototype._destroy = function (err, cb) {
|
|
this.push(null);
|
|
this.end();
|
|
pna.nextTick(cb, err);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/lib/_stream_passthrough.js":
|
|
/*!*****************************************************************!*\
|
|
!*** ./node_modules/readable-stream/lib/_stream_passthrough.js ***!
|
|
\*****************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
// a passthrough stream.
|
|
// basically just the most minimal sort of Transform stream.
|
|
// Every written chunk gets output as-is.
|
|
|
|
|
|
module.exports = PassThrough;
|
|
|
|
var Transform = __webpack_require__(/*! ./_stream_transform */ "./node_modules/readable-stream/lib/_stream_transform.js");
|
|
/*<replacement>*/
|
|
|
|
|
|
var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js");
|
|
|
|
util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js");
|
|
/*</replacement>*/
|
|
|
|
util.inherits(PassThrough, Transform);
|
|
|
|
function PassThrough(options) {
|
|
if (!(this instanceof PassThrough)) return new PassThrough(options);
|
|
Transform.call(this, options);
|
|
}
|
|
|
|
PassThrough.prototype._transform = function (chunk, encoding, cb) {
|
|
cb(null, chunk);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/lib/_stream_readable.js":
|
|
/*!**************************************************************!*\
|
|
!*** ./node_modules/readable-stream/lib/_stream_readable.js ***!
|
|
\**************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
/*<replacement>*/
|
|
|
|
var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js");
|
|
/*</replacement>*/
|
|
|
|
|
|
module.exports = Readable;
|
|
/*<replacement>*/
|
|
|
|
var isArray = __webpack_require__(/*! isarray */ "./node_modules/isarray/index.js");
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
|
|
var Duplex;
|
|
/*</replacement>*/
|
|
|
|
Readable.ReadableState = ReadableState;
|
|
/*<replacement>*/
|
|
|
|
var EE = __webpack_require__(/*! events */ "./node_modules/events/events.js").EventEmitter;
|
|
|
|
var EElistenerCount = function (emitter, type) {
|
|
return emitter.listeners(type).length;
|
|
};
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
|
|
var Stream = __webpack_require__(/*! ./internal/streams/stream */ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js");
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
|
|
var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer;
|
|
|
|
var OurUint8Array = global.Uint8Array || function () {};
|
|
|
|
function _uint8ArrayToBuffer(chunk) {
|
|
return Buffer.from(chunk);
|
|
}
|
|
|
|
function _isUint8Array(obj) {
|
|
return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
|
|
}
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
|
|
var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js");
|
|
|
|
util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js");
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
var debugUtil = __webpack_require__(/*! util */ 0);
|
|
|
|
var debug = void 0;
|
|
|
|
if (debugUtil && debugUtil.debuglog) {
|
|
debug = debugUtil.debuglog('stream');
|
|
} else {
|
|
debug = function () {};
|
|
}
|
|
/*</replacement>*/
|
|
|
|
|
|
var BufferList = __webpack_require__(/*! ./internal/streams/BufferList */ "./node_modules/readable-stream/lib/internal/streams/BufferList.js");
|
|
|
|
var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "./node_modules/readable-stream/lib/internal/streams/destroy.js");
|
|
|
|
var StringDecoder;
|
|
util.inherits(Readable, Stream);
|
|
var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
|
|
|
|
function prependListener(emitter, event, fn) {
|
|
// Sadly this is not cacheable as some libraries bundle their own
|
|
// event emitter implementation with them.
|
|
if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any
|
|
// userland ones. NEVER DO THIS. This is here only because this code needs
|
|
// to continue to work with older versions of Node.js that do not include
|
|
// the prependListener() method. The goal is to eventually remove this hack.
|
|
|
|
if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
|
|
}
|
|
|
|
function ReadableState(options, stream) {
|
|
Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js");
|
|
options = options || {}; // Duplex streams are both readable and writable, but share
|
|
// the same options object.
|
|
// However, some cases require setting options to different
|
|
// values for the readable and the writable sides of the duplex stream.
|
|
// These options can be provided separately as readableXXX and writableXXX.
|
|
|
|
var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to
|
|
// make all the buffer merging and length checks go away
|
|
|
|
this.objectMode = !!options.objectMode;
|
|
if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer
|
|
// Note: 0 is a valid value, means "don't call _read preemptively ever"
|
|
|
|
var hwm = options.highWaterMark;
|
|
var readableHwm = options.readableHighWaterMark;
|
|
var defaultHwm = this.objectMode ? 16 : 16 * 1024;
|
|
if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints.
|
|
|
|
this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the
|
|
// linked list can remove elements from the beginning faster than
|
|
// array.shift()
|
|
|
|
this.buffer = new BufferList();
|
|
this.length = 0;
|
|
this.pipes = null;
|
|
this.pipesCount = 0;
|
|
this.flowing = null;
|
|
this.ended = false;
|
|
this.endEmitted = false;
|
|
this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted
|
|
// immediately, or on a later tick. We set this to true at first, because
|
|
// any actions that shouldn't happen until "later" should generally also
|
|
// not happen before the first read call.
|
|
|
|
this.sync = true; // whenever we return null, then we set a flag to say
|
|
// that we're awaiting a 'readable' event emission.
|
|
|
|
this.needReadable = false;
|
|
this.emittedReadable = false;
|
|
this.readableListening = false;
|
|
this.resumeScheduled = false; // has it been destroyed
|
|
|
|
this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string
|
|
// encoding is 'binary' so we have to make this configurable.
|
|
// Everything else in the universe uses 'utf8', though.
|
|
|
|
this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s
|
|
|
|
this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled
|
|
|
|
this.readingMore = false;
|
|
this.decoder = null;
|
|
this.encoding = null;
|
|
|
|
if (options.encoding) {
|
|
if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ "./node_modules/string_decoder/lib/string_decoder.js").StringDecoder;
|
|
this.decoder = new StringDecoder(options.encoding);
|
|
this.encoding = options.encoding;
|
|
}
|
|
}
|
|
|
|
function Readable(options) {
|
|
Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js");
|
|
if (!(this instanceof Readable)) return new Readable(options);
|
|
this._readableState = new ReadableState(options, this); // legacy
|
|
|
|
this.readable = true;
|
|
|
|
if (options) {
|
|
if (typeof options.read === 'function') this._read = options.read;
|
|
if (typeof options.destroy === 'function') this._destroy = options.destroy;
|
|
}
|
|
|
|
Stream.call(this);
|
|
}
|
|
|
|
Object.defineProperty(Readable.prototype, 'destroyed', {
|
|
get: function () {
|
|
if (this._readableState === undefined) {
|
|
return false;
|
|
}
|
|
|
|
return this._readableState.destroyed;
|
|
},
|
|
set: function (value) {
|
|
// we ignore the value if the stream
|
|
// has not been initialized yet
|
|
if (!this._readableState) {
|
|
return;
|
|
} // backward compatibility, the user is explicitly
|
|
// managing destroyed
|
|
|
|
|
|
this._readableState.destroyed = value;
|
|
}
|
|
});
|
|
Readable.prototype.destroy = destroyImpl.destroy;
|
|
Readable.prototype._undestroy = destroyImpl.undestroy;
|
|
|
|
Readable.prototype._destroy = function (err, cb) {
|
|
this.push(null);
|
|
cb(err);
|
|
}; // Manually shove something into the read() buffer.
|
|
// This returns true if the highWaterMark has not been hit yet,
|
|
// similar to how Writable.write() returns true if you should
|
|
// write() some more.
|
|
|
|
|
|
Readable.prototype.push = function (chunk, encoding) {
|
|
var state = this._readableState;
|
|
var skipChunkCheck;
|
|
|
|
if (!state.objectMode) {
|
|
if (typeof chunk === 'string') {
|
|
encoding = encoding || state.defaultEncoding;
|
|
|
|
if (encoding !== state.encoding) {
|
|
chunk = Buffer.from(chunk, encoding);
|
|
encoding = '';
|
|
}
|
|
|
|
skipChunkCheck = true;
|
|
}
|
|
} else {
|
|
skipChunkCheck = true;
|
|
}
|
|
|
|
return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
|
|
}; // Unshift should *always* be something directly out of read()
|
|
|
|
|
|
Readable.prototype.unshift = function (chunk) {
|
|
return readableAddChunk(this, chunk, null, true, false);
|
|
};
|
|
|
|
function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
|
|
var state = stream._readableState;
|
|
|
|
if (chunk === null) {
|
|
state.reading = false;
|
|
onEofChunk(stream, state);
|
|
} else {
|
|
var er;
|
|
if (!skipChunkCheck) er = chunkInvalid(state, chunk);
|
|
|
|
if (er) {
|
|
stream.emit('error', er);
|
|
} else if (state.objectMode || chunk && chunk.length > 0) {
|
|
if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
|
|
chunk = _uint8ArrayToBuffer(chunk);
|
|
}
|
|
|
|
if (addToFront) {
|
|
if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
|
|
} else if (state.ended) {
|
|
stream.emit('error', new Error('stream.push() after EOF'));
|
|
} else {
|
|
state.reading = false;
|
|
|
|
if (state.decoder && !encoding) {
|
|
chunk = state.decoder.write(chunk);
|
|
if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
|
|
} else {
|
|
addChunk(stream, state, chunk, false);
|
|
}
|
|
}
|
|
} else if (!addToFront) {
|
|
state.reading = false;
|
|
}
|
|
}
|
|
|
|
return needMoreData(state);
|
|
}
|
|
|
|
function addChunk(stream, state, chunk, addToFront) {
|
|
if (state.flowing && state.length === 0 && !state.sync) {
|
|
stream.emit('data', chunk);
|
|
stream.read(0);
|
|
} else {
|
|
// update the buffer info.
|
|
state.length += state.objectMode ? 1 : chunk.length;
|
|
if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
|
|
if (state.needReadable) emitReadable(stream);
|
|
}
|
|
|
|
maybeReadMore(stream, state);
|
|
}
|
|
|
|
function chunkInvalid(state, chunk) {
|
|
var er;
|
|
|
|
if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
|
|
er = new TypeError('Invalid non-string/buffer chunk');
|
|
}
|
|
|
|
return er;
|
|
} // if it's past the high water mark, we can push in some more.
|
|
// Also, if we have no data yet, we can stand some
|
|
// more bytes. This is to work around cases where hwm=0,
|
|
// such as the repl. Also, if the push() triggered a
|
|
// readable event, and the user called read(largeNumber) such that
|
|
// needReadable was set, then we ought to push more, so that another
|
|
// 'readable' event will be triggered.
|
|
|
|
|
|
function needMoreData(state) {
|
|
return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
|
|
}
|
|
|
|
Readable.prototype.isPaused = function () {
|
|
return this._readableState.flowing === false;
|
|
}; // backwards compatibility.
|
|
|
|
|
|
Readable.prototype.setEncoding = function (enc) {
|
|
if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ "./node_modules/string_decoder/lib/string_decoder.js").StringDecoder;
|
|
this._readableState.decoder = new StringDecoder(enc);
|
|
this._readableState.encoding = enc;
|
|
return this;
|
|
}; // Don't raise the hwm > 8MB
|
|
|
|
|
|
var MAX_HWM = 0x800000;
|
|
|
|
function computeNewHighWaterMark(n) {
|
|
if (n >= MAX_HWM) {
|
|
n = MAX_HWM;
|
|
} else {
|
|
// Get the next highest power of 2 to prevent increasing hwm excessively in
|
|
// tiny amounts
|
|
n--;
|
|
n |= n >>> 1;
|
|
n |= n >>> 2;
|
|
n |= n >>> 4;
|
|
n |= n >>> 8;
|
|
n |= n >>> 16;
|
|
n++;
|
|
}
|
|
|
|
return n;
|
|
} // This function is designed to be inlinable, so please take care when making
|
|
// changes to the function body.
|
|
|
|
|
|
function howMuchToRead(n, state) {
|
|
if (n <= 0 || state.length === 0 && state.ended) return 0;
|
|
if (state.objectMode) return 1;
|
|
|
|
if (n !== n) {
|
|
// Only flow one buffer at a time
|
|
if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
|
|
} // If we're asking for more than the current hwm, then raise the hwm.
|
|
|
|
|
|
if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
|
|
if (n <= state.length) return n; // Don't have enough
|
|
|
|
if (!state.ended) {
|
|
state.needReadable = true;
|
|
return 0;
|
|
}
|
|
|
|
return state.length;
|
|
} // you can override either this method, or the async _read(n) below.
|
|
|
|
|
|
Readable.prototype.read = function (n) {
|
|
debug('read', n);
|
|
n = parseInt(n, 10);
|
|
var state = this._readableState;
|
|
var nOrig = n;
|
|
if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we
|
|
// already have a bunch of data in the buffer, then just trigger
|
|
// the 'readable' event and move on.
|
|
|
|
if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
|
|
debug('read: emitReadable', state.length, state.ended);
|
|
if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
|
|
return null;
|
|
}
|
|
|
|
n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.
|
|
|
|
if (n === 0 && state.ended) {
|
|
if (state.length === 0) endReadable(this);
|
|
return null;
|
|
} // All the actual chunk generation logic needs to be
|
|
// *below* the call to _read. The reason is that in certain
|
|
// synthetic stream cases, such as passthrough streams, _read
|
|
// may be a completely synchronous operation which may change
|
|
// the state of the read buffer, providing enough data when
|
|
// before there was *not* enough.
|
|
//
|
|
// So, the steps are:
|
|
// 1. Figure out what the state of things will be after we do
|
|
// a read from the buffer.
|
|
//
|
|
// 2. If that resulting state will trigger a _read, then call _read.
|
|
// Note that this may be asynchronous, or synchronous. Yes, it is
|
|
// deeply ugly to write APIs this way, but that still doesn't mean
|
|
// that the Readable class should behave improperly, as streams are
|
|
// designed to be sync/async agnostic.
|
|
// Take note if the _read call is sync or async (ie, if the read call
|
|
// has returned yet), so that we know whether or not it's safe to emit
|
|
// 'readable' etc.
|
|
//
|
|
// 3. Actually pull the requested chunks out of the buffer and return.
|
|
// if we need a readable event, then we need to do some reading.
|
|
|
|
|
|
var doRead = state.needReadable;
|
|
debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some
|
|
|
|
if (state.length === 0 || state.length - n < state.highWaterMark) {
|
|
doRead = true;
|
|
debug('length less than watermark', doRead);
|
|
} // however, if we've ended, then there's no point, and if we're already
|
|
// reading, then it's unnecessary.
|
|
|
|
|
|
if (state.ended || state.reading) {
|
|
doRead = false;
|
|
debug('reading or ended', doRead);
|
|
} else if (doRead) {
|
|
debug('do read');
|
|
state.reading = true;
|
|
state.sync = true; // if the length is currently zero, then we *need* a readable event.
|
|
|
|
if (state.length === 0) state.needReadable = true; // call internal read method
|
|
|
|
this._read(state.highWaterMark);
|
|
|
|
state.sync = false; // If _read pushed data synchronously, then `reading` will be false,
|
|
// and we need to re-evaluate how much data we can return to the user.
|
|
|
|
if (!state.reading) n = howMuchToRead(nOrig, state);
|
|
}
|
|
|
|
var ret;
|
|
if (n > 0) ret = fromList(n, state);else ret = null;
|
|
|
|
if (ret === null) {
|
|
state.needReadable = true;
|
|
n = 0;
|
|
} else {
|
|
state.length -= n;
|
|
}
|
|
|
|
if (state.length === 0) {
|
|
// If we have nothing in the buffer, then we want to know
|
|
// as soon as we *do* get something into the buffer.
|
|
if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.
|
|
|
|
if (nOrig !== n && state.ended) endReadable(this);
|
|
}
|
|
|
|
if (ret !== null) this.emit('data', ret);
|
|
return ret;
|
|
};
|
|
|
|
function onEofChunk(stream, state) {
|
|
if (state.ended) return;
|
|
|
|
if (state.decoder) {
|
|
var chunk = state.decoder.end();
|
|
|
|
if (chunk && chunk.length) {
|
|
state.buffer.push(chunk);
|
|
state.length += state.objectMode ? 1 : chunk.length;
|
|
}
|
|
}
|
|
|
|
state.ended = true; // emit 'readable' now to make sure it gets picked up.
|
|
|
|
emitReadable(stream);
|
|
} // Don't emit readable right away in sync mode, because this can trigger
|
|
// another read() call => stack overflow. This way, it might trigger
|
|
// a nextTick recursion warning, but that's not so bad.
|
|
|
|
|
|
function emitReadable(stream) {
|
|
var state = stream._readableState;
|
|
state.needReadable = false;
|
|
|
|
if (!state.emittedReadable) {
|
|
debug('emitReadable', state.flowing);
|
|
state.emittedReadable = true;
|
|
if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
|
|
}
|
|
}
|
|
|
|
function emitReadable_(stream) {
|
|
debug('emit readable');
|
|
stream.emit('readable');
|
|
flow(stream);
|
|
} // at this point, the user has presumably seen the 'readable' event,
|
|
// and called read() to consume some data. that may have triggered
|
|
// in turn another _read(n) call, in which case reading = true if
|
|
// it's in progress.
|
|
// However, if we're not ended, or reading, and the length < hwm,
|
|
// then go ahead and try to read some more preemptively.
|
|
|
|
|
|
function maybeReadMore(stream, state) {
|
|
if (!state.readingMore) {
|
|
state.readingMore = true;
|
|
pna.nextTick(maybeReadMore_, stream, state);
|
|
}
|
|
}
|
|
|
|
function maybeReadMore_(stream, state) {
|
|
var len = state.length;
|
|
|
|
while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
|
|
debug('maybeReadMore read 0');
|
|
stream.read(0);
|
|
if (len === state.length) // didn't get any data, stop spinning.
|
|
break;else len = state.length;
|
|
}
|
|
|
|
state.readingMore = false;
|
|
} // abstract method. to be overridden in specific implementation classes.
|
|
// call cb(er, data) where data is <= n in length.
|
|
// for virtual (non-string, non-buffer) streams, "length" is somewhat
|
|
// arbitrary, and perhaps not very meaningful.
|
|
|
|
|
|
Readable.prototype._read = function (n) {
|
|
this.emit('error', new Error('_read() is not implemented'));
|
|
};
|
|
|
|
Readable.prototype.pipe = function (dest, pipeOpts) {
|
|
var src = this;
|
|
var state = this._readableState;
|
|
|
|
switch (state.pipesCount) {
|
|
case 0:
|
|
state.pipes = dest;
|
|
break;
|
|
|
|
case 1:
|
|
state.pipes = [state.pipes, dest];
|
|
break;
|
|
|
|
default:
|
|
state.pipes.push(dest);
|
|
break;
|
|
}
|
|
|
|
state.pipesCount += 1;
|
|
debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
|
|
var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
|
|
var endFn = doEnd ? onend : unpipe;
|
|
if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
|
|
dest.on('unpipe', onunpipe);
|
|
|
|
function onunpipe(readable, unpipeInfo) {
|
|
debug('onunpipe');
|
|
|
|
if (readable === src) {
|
|
if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
|
|
unpipeInfo.hasUnpiped = true;
|
|
cleanup();
|
|
}
|
|
}
|
|
}
|
|
|
|
function onend() {
|
|
debug('onend');
|
|
dest.end();
|
|
} // when the dest drains, it reduces the awaitDrain counter
|
|
// on the source. This would be more elegant with a .once()
|
|
// handler in flow(), but adding and removing repeatedly is
|
|
// too slow.
|
|
|
|
|
|
var ondrain = pipeOnDrain(src);
|
|
dest.on('drain', ondrain);
|
|
var cleanedUp = false;
|
|
|
|
function cleanup() {
|
|
debug('cleanup'); // cleanup event handlers once the pipe is broken
|
|
|
|
dest.removeListener('close', onclose);
|
|
dest.removeListener('finish', onfinish);
|
|
dest.removeListener('drain', ondrain);
|
|
dest.removeListener('error', onerror);
|
|
dest.removeListener('unpipe', onunpipe);
|
|
src.removeListener('end', onend);
|
|
src.removeListener('end', unpipe);
|
|
src.removeListener('data', ondata);
|
|
cleanedUp = true; // if the reader is waiting for a drain event from this
|
|
// specific writer, then it would cause it to never start
|
|
// flowing again.
|
|
// So, if this is awaiting a drain, then we just call it now.
|
|
// If we don't know, then assume that we are waiting for one.
|
|
|
|
if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
|
|
} // If the user pushes more data while we're writing to dest then we'll end up
|
|
// in ondata again. However, we only want to increase awaitDrain once because
|
|
// dest will only emit one 'drain' event for the multiple writes.
|
|
// => Introduce a guard on increasing awaitDrain.
|
|
|
|
|
|
var increasedAwaitDrain = false;
|
|
src.on('data', ondata);
|
|
|
|
function ondata(chunk) {
|
|
debug('ondata');
|
|
increasedAwaitDrain = false;
|
|
var ret = dest.write(chunk);
|
|
|
|
if (false === ret && !increasedAwaitDrain) {
|
|
// If the user unpiped during `dest.write()`, it is possible
|
|
// to get stuck in a permanently paused state if that write
|
|
// also returned false.
|
|
// => Check whether `dest` is still a piping destination.
|
|
if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
|
|
debug('false write response, pause', src._readableState.awaitDrain);
|
|
src._readableState.awaitDrain++;
|
|
increasedAwaitDrain = true;
|
|
}
|
|
|
|
src.pause();
|
|
}
|
|
} // if the dest has an error, then stop piping into it.
|
|
// however, don't suppress the throwing behavior for this.
|
|
|
|
|
|
function onerror(er) {
|
|
debug('onerror', er);
|
|
unpipe();
|
|
dest.removeListener('error', onerror);
|
|
if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
|
|
} // Make sure our error handler is attached before userland ones.
|
|
|
|
|
|
prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.
|
|
|
|
function onclose() {
|
|
dest.removeListener('finish', onfinish);
|
|
unpipe();
|
|
}
|
|
|
|
dest.once('close', onclose);
|
|
|
|
function onfinish() {
|
|
debug('onfinish');
|
|
dest.removeListener('close', onclose);
|
|
unpipe();
|
|
}
|
|
|
|
dest.once('finish', onfinish);
|
|
|
|
function unpipe() {
|
|
debug('unpipe');
|
|
src.unpipe(dest);
|
|
} // tell the dest that it's being piped to
|
|
|
|
|
|
dest.emit('pipe', src); // start the flow if it hasn't been started already.
|
|
|
|
if (!state.flowing) {
|
|
debug('pipe resume');
|
|
src.resume();
|
|
}
|
|
|
|
return dest;
|
|
};
|
|
|
|
function pipeOnDrain(src) {
|
|
return function () {
|
|
var state = src._readableState;
|
|
debug('pipeOnDrain', state.awaitDrain);
|
|
if (state.awaitDrain) state.awaitDrain--;
|
|
|
|
if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
|
|
state.flowing = true;
|
|
flow(src);
|
|
}
|
|
};
|
|
}
|
|
|
|
Readable.prototype.unpipe = function (dest) {
|
|
var state = this._readableState;
|
|
var unpipeInfo = {
|
|
hasUnpiped: false
|
|
}; // if we're not piping anywhere, then do nothing.
|
|
|
|
if (state.pipesCount === 0) return this; // just one destination. most common case.
|
|
|
|
if (state.pipesCount === 1) {
|
|
// passed in one, but it's not the right one.
|
|
if (dest && dest !== state.pipes) return this;
|
|
if (!dest) dest = state.pipes; // got a match.
|
|
|
|
state.pipes = null;
|
|
state.pipesCount = 0;
|
|
state.flowing = false;
|
|
if (dest) dest.emit('unpipe', this, unpipeInfo);
|
|
return this;
|
|
} // slow case. multiple pipe destinations.
|
|
|
|
|
|
if (!dest) {
|
|
// remove all.
|
|
var dests = state.pipes;
|
|
var len = state.pipesCount;
|
|
state.pipes = null;
|
|
state.pipesCount = 0;
|
|
state.flowing = false;
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
dests[i].emit('unpipe', this, unpipeInfo);
|
|
}
|
|
|
|
return this;
|
|
} // try to find the right one.
|
|
|
|
|
|
var index = indexOf(state.pipes, dest);
|
|
if (index === -1) return this;
|
|
state.pipes.splice(index, 1);
|
|
state.pipesCount -= 1;
|
|
if (state.pipesCount === 1) state.pipes = state.pipes[0];
|
|
dest.emit('unpipe', this, unpipeInfo);
|
|
return this;
|
|
}; // set up data events if they are asked for
|
|
// Ensure readable listeners eventually get something
|
|
|
|
|
|
Readable.prototype.on = function (ev, fn) {
|
|
var res = Stream.prototype.on.call(this, ev, fn);
|
|
|
|
if (ev === 'data') {
|
|
// Start flowing on next tick if stream isn't explicitly paused
|
|
if (this._readableState.flowing !== false) this.resume();
|
|
} else if (ev === 'readable') {
|
|
var state = this._readableState;
|
|
|
|
if (!state.endEmitted && !state.readableListening) {
|
|
state.readableListening = state.needReadable = true;
|
|
state.emittedReadable = false;
|
|
|
|
if (!state.reading) {
|
|
pna.nextTick(nReadingNextTick, this);
|
|
} else if (state.length) {
|
|
emitReadable(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
return res;
|
|
};
|
|
|
|
Readable.prototype.addListener = Readable.prototype.on;
|
|
|
|
function nReadingNextTick(self) {
|
|
debug('readable nexttick read 0');
|
|
self.read(0);
|
|
} // pause() and resume() are remnants of the legacy readable stream API
|
|
// If the user uses them, then switch into old mode.
|
|
|
|
|
|
Readable.prototype.resume = function () {
|
|
var state = this._readableState;
|
|
|
|
if (!state.flowing) {
|
|
debug('resume');
|
|
state.flowing = true;
|
|
resume(this, state);
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
function resume(stream, state) {
|
|
if (!state.resumeScheduled) {
|
|
state.resumeScheduled = true;
|
|
pna.nextTick(resume_, stream, state);
|
|
}
|
|
}
|
|
|
|
function resume_(stream, state) {
|
|
if (!state.reading) {
|
|
debug('resume read 0');
|
|
stream.read(0);
|
|
}
|
|
|
|
state.resumeScheduled = false;
|
|
state.awaitDrain = 0;
|
|
stream.emit('resume');
|
|
flow(stream);
|
|
if (state.flowing && !state.reading) stream.read(0);
|
|
}
|
|
|
|
Readable.prototype.pause = function () {
|
|
debug('call pause flowing=%j', this._readableState.flowing);
|
|
|
|
if (false !== this._readableState.flowing) {
|
|
debug('pause');
|
|
this._readableState.flowing = false;
|
|
this.emit('pause');
|
|
}
|
|
|
|
return this;
|
|
};
|
|
|
|
function flow(stream) {
|
|
var state = stream._readableState;
|
|
debug('flow', state.flowing);
|
|
|
|
while (state.flowing && stream.read() !== null) {}
|
|
} // wrap an old-style stream as the async data source.
|
|
// This is *not* part of the readable stream interface.
|
|
// It is an ugly unfortunate mess of history.
|
|
|
|
|
|
Readable.prototype.wrap = function (stream) {
|
|
var _this = this;
|
|
|
|
var state = this._readableState;
|
|
var paused = false;
|
|
stream.on('end', function () {
|
|
debug('wrapped end');
|
|
|
|
if (state.decoder && !state.ended) {
|
|
var chunk = state.decoder.end();
|
|
if (chunk && chunk.length) _this.push(chunk);
|
|
}
|
|
|
|
_this.push(null);
|
|
});
|
|
stream.on('data', function (chunk) {
|
|
debug('wrapped data');
|
|
if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode
|
|
|
|
if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
|
|
|
|
var ret = _this.push(chunk);
|
|
|
|
if (!ret) {
|
|
paused = true;
|
|
stream.pause();
|
|
}
|
|
}); // proxy all the other methods.
|
|
// important when wrapping filters and duplexes.
|
|
|
|
for (var i in stream) {
|
|
if (this[i] === undefined && typeof stream[i] === 'function') {
|
|
this[i] = function (method) {
|
|
return function () {
|
|
return stream[method].apply(stream, arguments);
|
|
};
|
|
}(i);
|
|
}
|
|
} // proxy certain important events.
|
|
|
|
|
|
for (var n = 0; n < kProxyEvents.length; n++) {
|
|
stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
|
|
} // when we try to consume some more bytes, simply unpause the
|
|
// underlying stream.
|
|
|
|
|
|
this._read = function (n) {
|
|
debug('wrapped _read', n);
|
|
|
|
if (paused) {
|
|
paused = false;
|
|
stream.resume();
|
|
}
|
|
};
|
|
|
|
return this;
|
|
};
|
|
|
|
Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
|
|
// making it explicit this property is not enumerable
|
|
// because otherwise some prototype manipulation in
|
|
// userland will fail
|
|
enumerable: false,
|
|
get: function () {
|
|
return this._readableState.highWaterMark;
|
|
}
|
|
}); // exposed for testing purposes only.
|
|
|
|
Readable._fromList = fromList; // Pluck off n bytes from an array of buffers.
|
|
// Length is the combined lengths of all the buffers in the list.
|
|
// This function is designed to be inlinable, so please take care when making
|
|
// changes to the function body.
|
|
|
|
function fromList(n, state) {
|
|
// nothing buffered
|
|
if (state.length === 0) return null;
|
|
var ret;
|
|
if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
|
|
// read it all, truncate the list
|
|
if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
|
|
state.buffer.clear();
|
|
} else {
|
|
// read part of list
|
|
ret = fromListPartial(n, state.buffer, state.decoder);
|
|
}
|
|
return ret;
|
|
} // Extracts only enough buffered data to satisfy the amount requested.
|
|
// This function is designed to be inlinable, so please take care when making
|
|
// changes to the function body.
|
|
|
|
|
|
function fromListPartial(n, list, hasStrings) {
|
|
var ret;
|
|
|
|
if (n < list.head.data.length) {
|
|
// slice is the same for buffers and strings
|
|
ret = list.head.data.slice(0, n);
|
|
list.head.data = list.head.data.slice(n);
|
|
} else if (n === list.head.data.length) {
|
|
// first chunk is a perfect match
|
|
ret = list.shift();
|
|
} else {
|
|
// result spans more than one buffer
|
|
ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
|
|
}
|
|
|
|
return ret;
|
|
} // Copies a specified amount of characters from the list of buffered data
|
|
// chunks.
|
|
// This function is designed to be inlinable, so please take care when making
|
|
// changes to the function body.
|
|
|
|
|
|
function copyFromBufferString(n, list) {
|
|
var p = list.head;
|
|
var c = 1;
|
|
var ret = p.data;
|
|
n -= ret.length;
|
|
|
|
while (p = p.next) {
|
|
var str = p.data;
|
|
var nb = n > str.length ? str.length : n;
|
|
if (nb === str.length) ret += str;else ret += str.slice(0, n);
|
|
n -= nb;
|
|
|
|
if (n === 0) {
|
|
if (nb === str.length) {
|
|
++c;
|
|
if (p.next) list.head = p.next;else list.head = list.tail = null;
|
|
} else {
|
|
list.head = p;
|
|
p.data = str.slice(nb);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
++c;
|
|
}
|
|
|
|
list.length -= c;
|
|
return ret;
|
|
} // Copies a specified amount of bytes from the list of buffered data chunks.
|
|
// This function is designed to be inlinable, so please take care when making
|
|
// changes to the function body.
|
|
|
|
|
|
function copyFromBuffer(n, list) {
|
|
var ret = Buffer.allocUnsafe(n);
|
|
var p = list.head;
|
|
var c = 1;
|
|
p.data.copy(ret);
|
|
n -= p.data.length;
|
|
|
|
while (p = p.next) {
|
|
var buf = p.data;
|
|
var nb = n > buf.length ? buf.length : n;
|
|
buf.copy(ret, ret.length - n, 0, nb);
|
|
n -= nb;
|
|
|
|
if (n === 0) {
|
|
if (nb === buf.length) {
|
|
++c;
|
|
if (p.next) list.head = p.next;else list.head = list.tail = null;
|
|
} else {
|
|
list.head = p;
|
|
p.data = buf.slice(nb);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
++c;
|
|
}
|
|
|
|
list.length -= c;
|
|
return ret;
|
|
}
|
|
|
|
function endReadable(stream) {
|
|
var state = stream._readableState; // If we get here before consuming all the bytes, then that is a
|
|
// bug in node. Should never happen.
|
|
|
|
if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
|
|
|
|
if (!state.endEmitted) {
|
|
state.ended = true;
|
|
pna.nextTick(endReadableNT, state, stream);
|
|
}
|
|
}
|
|
|
|
function endReadableNT(state, stream) {
|
|
// Check that we didn't get one last unshift.
|
|
if (!state.endEmitted && state.length === 0) {
|
|
state.endEmitted = true;
|
|
stream.readable = false;
|
|
stream.emit('end');
|
|
}
|
|
}
|
|
|
|
function indexOf(xs, x) {
|
|
for (var i = 0, l = xs.length; i < l; i++) {
|
|
if (xs[i] === x) return i;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js")))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/lib/_stream_transform.js":
|
|
/*!***************************************************************!*\
|
|
!*** ./node_modules/readable-stream/lib/_stream_transform.js ***!
|
|
\***************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
// a transform stream is a readable/writable stream where you do
|
|
// something with the data. Sometimes it's called a "filter",
|
|
// but that's not a great name for it, since that implies a thing where
|
|
// some bits pass through, and others are simply ignored. (That would
|
|
// be a valid example of a transform, of course.)
|
|
//
|
|
// While the output is causally related to the input, it's not a
|
|
// necessarily symmetric or synchronous transformation. For example,
|
|
// a zlib stream might take multiple plain-text writes(), and then
|
|
// emit a single compressed chunk some time in the future.
|
|
//
|
|
// Here's how this works:
|
|
//
|
|
// The Transform stream has all the aspects of the readable and writable
|
|
// stream classes. When you write(chunk), that calls _write(chunk,cb)
|
|
// internally, and returns false if there's a lot of pending writes
|
|
// buffered up. When you call read(), that calls _read(n) until
|
|
// there's enough pending readable data buffered up.
|
|
//
|
|
// In a transform stream, the written data is placed in a buffer. When
|
|
// _read(n) is called, it transforms the queued up data, calling the
|
|
// buffered _write cb's as it consumes chunks. If consuming a single
|
|
// written chunk would result in multiple output chunks, then the first
|
|
// outputted bit calls the readcb, and subsequent chunks just go into
|
|
// the read buffer, and will cause it to emit 'readable' if necessary.
|
|
//
|
|
// This way, back-pressure is actually determined by the reading side,
|
|
// since _read has to be called to start processing a new chunk. However,
|
|
// a pathological inflate type of transform can cause excessive buffering
|
|
// here. For example, imagine a stream where every byte of input is
|
|
// interpreted as an integer from 0-255, and then results in that many
|
|
// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
|
|
// 1kb of data being output. In this case, you could write a very small
|
|
// amount of input, and end up with a very large amount of output. In
|
|
// such a pathological inflating mechanism, there'd be no way to tell
|
|
// the system to stop doing the transform. A single 4MB write could
|
|
// cause the system to run out of memory.
|
|
//
|
|
// However, even in such a pathological case, only a single written chunk
|
|
// would be consumed, and then the rest would wait (un-transformed) until
|
|
// the results of the previous transformed chunk were consumed.
|
|
|
|
|
|
module.exports = Transform;
|
|
|
|
var Duplex = __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js");
|
|
/*<replacement>*/
|
|
|
|
|
|
var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js");
|
|
|
|
util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js");
|
|
/*</replacement>*/
|
|
|
|
util.inherits(Transform, Duplex);
|
|
|
|
function afterTransform(er, data) {
|
|
var ts = this._transformState;
|
|
ts.transforming = false;
|
|
var cb = ts.writecb;
|
|
|
|
if (!cb) {
|
|
return this.emit('error', new Error('write callback called multiple times'));
|
|
}
|
|
|
|
ts.writechunk = null;
|
|
ts.writecb = null;
|
|
if (data != null) // single equals check for both `null` and `undefined`
|
|
this.push(data);
|
|
cb(er);
|
|
var rs = this._readableState;
|
|
rs.reading = false;
|
|
|
|
if (rs.needReadable || rs.length < rs.highWaterMark) {
|
|
this._read(rs.highWaterMark);
|
|
}
|
|
}
|
|
|
|
function Transform(options) {
|
|
if (!(this instanceof Transform)) return new Transform(options);
|
|
Duplex.call(this, options);
|
|
this._transformState = {
|
|
afterTransform: afterTransform.bind(this),
|
|
needTransform: false,
|
|
transforming: false,
|
|
writecb: null,
|
|
writechunk: null,
|
|
writeencoding: null
|
|
}; // start out asking for a readable event once data is transformed.
|
|
|
|
this._readableState.needReadable = true; // we have implemented the _read method, and done the other things
|
|
// that Readable wants before the first _read call, so unset the
|
|
// sync guard flag.
|
|
|
|
this._readableState.sync = false;
|
|
|
|
if (options) {
|
|
if (typeof options.transform === 'function') this._transform = options.transform;
|
|
if (typeof options.flush === 'function') this._flush = options.flush;
|
|
} // When the writable side finishes, then flush out anything remaining.
|
|
|
|
|
|
this.on('prefinish', prefinish);
|
|
}
|
|
|
|
function prefinish() {
|
|
var _this = this;
|
|
|
|
if (typeof this._flush === 'function') {
|
|
this._flush(function (er, data) {
|
|
done(_this, er, data);
|
|
});
|
|
} else {
|
|
done(this, null, null);
|
|
}
|
|
}
|
|
|
|
Transform.prototype.push = function (chunk, encoding) {
|
|
this._transformState.needTransform = false;
|
|
return Duplex.prototype.push.call(this, chunk, encoding);
|
|
}; // This is the part where you do stuff!
|
|
// override this function in implementation classes.
|
|
// 'chunk' is an input chunk.
|
|
//
|
|
// Call `push(newChunk)` to pass along transformed output
|
|
// to the readable side. You may call 'push' zero or more times.
|
|
//
|
|
// Call `cb(err)` when you are done with this chunk. If you pass
|
|
// an error, then that'll put the hurt on the whole operation. If you
|
|
// never call cb(), then you'll never get another chunk.
|
|
|
|
|
|
Transform.prototype._transform = function (chunk, encoding, cb) {
|
|
throw new Error('_transform() is not implemented');
|
|
};
|
|
|
|
Transform.prototype._write = function (chunk, encoding, cb) {
|
|
var ts = this._transformState;
|
|
ts.writecb = cb;
|
|
ts.writechunk = chunk;
|
|
ts.writeencoding = encoding;
|
|
|
|
if (!ts.transforming) {
|
|
var rs = this._readableState;
|
|
if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
|
|
}
|
|
}; // Doesn't matter what the args are here.
|
|
// _transform does all the work.
|
|
// That we got here means that the readable side wants more data.
|
|
|
|
|
|
Transform.prototype._read = function (n) {
|
|
var ts = this._transformState;
|
|
|
|
if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
|
|
ts.transforming = true;
|
|
|
|
this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
|
|
} else {
|
|
// mark that we need a transform, so that any data that comes in
|
|
// will get processed, now that we've asked for it.
|
|
ts.needTransform = true;
|
|
}
|
|
};
|
|
|
|
Transform.prototype._destroy = function (err, cb) {
|
|
var _this2 = this;
|
|
|
|
Duplex.prototype._destroy.call(this, err, function (err2) {
|
|
cb(err2);
|
|
|
|
_this2.emit('close');
|
|
});
|
|
};
|
|
|
|
function done(stream, er, data) {
|
|
if (er) return stream.emit('error', er);
|
|
if (data != null) // single equals check for both `null` and `undefined`
|
|
stream.push(data); // if there's nothing in the write buffer, then that means
|
|
// that nothing more will ever be provided
|
|
|
|
if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
|
|
if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
|
|
return stream.push(null);
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/lib/_stream_writable.js":
|
|
/*!**************************************************************!*\
|
|
!*** ./node_modules/readable-stream/lib/_stream_writable.js ***!
|
|
\**************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
// A bit simpler than readable streams.
|
|
// Implement an async ._write(chunk, encoding, cb), and it'll handle all
|
|
// the drain event emission and buffering.
|
|
|
|
/*<replacement>*/
|
|
|
|
var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js");
|
|
/*</replacement>*/
|
|
|
|
|
|
module.exports = Writable;
|
|
/* <replacement> */
|
|
|
|
function WriteReq(chunk, encoding, cb) {
|
|
this.chunk = chunk;
|
|
this.encoding = encoding;
|
|
this.callback = cb;
|
|
this.next = null;
|
|
} // It seems a linked list but it is not
|
|
// there will be only 2 of these for each stream
|
|
|
|
|
|
function CorkedRequest(state) {
|
|
var _this = this;
|
|
|
|
this.next = null;
|
|
this.entry = null;
|
|
|
|
this.finish = function () {
|
|
onCorkedFinish(_this, state);
|
|
};
|
|
}
|
|
/* </replacement> */
|
|
|
|
/*<replacement>*/
|
|
|
|
|
|
var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
var Duplex;
|
|
/*</replacement>*/
|
|
|
|
Writable.WritableState = WritableState;
|
|
/*<replacement>*/
|
|
|
|
var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js");
|
|
|
|
util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js");
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
var internalUtil = {
|
|
deprecate: __webpack_require__(/*! util-deprecate */ "./node_modules/util-deprecate/browser.js")
|
|
};
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
var Stream = __webpack_require__(/*! ./internal/streams/stream */ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js");
|
|
/*</replacement>*/
|
|
|
|
/*<replacement>*/
|
|
|
|
|
|
var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer;
|
|
|
|
var OurUint8Array = global.Uint8Array || function () {};
|
|
|
|
function _uint8ArrayToBuffer(chunk) {
|
|
return Buffer.from(chunk);
|
|
}
|
|
|
|
function _isUint8Array(obj) {
|
|
return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
|
|
}
|
|
/*</replacement>*/
|
|
|
|
|
|
var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "./node_modules/readable-stream/lib/internal/streams/destroy.js");
|
|
|
|
util.inherits(Writable, Stream);
|
|
|
|
function nop() {}
|
|
|
|
function WritableState(options, stream) {
|
|
Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js");
|
|
options = options || {}; // Duplex streams are both readable and writable, but share
|
|
// the same options object.
|
|
// However, some cases require setting options to different
|
|
// values for the readable and the writable sides of the duplex stream.
|
|
// These options can be provided separately as readableXXX and writableXXX.
|
|
|
|
var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream
|
|
// contains buffers or objects.
|
|
|
|
this.objectMode = !!options.objectMode;
|
|
if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false
|
|
// Note: 0 is a valid value, means that we always return false if
|
|
// the entire buffer is not flushed immediately on write()
|
|
|
|
var hwm = options.highWaterMark;
|
|
var writableHwm = options.writableHighWaterMark;
|
|
var defaultHwm = this.objectMode ? 16 : 16 * 1024;
|
|
if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints.
|
|
|
|
this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called
|
|
|
|
this.finalCalled = false; // drain event flag.
|
|
|
|
this.needDrain = false; // at the start of calling end()
|
|
|
|
this.ending = false; // when end() has been called, and returned
|
|
|
|
this.ended = false; // when 'finish' is emitted
|
|
|
|
this.finished = false; // has it been destroyed
|
|
|
|
this.destroyed = false; // should we decode strings into buffers before passing to _write?
|
|
// this is here so that some node-core streams can optimize string
|
|
// handling at a lower level.
|
|
|
|
var noDecode = options.decodeStrings === false;
|
|
this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string
|
|
// encoding is 'binary' so we have to make this configurable.
|
|
// Everything else in the universe uses 'utf8', though.
|
|
|
|
this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement
|
|
// of how much we're waiting to get pushed to some underlying
|
|
// socket or file.
|
|
|
|
this.length = 0; // a flag to see when we're in the middle of a write.
|
|
|
|
this.writing = false; // when true all writes will be buffered until .uncork() call
|
|
|
|
this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,
|
|
// or on a later tick. We set this to true at first, because any
|
|
// actions that shouldn't happen until "later" should generally also
|
|
// not happen before the first write call.
|
|
|
|
this.sync = true; // a flag to know if we're processing previously buffered items, which
|
|
// may call the _write() callback in the same tick, so that we don't
|
|
// end up in an overlapped onwrite situation.
|
|
|
|
this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)
|
|
|
|
this.onwrite = function (er) {
|
|
onwrite(stream, er);
|
|
}; // the callback that the user supplies to write(chunk,encoding,cb)
|
|
|
|
|
|
this.writecb = null; // the amount that is being written when _write is called.
|
|
|
|
this.writelen = 0;
|
|
this.bufferedRequest = null;
|
|
this.lastBufferedRequest = null; // number of pending user-supplied write callbacks
|
|
// this must be 0 before 'finish' can be emitted
|
|
|
|
this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs
|
|
// This is relevant for synchronous Transform streams
|
|
|
|
this.prefinished = false; // True if the error was already emitted and should not be thrown again
|
|
|
|
this.errorEmitted = false; // count buffered requests
|
|
|
|
this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always
|
|
// one allocated and free to use, and we maintain at most two
|
|
|
|
this.corkedRequestsFree = new CorkedRequest(this);
|
|
}
|
|
|
|
WritableState.prototype.getBuffer = function getBuffer() {
|
|
var current = this.bufferedRequest;
|
|
var out = [];
|
|
|
|
while (current) {
|
|
out.push(current);
|
|
current = current.next;
|
|
}
|
|
|
|
return out;
|
|
};
|
|
|
|
(function () {
|
|
try {
|
|
Object.defineProperty(WritableState.prototype, 'buffer', {
|
|
get: internalUtil.deprecate(function () {
|
|
return this.getBuffer();
|
|
}, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
|
|
});
|
|
} catch (_) {}
|
|
})(); // Test _writableState for inheritance to account for Duplex streams,
|
|
// whose prototype chain only points to Readable.
|
|
|
|
|
|
var realHasInstance;
|
|
|
|
if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
|
|
realHasInstance = Function.prototype[Symbol.hasInstance];
|
|
Object.defineProperty(Writable, Symbol.hasInstance, {
|
|
value: function (object) {
|
|
if (realHasInstance.call(this, object)) return true;
|
|
if (this !== Writable) return false;
|
|
return object && object._writableState instanceof WritableState;
|
|
}
|
|
});
|
|
} else {
|
|
realHasInstance = function (object) {
|
|
return object instanceof this;
|
|
};
|
|
}
|
|
|
|
function Writable(options) {
|
|
Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); // Writable ctor is applied to Duplexes, too.
|
|
// `realHasInstance` is necessary because using plain `instanceof`
|
|
// would return false, as no `_writableState` property is attached.
|
|
// Trying to use the custom `instanceof` for Writable here will also break the
|
|
// Node.js LazyTransform implementation, which has a non-trivial getter for
|
|
// `_writableState` that would lead to infinite recursion.
|
|
|
|
if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
|
|
return new Writable(options);
|
|
}
|
|
|
|
this._writableState = new WritableState(options, this); // legacy.
|
|
|
|
this.writable = true;
|
|
|
|
if (options) {
|
|
if (typeof options.write === 'function') this._write = options.write;
|
|
if (typeof options.writev === 'function') this._writev = options.writev;
|
|
if (typeof options.destroy === 'function') this._destroy = options.destroy;
|
|
if (typeof options.final === 'function') this._final = options.final;
|
|
}
|
|
|
|
Stream.call(this);
|
|
} // Otherwise people can pipe Writable streams, which is just wrong.
|
|
|
|
|
|
Writable.prototype.pipe = function () {
|
|
this.emit('error', new Error('Cannot pipe, not readable'));
|
|
};
|
|
|
|
function writeAfterEnd(stream, cb) {
|
|
var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb
|
|
|
|
stream.emit('error', er);
|
|
pna.nextTick(cb, er);
|
|
} // Checks that a user-supplied chunk is valid, especially for the particular
|
|
// mode the stream is in. Currently this means that `null` is never accepted
|
|
// and undefined/non-string values are only allowed in object mode.
|
|
|
|
|
|
function validChunk(stream, state, chunk, cb) {
|
|
var valid = true;
|
|
var er = false;
|
|
|
|
if (chunk === null) {
|
|
er = new TypeError('May not write null values to stream');
|
|
} else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
|
|
er = new TypeError('Invalid non-string/buffer chunk');
|
|
}
|
|
|
|
if (er) {
|
|
stream.emit('error', er);
|
|
pna.nextTick(cb, er);
|
|
valid = false;
|
|
}
|
|
|
|
return valid;
|
|
}
|
|
|
|
Writable.prototype.write = function (chunk, encoding, cb) {
|
|
var state = this._writableState;
|
|
var ret = false;
|
|
|
|
var isBuf = !state.objectMode && _isUint8Array(chunk);
|
|
|
|
if (isBuf && !Buffer.isBuffer(chunk)) {
|
|
chunk = _uint8ArrayToBuffer(chunk);
|
|
}
|
|
|
|
if (typeof encoding === 'function') {
|
|
cb = encoding;
|
|
encoding = null;
|
|
}
|
|
|
|
if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
|
|
if (typeof cb !== 'function') cb = nop;
|
|
if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
|
|
state.pendingcb++;
|
|
ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
|
|
}
|
|
return ret;
|
|
};
|
|
|
|
Writable.prototype.cork = function () {
|
|
var state = this._writableState;
|
|
state.corked++;
|
|
};
|
|
|
|
Writable.prototype.uncork = function () {
|
|
var state = this._writableState;
|
|
|
|
if (state.corked) {
|
|
state.corked--;
|
|
if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
|
|
}
|
|
};
|
|
|
|
Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
|
|
// node::ParseEncoding() requires lower case.
|
|
if (typeof encoding === 'string') encoding = encoding.toLowerCase();
|
|
if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
|
|
this._writableState.defaultEncoding = encoding;
|
|
return this;
|
|
};
|
|
|
|
function decodeChunk(state, chunk, encoding) {
|
|
if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
|
|
chunk = Buffer.from(chunk, encoding);
|
|
}
|
|
|
|
return chunk;
|
|
}
|
|
|
|
Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
|
|
// making it explicit this property is not enumerable
|
|
// because otherwise some prototype manipulation in
|
|
// userland will fail
|
|
enumerable: false,
|
|
get: function () {
|
|
return this._writableState.highWaterMark;
|
|
}
|
|
}); // if we're already writing something, then just put this
|
|
// in the queue, and wait our turn. Otherwise, call _write
|
|
// If we return false, then we need a drain event, so set that flag.
|
|
|
|
function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
|
|
if (!isBuf) {
|
|
var newChunk = decodeChunk(state, chunk, encoding);
|
|
|
|
if (chunk !== newChunk) {
|
|
isBuf = true;
|
|
encoding = 'buffer';
|
|
chunk = newChunk;
|
|
}
|
|
}
|
|
|
|
var len = state.objectMode ? 1 : chunk.length;
|
|
state.length += len;
|
|
var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.
|
|
|
|
if (!ret) state.needDrain = true;
|
|
|
|
if (state.writing || state.corked) {
|
|
var last = state.lastBufferedRequest;
|
|
state.lastBufferedRequest = {
|
|
chunk: chunk,
|
|
encoding: encoding,
|
|
isBuf: isBuf,
|
|
callback: cb,
|
|
next: null
|
|
};
|
|
|
|
if (last) {
|
|
last.next = state.lastBufferedRequest;
|
|
} else {
|
|
state.bufferedRequest = state.lastBufferedRequest;
|
|
}
|
|
|
|
state.bufferedRequestCount += 1;
|
|
} else {
|
|
doWrite(stream, state, false, len, chunk, encoding, cb);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
function doWrite(stream, state, writev, len, chunk, encoding, cb) {
|
|
state.writelen = len;
|
|
state.writecb = cb;
|
|
state.writing = true;
|
|
state.sync = true;
|
|
if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
|
|
state.sync = false;
|
|
}
|
|
|
|
function onwriteError(stream, state, sync, er, cb) {
|
|
--state.pendingcb;
|
|
|
|
if (sync) {
|
|
// defer the callback if we are being called synchronously
|
|
// to avoid piling up things on the stack
|
|
pna.nextTick(cb, er); // this can emit finish, and it will always happen
|
|
// after error
|
|
|
|
pna.nextTick(finishMaybe, stream, state);
|
|
stream._writableState.errorEmitted = true;
|
|
stream.emit('error', er);
|
|
} else {
|
|
// the caller expect this to happen before if
|
|
// it is async
|
|
cb(er);
|
|
stream._writableState.errorEmitted = true;
|
|
stream.emit('error', er); // this can emit finish, but finish must
|
|
// always follow error
|
|
|
|
finishMaybe(stream, state);
|
|
}
|
|
}
|
|
|
|
function onwriteStateUpdate(state) {
|
|
state.writing = false;
|
|
state.writecb = null;
|
|
state.length -= state.writelen;
|
|
state.writelen = 0;
|
|
}
|
|
|
|
function onwrite(stream, er) {
|
|
var state = stream._writableState;
|
|
var sync = state.sync;
|
|
var cb = state.writecb;
|
|
onwriteStateUpdate(state);
|
|
if (er) onwriteError(stream, state, sync, er, cb);else {
|
|
// Check if we're actually ready to finish, but don't emit yet
|
|
var finished = needFinish(state);
|
|
|
|
if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
|
|
clearBuffer(stream, state);
|
|
}
|
|
|
|
if (sync) {
|
|
/*<replacement>*/
|
|
asyncWrite(afterWrite, stream, state, finished, cb);
|
|
/*</replacement>*/
|
|
} else {
|
|
afterWrite(stream, state, finished, cb);
|
|
}
|
|
}
|
|
}
|
|
|
|
function afterWrite(stream, state, finished, cb) {
|
|
if (!finished) onwriteDrain(stream, state);
|
|
state.pendingcb--;
|
|
cb();
|
|
finishMaybe(stream, state);
|
|
} // Must force callback to be called on nextTick, so that we don't
|
|
// emit 'drain' before the write() consumer gets the 'false' return
|
|
// value, and has a chance to attach a 'drain' listener.
|
|
|
|
|
|
function onwriteDrain(stream, state) {
|
|
if (state.length === 0 && state.needDrain) {
|
|
state.needDrain = false;
|
|
stream.emit('drain');
|
|
}
|
|
} // if there's something in the buffer waiting, then process it
|
|
|
|
|
|
function clearBuffer(stream, state) {
|
|
state.bufferProcessing = true;
|
|
var entry = state.bufferedRequest;
|
|
|
|
if (stream._writev && entry && entry.next) {
|
|
// Fast case, write everything using _writev()
|
|
var l = state.bufferedRequestCount;
|
|
var buffer = new Array(l);
|
|
var holder = state.corkedRequestsFree;
|
|
holder.entry = entry;
|
|
var count = 0;
|
|
var allBuffers = true;
|
|
|
|
while (entry) {
|
|
buffer[count] = entry;
|
|
if (!entry.isBuf) allBuffers = false;
|
|
entry = entry.next;
|
|
count += 1;
|
|
}
|
|
|
|
buffer.allBuffers = allBuffers;
|
|
doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time
|
|
// as the hot path ends with doWrite
|
|
|
|
state.pendingcb++;
|
|
state.lastBufferedRequest = null;
|
|
|
|
if (holder.next) {
|
|
state.corkedRequestsFree = holder.next;
|
|
holder.next = null;
|
|
} else {
|
|
state.corkedRequestsFree = new CorkedRequest(state);
|
|
}
|
|
|
|
state.bufferedRequestCount = 0;
|
|
} else {
|
|
// Slow case, write chunks one-by-one
|
|
while (entry) {
|
|
var chunk = entry.chunk;
|
|
var encoding = entry.encoding;
|
|
var cb = entry.callback;
|
|
var len = state.objectMode ? 1 : chunk.length;
|
|
doWrite(stream, state, false, len, chunk, encoding, cb);
|
|
entry = entry.next;
|
|
state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then
|
|
// it means that we need to wait until it does.
|
|
// also, that means that the chunk and cb are currently
|
|
// being processed, so move the buffer counter past them.
|
|
|
|
if (state.writing) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (entry === null) state.lastBufferedRequest = null;
|
|
}
|
|
|
|
state.bufferedRequest = entry;
|
|
state.bufferProcessing = false;
|
|
}
|
|
|
|
Writable.prototype._write = function (chunk, encoding, cb) {
|
|
cb(new Error('_write() is not implemented'));
|
|
};
|
|
|
|
Writable.prototype._writev = null;
|
|
|
|
Writable.prototype.end = function (chunk, encoding, cb) {
|
|
var state = this._writableState;
|
|
|
|
if (typeof chunk === 'function') {
|
|
cb = chunk;
|
|
chunk = null;
|
|
encoding = null;
|
|
} else if (typeof encoding === 'function') {
|
|
cb = encoding;
|
|
encoding = null;
|
|
}
|
|
|
|
if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks
|
|
|
|
if (state.corked) {
|
|
state.corked = 1;
|
|
this.uncork();
|
|
} // ignore unnecessary end() calls.
|
|
|
|
|
|
if (!state.ending && !state.finished) endWritable(this, state, cb);
|
|
};
|
|
|
|
function needFinish(state) {
|
|
return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
|
|
}
|
|
|
|
function callFinal(stream, state) {
|
|
stream._final(function (err) {
|
|
state.pendingcb--;
|
|
|
|
if (err) {
|
|
stream.emit('error', err);
|
|
}
|
|
|
|
state.prefinished = true;
|
|
stream.emit('prefinish');
|
|
finishMaybe(stream, state);
|
|
});
|
|
}
|
|
|
|
function prefinish(stream, state) {
|
|
if (!state.prefinished && !state.finalCalled) {
|
|
if (typeof stream._final === 'function') {
|
|
state.pendingcb++;
|
|
state.finalCalled = true;
|
|
pna.nextTick(callFinal, stream, state);
|
|
} else {
|
|
state.prefinished = true;
|
|
stream.emit('prefinish');
|
|
}
|
|
}
|
|
}
|
|
|
|
function finishMaybe(stream, state) {
|
|
var need = needFinish(state);
|
|
|
|
if (need) {
|
|
prefinish(stream, state);
|
|
|
|
if (state.pendingcb === 0) {
|
|
state.finished = true;
|
|
stream.emit('finish');
|
|
}
|
|
}
|
|
|
|
return need;
|
|
}
|
|
|
|
function endWritable(stream, state, cb) {
|
|
state.ending = true;
|
|
finishMaybe(stream, state);
|
|
|
|
if (cb) {
|
|
if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
|
|
}
|
|
|
|
state.ended = true;
|
|
stream.writable = false;
|
|
}
|
|
|
|
function onCorkedFinish(corkReq, state, err) {
|
|
var entry = corkReq.entry;
|
|
corkReq.entry = null;
|
|
|
|
while (entry) {
|
|
var cb = entry.callback;
|
|
state.pendingcb--;
|
|
cb(err);
|
|
entry = entry.next;
|
|
}
|
|
|
|
if (state.corkedRequestsFree) {
|
|
state.corkedRequestsFree.next = corkReq;
|
|
} else {
|
|
state.corkedRequestsFree = corkReq;
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(Writable.prototype, 'destroyed', {
|
|
get: function () {
|
|
if (this._writableState === undefined) {
|
|
return false;
|
|
}
|
|
|
|
return this._writableState.destroyed;
|
|
},
|
|
set: function (value) {
|
|
// we ignore the value if the stream
|
|
// has not been initialized yet
|
|
if (!this._writableState) {
|
|
return;
|
|
} // backward compatibility, the user is explicitly
|
|
// managing destroyed
|
|
|
|
|
|
this._writableState.destroyed = value;
|
|
}
|
|
});
|
|
Writable.prototype.destroy = destroyImpl.destroy;
|
|
Writable.prototype._undestroy = destroyImpl.undestroy;
|
|
|
|
Writable.prototype._destroy = function (err, cb) {
|
|
this.end();
|
|
cb(err);
|
|
};
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../timers-browserify/main.js */ "./node_modules/timers-browserify/main.js").setImmediate, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/lib/internal/streams/BufferList.js":
|
|
/*!*************************************************************************!*\
|
|
!*** ./node_modules/readable-stream/lib/internal/streams/BufferList.js ***!
|
|
\*************************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
function _classCallCheck(instance, Constructor) {
|
|
if (!(instance instanceof Constructor)) {
|
|
throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
}
|
|
|
|
var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer;
|
|
|
|
var util = __webpack_require__(/*! util */ 1);
|
|
|
|
function copyBuffer(src, target, offset) {
|
|
src.copy(target, offset);
|
|
}
|
|
|
|
module.exports = function () {
|
|
function BufferList() {
|
|
_classCallCheck(this, BufferList);
|
|
|
|
this.head = null;
|
|
this.tail = null;
|
|
this.length = 0;
|
|
}
|
|
|
|
BufferList.prototype.push = function push(v) {
|
|
var entry = {
|
|
data: v,
|
|
next: null
|
|
};
|
|
if (this.length > 0) this.tail.next = entry;else this.head = entry;
|
|
this.tail = entry;
|
|
++this.length;
|
|
};
|
|
|
|
BufferList.prototype.unshift = function unshift(v) {
|
|
var entry = {
|
|
data: v,
|
|
next: this.head
|
|
};
|
|
if (this.length === 0) this.tail = entry;
|
|
this.head = entry;
|
|
++this.length;
|
|
};
|
|
|
|
BufferList.prototype.shift = function shift() {
|
|
if (this.length === 0) return;
|
|
var ret = this.head.data;
|
|
if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
|
|
--this.length;
|
|
return ret;
|
|
};
|
|
|
|
BufferList.prototype.clear = function clear() {
|
|
this.head = this.tail = null;
|
|
this.length = 0;
|
|
};
|
|
|
|
BufferList.prototype.join = function join(s) {
|
|
if (this.length === 0) return '';
|
|
var p = this.head;
|
|
var ret = '' + p.data;
|
|
|
|
while (p = p.next) {
|
|
ret += s + p.data;
|
|
}
|
|
|
|
return ret;
|
|
};
|
|
|
|
BufferList.prototype.concat = function concat(n) {
|
|
if (this.length === 0) return Buffer.alloc(0);
|
|
if (this.length === 1) return this.head.data;
|
|
var ret = Buffer.allocUnsafe(n >>> 0);
|
|
var p = this.head;
|
|
var i = 0;
|
|
|
|
while (p) {
|
|
copyBuffer(p.data, ret, i);
|
|
i += p.data.length;
|
|
p = p.next;
|
|
}
|
|
|
|
return ret;
|
|
};
|
|
|
|
return BufferList;
|
|
}();
|
|
|
|
if (util && util.inspect && util.inspect.custom) {
|
|
module.exports.prototype[util.inspect.custom] = function () {
|
|
var obj = util.inspect({
|
|
length: this.length
|
|
});
|
|
return this.constructor.name + ' ' + obj;
|
|
};
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/lib/internal/streams/destroy.js":
|
|
/*!**********************************************************************!*\
|
|
!*** ./node_modules/readable-stream/lib/internal/streams/destroy.js ***!
|
|
\**********************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*<replacement>*/
|
|
|
|
var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js");
|
|
/*</replacement>*/
|
|
// undocumented cb() API, needed for core, not for public API
|
|
|
|
|
|
function destroy(err, cb) {
|
|
var _this = this;
|
|
|
|
var readableDestroyed = this._readableState && this._readableState.destroyed;
|
|
var writableDestroyed = this._writableState && this._writableState.destroyed;
|
|
|
|
if (readableDestroyed || writableDestroyed) {
|
|
if (cb) {
|
|
cb(err);
|
|
} else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
|
|
pna.nextTick(emitErrorNT, this, err);
|
|
}
|
|
|
|
return this;
|
|
} // we set destroyed to true before firing error callbacks in order
|
|
// to make it re-entrance safe in case destroy() is called within callbacks
|
|
|
|
|
|
if (this._readableState) {
|
|
this._readableState.destroyed = true;
|
|
} // if this is a duplex stream mark the writable part as destroyed as well
|
|
|
|
|
|
if (this._writableState) {
|
|
this._writableState.destroyed = true;
|
|
}
|
|
|
|
this._destroy(err || null, function (err) {
|
|
if (!cb && err) {
|
|
pna.nextTick(emitErrorNT, _this, err);
|
|
|
|
if (_this._writableState) {
|
|
_this._writableState.errorEmitted = true;
|
|
}
|
|
} else if (cb) {
|
|
cb(err);
|
|
}
|
|
});
|
|
|
|
return this;
|
|
}
|
|
|
|
function undestroy() {
|
|
if (this._readableState) {
|
|
this._readableState.destroyed = false;
|
|
this._readableState.reading = false;
|
|
this._readableState.ended = false;
|
|
this._readableState.endEmitted = false;
|
|
}
|
|
|
|
if (this._writableState) {
|
|
this._writableState.destroyed = false;
|
|
this._writableState.ended = false;
|
|
this._writableState.ending = false;
|
|
this._writableState.finished = false;
|
|
this._writableState.errorEmitted = false;
|
|
}
|
|
}
|
|
|
|
function emitErrorNT(self, err) {
|
|
self.emit('error', err);
|
|
}
|
|
|
|
module.exports = {
|
|
destroy: destroy,
|
|
undestroy: undestroy
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js":
|
|
/*!*****************************************************************************!*\
|
|
!*** ./node_modules/readable-stream/lib/internal/streams/stream-browser.js ***!
|
|
\*****************************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(/*! events */ "./node_modules/events/events.js").EventEmitter;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/passthrough.js":
|
|
/*!*****************************************************!*\
|
|
!*** ./node_modules/readable-stream/passthrough.js ***!
|
|
\*****************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(/*! ./readable */ "./node_modules/readable-stream/readable-browser.js").PassThrough;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/readable-browser.js":
|
|
/*!**********************************************************!*\
|
|
!*** ./node_modules/readable-stream/readable-browser.js ***!
|
|
\**********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
exports = module.exports = __webpack_require__(/*! ./lib/_stream_readable.js */ "./node_modules/readable-stream/lib/_stream_readable.js");
|
|
exports.Stream = exports;
|
|
exports.Readable = exports;
|
|
exports.Writable = __webpack_require__(/*! ./lib/_stream_writable.js */ "./node_modules/readable-stream/lib/_stream_writable.js");
|
|
exports.Duplex = __webpack_require__(/*! ./lib/_stream_duplex.js */ "./node_modules/readable-stream/lib/_stream_duplex.js");
|
|
exports.Transform = __webpack_require__(/*! ./lib/_stream_transform.js */ "./node_modules/readable-stream/lib/_stream_transform.js");
|
|
exports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ "./node_modules/readable-stream/lib/_stream_passthrough.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/transform.js":
|
|
/*!***************************************************!*\
|
|
!*** ./node_modules/readable-stream/transform.js ***!
|
|
\***************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(/*! ./readable */ "./node_modules/readable-stream/readable-browser.js").Transform;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/readable-stream/writable-browser.js":
|
|
/*!**********************************************************!*\
|
|
!*** ./node_modules/readable-stream/writable-browser.js ***!
|
|
\**********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(/*! ./lib/_stream_writable.js */ "./node_modules/readable-stream/lib/_stream_writable.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/safe-buffer/index.js":
|
|
/*!*******************************************!*\
|
|
!*** ./node_modules/safe-buffer/index.js ***!
|
|
\*******************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
/* eslint-disable node/no-deprecated-api */
|
|
var buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js");
|
|
|
|
var Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers
|
|
|
|
function copyProps(src, dst) {
|
|
for (var key in src) {
|
|
dst[key] = src[key];
|
|
}
|
|
}
|
|
|
|
if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
|
|
module.exports = buffer;
|
|
} else {
|
|
// Copy properties from require('buffer')
|
|
copyProps(buffer, exports);
|
|
exports.Buffer = SafeBuffer;
|
|
}
|
|
|
|
function SafeBuffer(arg, encodingOrOffset, length) {
|
|
return Buffer(arg, encodingOrOffset, length);
|
|
} // Copy static methods from Buffer
|
|
|
|
|
|
copyProps(Buffer, SafeBuffer);
|
|
|
|
SafeBuffer.from = function (arg, encodingOrOffset, length) {
|
|
if (typeof arg === 'number') {
|
|
throw new TypeError('Argument must not be a number');
|
|
}
|
|
|
|
return Buffer(arg, encodingOrOffset, length);
|
|
};
|
|
|
|
SafeBuffer.alloc = function (size, fill, encoding) {
|
|
if (typeof size !== 'number') {
|
|
throw new TypeError('Argument must be a number');
|
|
}
|
|
|
|
var buf = Buffer(size);
|
|
|
|
if (fill !== undefined) {
|
|
if (typeof encoding === 'string') {
|
|
buf.fill(fill, encoding);
|
|
} else {
|
|
buf.fill(fill);
|
|
}
|
|
} else {
|
|
buf.fill(0);
|
|
}
|
|
|
|
return buf;
|
|
};
|
|
|
|
SafeBuffer.allocUnsafe = function (size) {
|
|
if (typeof size !== 'number') {
|
|
throw new TypeError('Argument must be a number');
|
|
}
|
|
|
|
return Buffer(size);
|
|
};
|
|
|
|
SafeBuffer.allocUnsafeSlow = function (size) {
|
|
if (typeof size !== 'number') {
|
|
throw new TypeError('Argument must be a number');
|
|
}
|
|
|
|
return buffer.SlowBuffer(size);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/setimmediate/setImmediate.js":
|
|
/*!***************************************************!*\
|
|
!*** ./node_modules/setimmediate/setImmediate.js ***!
|
|
\***************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
|
|
"use strict";
|
|
|
|
if (global.setImmediate) {
|
|
return;
|
|
}
|
|
|
|
var nextHandle = 1; // Spec says greater than zero
|
|
|
|
var tasksByHandle = {};
|
|
var currentlyRunningATask = false;
|
|
var doc = global.document;
|
|
var registerImmediate;
|
|
|
|
function setImmediate(callback) {
|
|
// Callback can either be a function or a string
|
|
if (typeof callback !== "function") {
|
|
callback = new Function("" + callback);
|
|
} // Copy function arguments
|
|
|
|
|
|
var args = new Array(arguments.length - 1);
|
|
|
|
for (var i = 0; i < args.length; i++) {
|
|
args[i] = arguments[i + 1];
|
|
} // Store and register the task
|
|
|
|
|
|
var task = {
|
|
callback: callback,
|
|
args: args
|
|
};
|
|
tasksByHandle[nextHandle] = task;
|
|
registerImmediate(nextHandle);
|
|
return nextHandle++;
|
|
}
|
|
|
|
function clearImmediate(handle) {
|
|
delete tasksByHandle[handle];
|
|
}
|
|
|
|
function run(task) {
|
|
var callback = task.callback;
|
|
var args = task.args;
|
|
|
|
switch (args.length) {
|
|
case 0:
|
|
callback();
|
|
break;
|
|
|
|
case 1:
|
|
callback(args[0]);
|
|
break;
|
|
|
|
case 2:
|
|
callback(args[0], args[1]);
|
|
break;
|
|
|
|
case 3:
|
|
callback(args[0], args[1], args[2]);
|
|
break;
|
|
|
|
default:
|
|
callback.apply(undefined, args);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function runIfPresent(handle) {
|
|
// From the spec: "Wait until any invocations of this algorithm started before this one have completed."
|
|
// So if we're currently running a task, we'll need to delay this invocation.
|
|
if (currentlyRunningATask) {
|
|
// Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
|
|
// "too much recursion" error.
|
|
setTimeout(runIfPresent, 0, handle);
|
|
} else {
|
|
var task = tasksByHandle[handle];
|
|
|
|
if (task) {
|
|
currentlyRunningATask = true;
|
|
|
|
try {
|
|
run(task);
|
|
} finally {
|
|
clearImmediate(handle);
|
|
currentlyRunningATask = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function installNextTickImplementation() {
|
|
registerImmediate = function (handle) {
|
|
process.nextTick(function () {
|
|
runIfPresent(handle);
|
|
});
|
|
};
|
|
}
|
|
|
|
function canUsePostMessage() {
|
|
// The test against `importScripts` prevents this implementation from being installed inside a web worker,
|
|
// where `global.postMessage` means something completely different and can't be used for this purpose.
|
|
if (global.postMessage && !global.importScripts) {
|
|
var postMessageIsAsynchronous = true;
|
|
var oldOnMessage = global.onmessage;
|
|
|
|
global.onmessage = function () {
|
|
postMessageIsAsynchronous = false;
|
|
};
|
|
|
|
global.postMessage("", "*");
|
|
global.onmessage = oldOnMessage;
|
|
return postMessageIsAsynchronous;
|
|
}
|
|
}
|
|
|
|
function installPostMessageImplementation() {
|
|
// Installs an event handler on `global` for the `message` event: see
|
|
// * https://developer.mozilla.org/en/DOM/window.postMessage
|
|
// * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
|
|
var messagePrefix = "setImmediate$" + Math.random() + "$";
|
|
|
|
var onGlobalMessage = function (event) {
|
|
if (event.source === global && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) {
|
|
runIfPresent(+event.data.slice(messagePrefix.length));
|
|
}
|
|
};
|
|
|
|
if (global.addEventListener) {
|
|
global.addEventListener("message", onGlobalMessage, false);
|
|
} else {
|
|
global.attachEvent("onmessage", onGlobalMessage);
|
|
}
|
|
|
|
registerImmediate = function (handle) {
|
|
global.postMessage(messagePrefix + handle, "*");
|
|
};
|
|
}
|
|
|
|
function installMessageChannelImplementation() {
|
|
var channel = new MessageChannel();
|
|
|
|
channel.port1.onmessage = function (event) {
|
|
var handle = event.data;
|
|
runIfPresent(handle);
|
|
};
|
|
|
|
registerImmediate = function (handle) {
|
|
channel.port2.postMessage(handle);
|
|
};
|
|
}
|
|
|
|
function installReadyStateChangeImplementation() {
|
|
var html = doc.documentElement;
|
|
|
|
registerImmediate = function (handle) {
|
|
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
|
|
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
|
|
var script = doc.createElement("script");
|
|
|
|
script.onreadystatechange = function () {
|
|
runIfPresent(handle);
|
|
script.onreadystatechange = null;
|
|
html.removeChild(script);
|
|
script = null;
|
|
};
|
|
|
|
html.appendChild(script);
|
|
};
|
|
}
|
|
|
|
function installSetTimeoutImplementation() {
|
|
registerImmediate = function (handle) {
|
|
setTimeout(runIfPresent, 0, handle);
|
|
};
|
|
} // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
|
|
|
|
|
|
var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
|
|
attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments.
|
|
|
|
if ({}.toString.call(global.process) === "[object process]") {
|
|
// For Node.js before 0.9
|
|
installNextTickImplementation();
|
|
} else if (canUsePostMessage()) {
|
|
// For non-IE10 modern browsers
|
|
installPostMessageImplementation();
|
|
} else if (global.MessageChannel) {
|
|
// For web workers, where supported
|
|
installMessageChannelImplementation();
|
|
} else if (doc && "onreadystatechange" in doc.createElement("script")) {
|
|
// For IE 6¿8
|
|
installReadyStateChangeImplementation();
|
|
} else {
|
|
// For older browsers
|
|
installSetTimeoutImplementation();
|
|
}
|
|
|
|
attachTo.setImmediate = setImmediate;
|
|
attachTo.clearImmediate = clearImmediate;
|
|
})(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self);
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js")))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/stream-browserify/index.js":
|
|
/*!*************************************************!*\
|
|
!*** ./node_modules/stream-browserify/index.js ***!
|
|
\*************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
module.exports = Stream;
|
|
|
|
var EE = __webpack_require__(/*! events */ "./node_modules/events/events.js").EventEmitter;
|
|
|
|
var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js");
|
|
|
|
inherits(Stream, EE);
|
|
Stream.Readable = __webpack_require__(/*! readable-stream/readable.js */ "./node_modules/readable-stream/readable-browser.js");
|
|
Stream.Writable = __webpack_require__(/*! readable-stream/writable.js */ "./node_modules/readable-stream/writable-browser.js");
|
|
Stream.Duplex = __webpack_require__(/*! readable-stream/duplex.js */ "./node_modules/readable-stream/duplex-browser.js");
|
|
Stream.Transform = __webpack_require__(/*! readable-stream/transform.js */ "./node_modules/readable-stream/transform.js");
|
|
Stream.PassThrough = __webpack_require__(/*! readable-stream/passthrough.js */ "./node_modules/readable-stream/passthrough.js"); // Backwards-compat with node 0.4.x
|
|
|
|
Stream.Stream = Stream; // old-style streams. Note that the pipe method (the only relevant
|
|
// part of this class) is overridden in the Readable class.
|
|
|
|
function Stream() {
|
|
EE.call(this);
|
|
}
|
|
|
|
Stream.prototype.pipe = function (dest, options) {
|
|
var source = this;
|
|
|
|
function ondata(chunk) {
|
|
if (dest.writable) {
|
|
if (false === dest.write(chunk) && source.pause) {
|
|
source.pause();
|
|
}
|
|
}
|
|
}
|
|
|
|
source.on('data', ondata);
|
|
|
|
function ondrain() {
|
|
if (source.readable && source.resume) {
|
|
source.resume();
|
|
}
|
|
}
|
|
|
|
dest.on('drain', ondrain); // If the 'end' option is not supplied, dest.end() will be called when
|
|
// source gets the 'end' or 'close' events. Only dest.end() once.
|
|
|
|
if (!dest._isStdio && (!options || options.end !== false)) {
|
|
source.on('end', onend);
|
|
source.on('close', onclose);
|
|
}
|
|
|
|
var didOnEnd = false;
|
|
|
|
function onend() {
|
|
if (didOnEnd) return;
|
|
didOnEnd = true;
|
|
dest.end();
|
|
}
|
|
|
|
function onclose() {
|
|
if (didOnEnd) return;
|
|
didOnEnd = true;
|
|
if (typeof dest.destroy === 'function') dest.destroy();
|
|
} // don't leave dangling pipes when there are errors.
|
|
|
|
|
|
function onerror(er) {
|
|
cleanup();
|
|
|
|
if (EE.listenerCount(this, 'error') === 0) {
|
|
throw er; // Unhandled stream error in pipe.
|
|
}
|
|
}
|
|
|
|
source.on('error', onerror);
|
|
dest.on('error', onerror); // remove all the event listeners that were added.
|
|
|
|
function cleanup() {
|
|
source.removeListener('data', ondata);
|
|
dest.removeListener('drain', ondrain);
|
|
source.removeListener('end', onend);
|
|
source.removeListener('close', onclose);
|
|
source.removeListener('error', onerror);
|
|
dest.removeListener('error', onerror);
|
|
source.removeListener('end', cleanup);
|
|
source.removeListener('close', cleanup);
|
|
dest.removeListener('close', cleanup);
|
|
}
|
|
|
|
source.on('end', cleanup);
|
|
source.on('close', cleanup);
|
|
dest.on('close', cleanup);
|
|
dest.emit('pipe', source); // Allow for unix-like usage: A.pipe(B).pipe(C)
|
|
|
|
return dest;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/string_decoder/lib/string_decoder.js":
|
|
/*!***********************************************************!*\
|
|
!*** ./node_modules/string_decoder/lib/string_decoder.js ***!
|
|
\***********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
/*<replacement>*/
|
|
|
|
var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer;
|
|
/*</replacement>*/
|
|
|
|
|
|
var isEncoding = Buffer.isEncoding || function (encoding) {
|
|
encoding = '' + encoding;
|
|
|
|
switch (encoding && encoding.toLowerCase()) {
|
|
case 'hex':
|
|
case 'utf8':
|
|
case 'utf-8':
|
|
case 'ascii':
|
|
case 'binary':
|
|
case 'base64':
|
|
case 'ucs2':
|
|
case 'ucs-2':
|
|
case 'utf16le':
|
|
case 'utf-16le':
|
|
case 'raw':
|
|
return true;
|
|
|
|
default:
|
|
return false;
|
|
}
|
|
};
|
|
|
|
function _normalizeEncoding(enc) {
|
|
if (!enc) return 'utf8';
|
|
var retried;
|
|
|
|
while (true) {
|
|
switch (enc) {
|
|
case 'utf8':
|
|
case 'utf-8':
|
|
return 'utf8';
|
|
|
|
case 'ucs2':
|
|
case 'ucs-2':
|
|
case 'utf16le':
|
|
case 'utf-16le':
|
|
return 'utf16le';
|
|
|
|
case 'latin1':
|
|
case 'binary':
|
|
return 'latin1';
|
|
|
|
case 'base64':
|
|
case 'ascii':
|
|
case 'hex':
|
|
return enc;
|
|
|
|
default:
|
|
if (retried) return; // undefined
|
|
|
|
enc = ('' + enc).toLowerCase();
|
|
retried = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
; // Do not cache `Buffer.isEncoding` when checking encoding names as some
|
|
// modules monkey-patch it to support additional encodings
|
|
|
|
function normalizeEncoding(enc) {
|
|
var nenc = _normalizeEncoding(enc);
|
|
|
|
if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
|
|
return nenc || enc;
|
|
} // StringDecoder provides an interface for efficiently splitting a series of
|
|
// buffers into a series of JS strings without breaking apart multi-byte
|
|
// characters.
|
|
|
|
|
|
exports.StringDecoder = StringDecoder;
|
|
|
|
function StringDecoder(encoding) {
|
|
this.encoding = normalizeEncoding(encoding);
|
|
var nb;
|
|
|
|
switch (this.encoding) {
|
|
case 'utf16le':
|
|
this.text = utf16Text;
|
|
this.end = utf16End;
|
|
nb = 4;
|
|
break;
|
|
|
|
case 'utf8':
|
|
this.fillLast = utf8FillLast;
|
|
nb = 4;
|
|
break;
|
|
|
|
case 'base64':
|
|
this.text = base64Text;
|
|
this.end = base64End;
|
|
nb = 3;
|
|
break;
|
|
|
|
default:
|
|
this.write = simpleWrite;
|
|
this.end = simpleEnd;
|
|
return;
|
|
}
|
|
|
|
this.lastNeed = 0;
|
|
this.lastTotal = 0;
|
|
this.lastChar = Buffer.allocUnsafe(nb);
|
|
}
|
|
|
|
StringDecoder.prototype.write = function (buf) {
|
|
if (buf.length === 0) return '';
|
|
var r;
|
|
var i;
|
|
|
|
if (this.lastNeed) {
|
|
r = this.fillLast(buf);
|
|
if (r === undefined) return '';
|
|
i = this.lastNeed;
|
|
this.lastNeed = 0;
|
|
} else {
|
|
i = 0;
|
|
}
|
|
|
|
if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
|
|
return r || '';
|
|
};
|
|
|
|
StringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer
|
|
|
|
StringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
|
|
|
|
StringDecoder.prototype.fillLast = function (buf) {
|
|
if (this.lastNeed <= buf.length) {
|
|
buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
|
|
return this.lastChar.toString(this.encoding, 0, this.lastTotal);
|
|
}
|
|
|
|
buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
|
|
this.lastNeed -= buf.length;
|
|
}; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
|
|
// continuation byte. If an invalid byte is detected, -2 is returned.
|
|
|
|
|
|
function utf8CheckByte(byte) {
|
|
if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
|
|
return byte >> 6 === 0x02 ? -1 : -2;
|
|
} // Checks at most 3 bytes at the end of a Buffer in order to detect an
|
|
// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
|
|
// needed to complete the UTF-8 character (if applicable) are returned.
|
|
|
|
|
|
function utf8CheckIncomplete(self, buf, i) {
|
|
var j = buf.length - 1;
|
|
if (j < i) return 0;
|
|
var nb = utf8CheckByte(buf[j]);
|
|
|
|
if (nb >= 0) {
|
|
if (nb > 0) self.lastNeed = nb - 1;
|
|
return nb;
|
|
}
|
|
|
|
if (--j < i || nb === -2) return 0;
|
|
nb = utf8CheckByte(buf[j]);
|
|
|
|
if (nb >= 0) {
|
|
if (nb > 0) self.lastNeed = nb - 2;
|
|
return nb;
|
|
}
|
|
|
|
if (--j < i || nb === -2) return 0;
|
|
nb = utf8CheckByte(buf[j]);
|
|
|
|
if (nb >= 0) {
|
|
if (nb > 0) {
|
|
if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
|
|
}
|
|
|
|
return nb;
|
|
}
|
|
|
|
return 0;
|
|
} // Validates as many continuation bytes for a multi-byte UTF-8 character as
|
|
// needed or are available. If we see a non-continuation byte where we expect
|
|
// one, we "replace" the validated continuation bytes we've seen so far with
|
|
// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
|
|
// behavior. The continuation byte check is included three times in the case
|
|
// where all of the continuation bytes for a character exist in the same buffer.
|
|
// It is also done this way as a slight performance increase instead of using a
|
|
// loop.
|
|
|
|
|
|
function utf8CheckExtraBytes(self, buf, p) {
|
|
if ((buf[0] & 0xC0) !== 0x80) {
|
|
self.lastNeed = 0;
|
|
return '\ufffd';
|
|
}
|
|
|
|
if (self.lastNeed > 1 && buf.length > 1) {
|
|
if ((buf[1] & 0xC0) !== 0x80) {
|
|
self.lastNeed = 1;
|
|
return '\ufffd';
|
|
}
|
|
|
|
if (self.lastNeed > 2 && buf.length > 2) {
|
|
if ((buf[2] & 0xC0) !== 0x80) {
|
|
self.lastNeed = 2;
|
|
return '\ufffd';
|
|
}
|
|
}
|
|
}
|
|
} // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
|
|
|
|
|
|
function utf8FillLast(buf) {
|
|
var p = this.lastTotal - this.lastNeed;
|
|
var r = utf8CheckExtraBytes(this, buf, p);
|
|
if (r !== undefined) return r;
|
|
|
|
if (this.lastNeed <= buf.length) {
|
|
buf.copy(this.lastChar, p, 0, this.lastNeed);
|
|
return this.lastChar.toString(this.encoding, 0, this.lastTotal);
|
|
}
|
|
|
|
buf.copy(this.lastChar, p, 0, buf.length);
|
|
this.lastNeed -= buf.length;
|
|
} // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
|
|
// partial character, the character's bytes are buffered until the required
|
|
// number of bytes are available.
|
|
|
|
|
|
function utf8Text(buf, i) {
|
|
var total = utf8CheckIncomplete(this, buf, i);
|
|
if (!this.lastNeed) return buf.toString('utf8', i);
|
|
this.lastTotal = total;
|
|
var end = buf.length - (total - this.lastNeed);
|
|
buf.copy(this.lastChar, 0, end);
|
|
return buf.toString('utf8', i, end);
|
|
} // For UTF-8, a replacement character is added when ending on a partial
|
|
// character.
|
|
|
|
|
|
function utf8End(buf) {
|
|
var r = buf && buf.length ? this.write(buf) : '';
|
|
if (this.lastNeed) return r + '\ufffd';
|
|
return r;
|
|
} // UTF-16LE typically needs two bytes per character, but even if we have an even
|
|
// number of bytes available, we need to check if we end on a leading/high
|
|
// surrogate. In that case, we need to wait for the next two bytes in order to
|
|
// decode the last character properly.
|
|
|
|
|
|
function utf16Text(buf, i) {
|
|
if ((buf.length - i) % 2 === 0) {
|
|
var r = buf.toString('utf16le', i);
|
|
|
|
if (r) {
|
|
var c = r.charCodeAt(r.length - 1);
|
|
|
|
if (c >= 0xD800 && c <= 0xDBFF) {
|
|
this.lastNeed = 2;
|
|
this.lastTotal = 4;
|
|
this.lastChar[0] = buf[buf.length - 2];
|
|
this.lastChar[1] = buf[buf.length - 1];
|
|
return r.slice(0, -1);
|
|
}
|
|
}
|
|
|
|
return r;
|
|
}
|
|
|
|
this.lastNeed = 1;
|
|
this.lastTotal = 2;
|
|
this.lastChar[0] = buf[buf.length - 1];
|
|
return buf.toString('utf16le', i, buf.length - 1);
|
|
} // For UTF-16LE we do not explicitly append special replacement characters if we
|
|
// end on a partial character, we simply let v8 handle that.
|
|
|
|
|
|
function utf16End(buf) {
|
|
var r = buf && buf.length ? this.write(buf) : '';
|
|
|
|
if (this.lastNeed) {
|
|
var end = this.lastTotal - this.lastNeed;
|
|
return r + this.lastChar.toString('utf16le', 0, end);
|
|
}
|
|
|
|
return r;
|
|
}
|
|
|
|
function base64Text(buf, i) {
|
|
var n = (buf.length - i) % 3;
|
|
if (n === 0) return buf.toString('base64', i);
|
|
this.lastNeed = 3 - n;
|
|
this.lastTotal = 3;
|
|
|
|
if (n === 1) {
|
|
this.lastChar[0] = buf[buf.length - 1];
|
|
} else {
|
|
this.lastChar[0] = buf[buf.length - 2];
|
|
this.lastChar[1] = buf[buf.length - 1];
|
|
}
|
|
|
|
return buf.toString('base64', i, buf.length - n);
|
|
}
|
|
|
|
function base64End(buf) {
|
|
var r = buf && buf.length ? this.write(buf) : '';
|
|
if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
|
|
return r;
|
|
} // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
|
|
|
|
|
|
function simpleWrite(buf) {
|
|
return buf.toString(this.encoding);
|
|
}
|
|
|
|
function simpleEnd(buf) {
|
|
return buf && buf.length ? this.write(buf) : '';
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/timers-browserify/main.js":
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/timers-browserify/main.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
/* WEBPACK VAR INJECTION */(function(global) {var scope = typeof global !== "undefined" && global || typeof self !== "undefined" && self || window;
|
|
var apply = Function.prototype.apply; // DOM APIs, for completeness
|
|
|
|
exports.setTimeout = function () {
|
|
return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
|
|
};
|
|
|
|
exports.setInterval = function () {
|
|
return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
|
|
};
|
|
|
|
exports.clearTimeout = exports.clearInterval = function (timeout) {
|
|
if (timeout) {
|
|
timeout.close();
|
|
}
|
|
};
|
|
|
|
function Timeout(id, clearFn) {
|
|
this._id = id;
|
|
this._clearFn = clearFn;
|
|
}
|
|
|
|
Timeout.prototype.unref = Timeout.prototype.ref = function () {};
|
|
|
|
Timeout.prototype.close = function () {
|
|
this._clearFn.call(scope, this._id);
|
|
}; // Does not start the time, just sets up the members needed.
|
|
|
|
|
|
exports.enroll = function (item, msecs) {
|
|
clearTimeout(item._idleTimeoutId);
|
|
item._idleTimeout = msecs;
|
|
};
|
|
|
|
exports.unenroll = function (item) {
|
|
clearTimeout(item._idleTimeoutId);
|
|
item._idleTimeout = -1;
|
|
};
|
|
|
|
exports._unrefActive = exports.active = function (item) {
|
|
clearTimeout(item._idleTimeoutId);
|
|
var msecs = item._idleTimeout;
|
|
|
|
if (msecs >= 0) {
|
|
item._idleTimeoutId = setTimeout(function onTimeout() {
|
|
if (item._onTimeout) item._onTimeout();
|
|
}, msecs);
|
|
}
|
|
}; // setimmediate attaches itself to the global object
|
|
|
|
|
|
__webpack_require__(/*! setimmediate */ "./node_modules/setimmediate/setImmediate.js"); // On some exotic environments, it's not clear which object `setimmediate` was
|
|
// able to install onto. Search each possibility in the same order as the
|
|
// `setimmediate` library.
|
|
|
|
|
|
exports.setImmediate = typeof self !== "undefined" && self.setImmediate || typeof global !== "undefined" && global.setImmediate || this && this.setImmediate;
|
|
exports.clearImmediate = typeof self !== "undefined" && self.clearImmediate || typeof global !== "undefined" && global.clearImmediate || this && this.clearImmediate;
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/util-deprecate/browser.js":
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/util-deprecate/browser.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
/* WEBPACK VAR INJECTION */(function(global) {/**
|
|
* Module exports.
|
|
*/
|
|
module.exports = deprecate;
|
|
/**
|
|
* Mark that a method should not be used.
|
|
* Returns a modified function which warns once by default.
|
|
*
|
|
* If `localStorage.noDeprecation = true` is set, then it is a no-op.
|
|
*
|
|
* If `localStorage.throwDeprecation = true` is set, then deprecated functions
|
|
* will throw an Error when invoked.
|
|
*
|
|
* If `localStorage.traceDeprecation = true` is set, then deprecated functions
|
|
* will invoke `console.trace()` instead of `console.error()`.
|
|
*
|
|
* @param {Function} fn - the function to deprecate
|
|
* @param {String} msg - the string to print to the console when `fn` is invoked
|
|
* @returns {Function} a new "deprecated" version of `fn`
|
|
* @api public
|
|
*/
|
|
|
|
function deprecate(fn, msg) {
|
|
if (config('noDeprecation')) {
|
|
return fn;
|
|
}
|
|
|
|
var warned = false;
|
|
|
|
function deprecated() {
|
|
if (!warned) {
|
|
if (config('throwDeprecation')) {
|
|
throw new Error(msg);
|
|
} else if (config('traceDeprecation')) {
|
|
console.trace(msg);
|
|
} else {
|
|
console.warn(msg);
|
|
}
|
|
|
|
warned = true;
|
|
}
|
|
|
|
return fn.apply(this, arguments);
|
|
}
|
|
|
|
return deprecated;
|
|
}
|
|
/**
|
|
* Checks `localStorage` for boolean values for the given `name`.
|
|
*
|
|
* @param {String} name
|
|
* @returns {Boolean}
|
|
* @api private
|
|
*/
|
|
|
|
|
|
function config(name) {
|
|
// accessing global.localStorage can trigger a DOMException in sandboxed iframes
|
|
try {
|
|
if (!global.localStorage) return false;
|
|
} catch (_) {
|
|
return false;
|
|
}
|
|
|
|
var val = global.localStorage[name];
|
|
if (null == val) return false;
|
|
return String(val).toLowerCase() === 'true';
|
|
}
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/web-streams-polyfill/dist/polyfill.min.js":
|
|
/*!****************************************************************!*\
|
|
!*** ./node_modules/web-streams-polyfill/dist/polyfill.min.js ***!
|
|
\****************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var require;var require;(function (f) {
|
|
if (true) {
|
|
module.exports = f();
|
|
} else { var g; }
|
|
})(function () {
|
|
var define, module, exports;
|
|
return function e(t, n, r) {
|
|
function s(o, u) {
|
|
if (!n[o]) {
|
|
if (!t[o]) {
|
|
var a = typeof require == "function" && require;
|
|
if (!u && a) return require(o, !0);
|
|
if (i) return i(o, !0);
|
|
var f = new Error("Cannot find module '" + o + "'");
|
|
throw f.code = "MODULE_NOT_FOUND", f;
|
|
}
|
|
|
|
var l = n[o] = {
|
|
exports: {}
|
|
};
|
|
t[o][0].call(l.exports, function (e) {
|
|
var n = t[o][1][e];
|
|
return s(n ? n : e);
|
|
}, l, l.exports, e, t, n, r);
|
|
}
|
|
|
|
return n[o].exports;
|
|
}
|
|
|
|
var i = typeof require == "function" && require;
|
|
|
|
for (var o = 0; o < r.length; o++) s(r[o]);
|
|
|
|
return s;
|
|
}({
|
|
1: [function (_dereq_, module, exports) {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: !0
|
|
});
|
|
|
|
var _require = _dereq_("./spec/reference-implementation/lib/readable-stream"),
|
|
ReadableStream = _require.ReadableStream,
|
|
_require2 = _dereq_("./spec/reference-implementation/lib/writable-stream"),
|
|
WritableStream = _require2.WritableStream,
|
|
ByteLengthQueuingStrategy = _dereq_("./spec/reference-implementation/lib/byte-length-queuing-strategy"),
|
|
CountQueuingStrategy = _dereq_("./spec/reference-implementation/lib/count-queuing-strategy"),
|
|
TransformStream = _dereq_("./spec/reference-implementation/lib/transform-stream").TransformStream;
|
|
|
|
exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy, exports.CountQueuingStrategy = CountQueuingStrategy, exports.TransformStream = TransformStream, exports.ReadableStream = ReadableStream, exports.WritableStream = WritableStream;
|
|
var interfaces = {
|
|
ReadableStream: ReadableStream,
|
|
WritableStream: WritableStream,
|
|
ByteLengthQueuingStrategy: ByteLengthQueuingStrategy,
|
|
CountQueuingStrategy: CountQueuingStrategy,
|
|
TransformStream: TransformStream
|
|
};
|
|
exports.default = interfaces, "undefined" != typeof window && Object.assign(window, interfaces);
|
|
}, {
|
|
"./spec/reference-implementation/lib/byte-length-queuing-strategy": 3,
|
|
"./spec/reference-implementation/lib/count-queuing-strategy": 4,
|
|
"./spec/reference-implementation/lib/readable-stream": 7,
|
|
"./spec/reference-implementation/lib/transform-stream": 8,
|
|
"./spec/reference-implementation/lib/writable-stream": 9
|
|
}],
|
|
2: [function (_dereq_, module, exports) {}, {}],
|
|
3: [function (_dereq_, module, exports) {
|
|
"use strict";
|
|
|
|
function _classCallCheck(e, r) {
|
|
if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
|
|
var _createClass = function () {
|
|
function e(e, r) {
|
|
for (var t = 0; t < r.length; t++) {
|
|
var a = r[t];
|
|
a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a);
|
|
}
|
|
}
|
|
|
|
return function (r, t, a) {
|
|
return t && e(r.prototype, t), a && e(r, a), r;
|
|
};
|
|
}(),
|
|
_require = _dereq_("./helpers.js"),
|
|
createDataProperty = _require.createDataProperty;
|
|
|
|
module.exports = function () {
|
|
function e(r) {
|
|
var t = r.highWaterMark;
|
|
_classCallCheck(this, e), createDataProperty(this, "highWaterMark", t);
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "size",
|
|
value: function (e) {
|
|
return e.byteLength;
|
|
}
|
|
}]), e;
|
|
}();
|
|
}, {
|
|
"./helpers.js": 5
|
|
}],
|
|
4: [function (_dereq_, module, exports) {
|
|
"use strict";
|
|
|
|
function _classCallCheck(e, r) {
|
|
if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
|
|
var _createClass = function () {
|
|
function e(e, r) {
|
|
for (var t = 0; t < r.length; t++) {
|
|
var a = r[t];
|
|
a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a);
|
|
}
|
|
}
|
|
|
|
return function (r, t, a) {
|
|
return t && e(r.prototype, t), a && e(r, a), r;
|
|
};
|
|
}(),
|
|
_require = _dereq_("./helpers.js"),
|
|
createDataProperty = _require.createDataProperty;
|
|
|
|
module.exports = function () {
|
|
function e(r) {
|
|
var t = r.highWaterMark;
|
|
_classCallCheck(this, e), createDataProperty(this, "highWaterMark", t);
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "size",
|
|
value: function () {
|
|
return 1;
|
|
}
|
|
}]), e;
|
|
}();
|
|
}, {
|
|
"./helpers.js": 5
|
|
}],
|
|
5: [function (_dereq_, module, exports) {
|
|
"use strict";
|
|
|
|
function _toConsumableArray(e) {
|
|
if (Array.isArray(e)) {
|
|
for (var r = 0, t = Array(e.length); r < e.length; r++) t[r] = e[r];
|
|
|
|
return t;
|
|
}
|
|
|
|
return Array.from(e);
|
|
}
|
|
|
|
function IsPropertyKey(e) {
|
|
return "string" == typeof e || "symbol" === ("undefined" == typeof e ? "undefined" : _typeof(e));
|
|
}
|
|
|
|
function Call(e, r, t) {
|
|
if ("function" != typeof e) throw new TypeError("Argument is not a function");
|
|
return Function.prototype.apply.call(e, r, t);
|
|
}
|
|
|
|
var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e;
|
|
} : function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
|
|
};
|
|
|
|
exports.typeIsObject = function (e) {
|
|
return "object" === ("undefined" == typeof e ? "undefined" : _typeof(e)) && null !== e || "function" == typeof e;
|
|
}, exports.createDataProperty = function (e, r, t) {
|
|
Object.defineProperty(e, r, {
|
|
value: t,
|
|
writable: !0,
|
|
enumerable: !0,
|
|
configurable: !0
|
|
});
|
|
}, exports.createArrayFromList = function (e) {
|
|
return e.slice();
|
|
}, exports.ArrayBufferCopy = function (e, r, t, o, n) {
|
|
new Uint8Array(e).set(new Uint8Array(t, o, n), r);
|
|
}, exports.CreateIterResultObject = function (e, r) {
|
|
var t = {};
|
|
return Object.defineProperty(t, "value", {
|
|
value: e,
|
|
enumerable: !0,
|
|
writable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "done", {
|
|
value: r,
|
|
enumerable: !0,
|
|
writable: !0,
|
|
configurable: !0
|
|
}), t;
|
|
}, exports.IsFiniteNonNegativeNumber = function (e) {
|
|
return !Number.isNaN(e) && e !== 1 / 0 && !(e < 0);
|
|
}, exports.InvokeOrNoop = function (e, r, t) {
|
|
var o = e[r];
|
|
if (void 0 !== o) return Call(o, e, t);
|
|
}, exports.PromiseInvokeOrNoop = function (e, r, t) {
|
|
try {
|
|
return Promise.resolve(exports.InvokeOrNoop(e, r, t));
|
|
} catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
}, exports.PromiseInvokeOrPerformFallback = function (e, r, t, o, n) {
|
|
var i = void 0;
|
|
|
|
try {
|
|
i = e[r];
|
|
} catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
|
|
if (void 0 === i) return o.apply(void 0, _toConsumableArray(n));
|
|
|
|
try {
|
|
return Promise.resolve(Call(i, e, t));
|
|
} catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
}, exports.PromiseInvokeOrFallbackOrNoop = function (e, r, t, o, n) {
|
|
return exports.PromiseInvokeOrPerformFallback(e, r, t, exports.PromiseInvokeOrNoop, [e, o, n]);
|
|
}, exports.SameRealmTransfer = function (e) {
|
|
return e;
|
|
}, exports.ValidateAndNormalizeHighWaterMark = function (e) {
|
|
if (e = Number(e), Number.isNaN(e) || e < 0) throw new RangeError("highWaterMark property of a queuing strategy must be non-negative and non-NaN");
|
|
return e;
|
|
}, exports.ValidateAndNormalizeQueuingStrategy = function (e, r) {
|
|
if (void 0 !== e && "function" != typeof e) throw new TypeError("size property of a queuing strategy must be a function");
|
|
return r = exports.ValidateAndNormalizeHighWaterMark(r), {
|
|
size: e,
|
|
highWaterMark: r
|
|
};
|
|
};
|
|
}, {}],
|
|
6: [function (_dereq_, module, exports) {
|
|
"use strict";
|
|
|
|
var _require = _dereq_("./helpers.js"),
|
|
IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber;
|
|
|
|
exports.DequeueValue = function (e) {
|
|
var t = e.shift();
|
|
return e._totalSize -= t.size, t.value;
|
|
}, exports.EnqueueValueWithSize = function (e, t, i) {
|
|
if (i = Number(i), !IsFiniteNonNegativeNumber(i)) throw new RangeError("Size must be a finite, non-NaN, non-negative number.");
|
|
e.push({
|
|
value: t,
|
|
size: i
|
|
}), void 0 === e._totalSize && (e._totalSize = 0), e._totalSize += i;
|
|
}, exports.GetTotalQueueSize = function (e) {
|
|
return void 0 === e._totalSize && (e._totalSize = 0), e._totalSize;
|
|
}, exports.PeekQueueValue = function (e) {
|
|
var t = e[0];
|
|
return t.value;
|
|
};
|
|
}, {
|
|
"./helpers.js": 5
|
|
}],
|
|
7: [function (_dereq_, module, exports) {
|
|
"use strict";
|
|
|
|
function _classCallCheck(e, r) {
|
|
if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
|
|
function AcquireReadableStreamBYOBReader(e) {
|
|
return new ReadableStreamBYOBReader(e);
|
|
}
|
|
|
|
function AcquireReadableStreamDefaultReader(e) {
|
|
return new ReadableStreamDefaultReader(e);
|
|
}
|
|
|
|
function IsReadableStream(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_readableStreamController");
|
|
}
|
|
|
|
function IsReadableStreamDisturbed(e) {
|
|
return e._disturbed;
|
|
}
|
|
|
|
function IsReadableStreamLocked(e) {
|
|
return void 0 !== e._reader;
|
|
}
|
|
|
|
function ReadableStreamTee(e, r) {
|
|
var t = AcquireReadableStreamDefaultReader(e),
|
|
a = {
|
|
closedOrErrored: !1,
|
|
canceled1: !1,
|
|
canceled2: !1,
|
|
reason1: void 0,
|
|
reason2: void 0
|
|
};
|
|
a.promise = new Promise(function (e) {
|
|
a._resolve = e;
|
|
});
|
|
var l = create_ReadableStreamTeePullFunction();
|
|
l._reader = t, l._teeState = a, l._cloneForBranch2 = r;
|
|
var o = create_ReadableStreamTeeBranch1CancelFunction();
|
|
o._stream = e, o._teeState = a;
|
|
var n = create_ReadableStreamTeeBranch2CancelFunction();
|
|
n._stream = e, n._teeState = a;
|
|
var i = Object.create(Object.prototype);
|
|
createDataProperty(i, "pull", l), createDataProperty(i, "cancel", o);
|
|
var d = new ReadableStream(i),
|
|
s = Object.create(Object.prototype);
|
|
createDataProperty(s, "pull", l), createDataProperty(s, "cancel", n);
|
|
var u = new ReadableStream(s);
|
|
return l._branch1 = d._readableStreamController, l._branch2 = u._readableStreamController, t._closedPromise.catch(function (e) {
|
|
a.closedOrErrored !== !0 && (ReadableStreamDefaultControllerError(l._branch1, e), ReadableStreamDefaultControllerError(l._branch2, e), a.closedOrErrored = !0);
|
|
}), [d, u];
|
|
}
|
|
|
|
function create_ReadableStreamTeePullFunction() {
|
|
function e() {
|
|
var r = e._reader,
|
|
t = e._branch1,
|
|
a = e._branch2,
|
|
l = e._teeState;
|
|
return ReadableStreamDefaultReaderRead(r).then(function (e) {
|
|
var r = e.value,
|
|
o = e.done;
|
|
|
|
if (o === !0 && l.closedOrErrored === !1 && (l.canceled1 === !1 && ReadableStreamDefaultControllerClose(t), l.canceled2 === !1 && ReadableStreamDefaultControllerClose(a), l.closedOrErrored = !0), l.closedOrErrored !== !0) {
|
|
var n = r,
|
|
i = r;
|
|
l.canceled1 === !1 && ReadableStreamDefaultControllerEnqueue(t, n), l.canceled2 === !1 && ReadableStreamDefaultControllerEnqueue(a, i);
|
|
}
|
|
});
|
|
}
|
|
|
|
return e;
|
|
}
|
|
|
|
function create_ReadableStreamTeeBranch1CancelFunction() {
|
|
function e(r) {
|
|
var t = e._stream,
|
|
a = e._teeState;
|
|
|
|
if (a.canceled1 = !0, a.reason1 = r, a.canceled2 === !0) {
|
|
var l = createArrayFromList([a.reason1, a.reason2]),
|
|
o = ReadableStreamCancel(t, l);
|
|
|
|
a._resolve(o);
|
|
}
|
|
|
|
return a.promise;
|
|
}
|
|
|
|
return e;
|
|
}
|
|
|
|
function create_ReadableStreamTeeBranch2CancelFunction() {
|
|
function e(r) {
|
|
var t = e._stream,
|
|
a = e._teeState;
|
|
|
|
if (a.canceled2 = !0, a.reason2 = r, a.canceled1 === !0) {
|
|
var l = createArrayFromList([a.reason1, a.reason2]),
|
|
o = ReadableStreamCancel(t, l);
|
|
|
|
a._resolve(o);
|
|
}
|
|
|
|
return a.promise;
|
|
}
|
|
|
|
return e;
|
|
}
|
|
|
|
function ReadableStreamAddReadIntoRequest(e) {
|
|
var r = new Promise(function (r, t) {
|
|
var a = {
|
|
_resolve: r,
|
|
_reject: t
|
|
};
|
|
|
|
e._reader._readIntoRequests.push(a);
|
|
});
|
|
return r;
|
|
}
|
|
|
|
function ReadableStreamAddReadRequest(e) {
|
|
var r = new Promise(function (r, t) {
|
|
var a = {
|
|
_resolve: r,
|
|
_reject: t
|
|
};
|
|
|
|
e._reader._readRequests.push(a);
|
|
});
|
|
return r;
|
|
}
|
|
|
|
function ReadableStreamCancel(e, r) {
|
|
if (e._disturbed = !0, "closed" === e._state) return Promise.resolve(void 0);
|
|
if ("errored" === e._state) return Promise.reject(e._storedError);
|
|
ReadableStreamClose(e);
|
|
|
|
var t = e._readableStreamController[InternalCancel](r);
|
|
|
|
return t.then(function () {});
|
|
}
|
|
|
|
function ReadableStreamClose(e) {
|
|
e._state = "closed";
|
|
var r = e._reader;
|
|
|
|
if (void 0 !== r) {
|
|
if (IsReadableStreamDefaultReader(r) === !0) {
|
|
var t = !0,
|
|
a = !1,
|
|
l = void 0;
|
|
|
|
try {
|
|
for (var o, n = r._readRequests[Symbol.iterator](); !(t = (o = n.next()).done); t = !0) {
|
|
var i = o.value._resolve;
|
|
i(CreateIterResultObject(void 0, !0));
|
|
}
|
|
} catch (e) {
|
|
a = !0, l = e;
|
|
} finally {
|
|
try {
|
|
!t && n.return && n.return();
|
|
} finally {
|
|
if (a) throw l;
|
|
}
|
|
}
|
|
|
|
r._readRequests = [];
|
|
}
|
|
|
|
defaultReaderClosedPromiseResolve(r);
|
|
}
|
|
}
|
|
|
|
function ReadableStreamError(e, r) {
|
|
e._state = "errored", e._storedError = r;
|
|
var t = e._reader;
|
|
|
|
if (void 0 !== t) {
|
|
if (IsReadableStreamDefaultReader(t) === !0) {
|
|
var a = !0,
|
|
l = !1,
|
|
o = void 0;
|
|
|
|
try {
|
|
for (var n, i = t._readRequests[Symbol.iterator](); !(a = (n = i.next()).done); a = !0) {
|
|
var d = n.value;
|
|
|
|
d._reject(r);
|
|
}
|
|
} catch (e) {
|
|
l = !0, o = e;
|
|
} finally {
|
|
try {
|
|
!a && i.return && i.return();
|
|
} finally {
|
|
if (l) throw o;
|
|
}
|
|
}
|
|
|
|
t._readRequests = [];
|
|
} else {
|
|
var s = !0,
|
|
u = !1,
|
|
c = void 0;
|
|
|
|
try {
|
|
for (var b, R = t._readIntoRequests[Symbol.iterator](); !(s = (b = R.next()).done); s = !0) {
|
|
var m = b.value;
|
|
|
|
m._reject(r);
|
|
}
|
|
} catch (e) {
|
|
u = !0, c = e;
|
|
} finally {
|
|
try {
|
|
!s && R.return && R.return();
|
|
} finally {
|
|
if (u) throw c;
|
|
}
|
|
}
|
|
|
|
t._readIntoRequests = [];
|
|
}
|
|
|
|
defaultReaderClosedPromiseReject(t, r), t._closedPromise.catch(function () {});
|
|
}
|
|
}
|
|
|
|
function ReadableStreamFulfillReadIntoRequest(e, r, t) {
|
|
var a = e._reader,
|
|
l = a._readIntoRequests.shift();
|
|
|
|
l._resolve(CreateIterResultObject(r, t));
|
|
}
|
|
|
|
function ReadableStreamFulfillReadRequest(e, r, t) {
|
|
var a = e._reader,
|
|
l = a._readRequests.shift();
|
|
|
|
l._resolve(CreateIterResultObject(r, t));
|
|
}
|
|
|
|
function ReadableStreamGetNumReadIntoRequests(e) {
|
|
return e._reader._readIntoRequests.length;
|
|
}
|
|
|
|
function ReadableStreamGetNumReadRequests(e) {
|
|
return e._reader._readRequests.length;
|
|
}
|
|
|
|
function ReadableStreamHasBYOBReader(e) {
|
|
var r = e._reader;
|
|
return void 0 !== r && IsReadableStreamBYOBReader(r) !== !1;
|
|
}
|
|
|
|
function ReadableStreamHasDefaultReader(e) {
|
|
var r = e._reader;
|
|
return void 0 !== r && IsReadableStreamDefaultReader(r) !== !1;
|
|
}
|
|
|
|
function IsReadableStreamBYOBReader(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_readIntoRequests");
|
|
}
|
|
|
|
function IsReadableStreamDefaultReader(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_readRequests");
|
|
}
|
|
|
|
function ReadableStreamReaderGenericInitialize(e, r) {
|
|
e._ownerReadableStream = r, r._reader = e, "readable" === r._state ? defaultReaderClosedPromiseInitialize(e) : "closed" === r._state ? defaultReaderClosedPromiseInitializeAsResolved(e) : (defaultReaderClosedPromiseInitializeAsRejected(e, r._storedError), e._closedPromise.catch(function () {}));
|
|
}
|
|
|
|
function ReadableStreamReaderGenericCancel(e, r) {
|
|
var t = e._ownerReadableStream;
|
|
return ReadableStreamCancel(t, r);
|
|
}
|
|
|
|
function ReadableStreamReaderGenericRelease(e) {
|
|
"readable" === e._ownerReadableStream._state ? defaultReaderClosedPromiseReject(e, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")) : defaultReaderClosedPromiseResetToRejected(e, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")), e._closedPromise.catch(function () {}), e._ownerReadableStream._reader = void 0, e._ownerReadableStream = void 0;
|
|
}
|
|
|
|
function ReadableStreamBYOBReaderRead(e, r) {
|
|
var t = e._ownerReadableStream;
|
|
return t._disturbed = !0, "errored" === t._state ? Promise.reject(t._storedError) : ReadableByteStreamControllerPullInto(t._readableStreamController, r);
|
|
}
|
|
|
|
function ReadableStreamDefaultReaderRead(e) {
|
|
var r = e._ownerReadableStream;
|
|
return r._disturbed = !0, "closed" === r._state ? Promise.resolve(CreateIterResultObject(void 0, !0)) : "errored" === r._state ? Promise.reject(r._storedError) : r._readableStreamController[InternalPull]();
|
|
}
|
|
|
|
function IsReadableStreamDefaultController(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_underlyingSource");
|
|
}
|
|
|
|
function ReadableStreamDefaultControllerCallPullIfNeeded(e) {
|
|
var r = ReadableStreamDefaultControllerShouldCallPull(e);
|
|
|
|
if (r !== !1) {
|
|
if (e._pulling === !0) return void (e._pullAgain = !0);
|
|
e._pulling = !0;
|
|
var t = PromiseInvokeOrNoop(e._underlyingSource, "pull", [e]);
|
|
t.then(function () {
|
|
if (e._pulling = !1, e._pullAgain === !0) return e._pullAgain = !1, ReadableStreamDefaultControllerCallPullIfNeeded(e);
|
|
}, function (r) {
|
|
ReadableStreamDefaultControllerErrorIfNeeded(e, r);
|
|
}).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
}
|
|
|
|
function ReadableStreamDefaultControllerShouldCallPull(e) {
|
|
var r = e._controlledReadableStream;
|
|
if ("closed" === r._state || "errored" === r._state) return !1;
|
|
if (e._closeRequested === !0) return !1;
|
|
if (e._started === !1) return !1;
|
|
if (IsReadableStreamLocked(r) === !0 && ReadableStreamGetNumReadRequests(r) > 0) return !0;
|
|
var t = ReadableStreamDefaultControllerGetDesiredSize(e);
|
|
return t > 0;
|
|
}
|
|
|
|
function ReadableStreamDefaultControllerClose(e) {
|
|
var r = e._controlledReadableStream;
|
|
e._closeRequested = !0, 0 === e._queue.length && ReadableStreamClose(r);
|
|
}
|
|
|
|
function ReadableStreamDefaultControllerEnqueue(e, r) {
|
|
var t = e._controlledReadableStream;
|
|
if (IsReadableStreamLocked(t) === !0 && ReadableStreamGetNumReadRequests(t) > 0) ReadableStreamFulfillReadRequest(t, r, !1);else {
|
|
var a = 1;
|
|
if (void 0 !== e._strategySize) try {
|
|
a = e._strategySize(r);
|
|
} catch (r) {
|
|
throw ReadableStreamDefaultControllerErrorIfNeeded(e, r), r;
|
|
}
|
|
|
|
try {
|
|
EnqueueValueWithSize(e._queue, r, a);
|
|
} catch (r) {
|
|
throw ReadableStreamDefaultControllerErrorIfNeeded(e, r), r;
|
|
}
|
|
}
|
|
ReadableStreamDefaultControllerCallPullIfNeeded(e);
|
|
}
|
|
|
|
function ReadableStreamDefaultControllerError(e, r) {
|
|
var t = e._controlledReadableStream;
|
|
e._queue = [], ReadableStreamError(t, r);
|
|
}
|
|
|
|
function ReadableStreamDefaultControllerErrorIfNeeded(e, r) {
|
|
"readable" === e._controlledReadableStream._state && ReadableStreamDefaultControllerError(e, r);
|
|
}
|
|
|
|
function ReadableStreamDefaultControllerGetDesiredSize(e) {
|
|
var r = GetTotalQueueSize(e._queue);
|
|
return e._strategyHWM - r;
|
|
}
|
|
|
|
function IsReadableByteStreamController(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_underlyingByteSource");
|
|
}
|
|
|
|
function IsReadableStreamBYOBRequest(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_associatedReadableByteStreamController");
|
|
}
|
|
|
|
function ReadableByteStreamControllerCallPullIfNeeded(e) {
|
|
var r = ReadableByteStreamControllerShouldCallPull(e);
|
|
|
|
if (r !== !1) {
|
|
if (e._pulling === !0) return void (e._pullAgain = !0);
|
|
e._pulling = !0;
|
|
var t = PromiseInvokeOrNoop(e._underlyingByteSource, "pull", [e]);
|
|
t.then(function () {
|
|
e._pulling = !1, e._pullAgain === !0 && (e._pullAgain = !1, ReadableByteStreamControllerCallPullIfNeeded(e));
|
|
}, function (r) {
|
|
"readable" === e._controlledReadableStream._state && ReadableByteStreamControllerError(e, r);
|
|
}).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
}
|
|
|
|
function ReadableByteStreamControllerClearPendingPullIntos(e) {
|
|
ReadableByteStreamControllerInvalidateBYOBRequest(e), e._pendingPullIntos = [];
|
|
}
|
|
|
|
function ReadableByteStreamControllerCommitPullIntoDescriptor(e, r) {
|
|
var t = !1;
|
|
"closed" === e._state && (t = !0);
|
|
var a = ReadableByteStreamControllerConvertPullIntoDescriptor(r);
|
|
"default" === r.readerType ? ReadableStreamFulfillReadRequest(e, a, t) : ReadableStreamFulfillReadIntoRequest(e, a, t);
|
|
}
|
|
|
|
function ReadableByteStreamControllerConvertPullIntoDescriptor(e) {
|
|
var r = e.bytesFilled,
|
|
t = e.elementSize;
|
|
return new e.ctor(e.buffer, e.byteOffset, r / t);
|
|
}
|
|
|
|
function ReadableByteStreamControllerEnqueueChunkToQueue(e, r, t, a) {
|
|
e._queue.push({
|
|
buffer: r,
|
|
byteOffset: t,
|
|
byteLength: a
|
|
}), e._totalQueuedBytes += a;
|
|
}
|
|
|
|
function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(e, r) {
|
|
var t = r.elementSize,
|
|
a = r.bytesFilled - r.bytesFilled % t,
|
|
l = Math.min(e._totalQueuedBytes, r.byteLength - r.bytesFilled),
|
|
o = r.bytesFilled + l,
|
|
n = o - o % t,
|
|
i = l,
|
|
d = !1;
|
|
n > a && (i = n - r.bytesFilled, d = !0);
|
|
|
|
for (var s = e._queue; i > 0;) {
|
|
var u = s[0],
|
|
c = Math.min(i, u.byteLength),
|
|
b = r.byteOffset + r.bytesFilled;
|
|
ArrayBufferCopy(r.buffer, b, u.buffer, u.byteOffset, c), u.byteLength === c ? s.shift() : (u.byteOffset += c, u.byteLength -= c), e._totalQueuedBytes -= c, ReadableByteStreamControllerFillHeadPullIntoDescriptor(e, c, r), i -= c;
|
|
}
|
|
|
|
return d;
|
|
}
|
|
|
|
function ReadableByteStreamControllerFillHeadPullIntoDescriptor(e, r, t) {
|
|
ReadableByteStreamControllerInvalidateBYOBRequest(e), t.bytesFilled += r;
|
|
}
|
|
|
|
function ReadableByteStreamControllerHandleQueueDrain(e) {
|
|
0 === e._totalQueuedBytes && e._closeRequested === !0 ? ReadableStreamClose(e._controlledReadableStream) : ReadableByteStreamControllerCallPullIfNeeded(e);
|
|
}
|
|
|
|
function ReadableByteStreamControllerInvalidateBYOBRequest(e) {
|
|
void 0 !== e._byobRequest && (e._byobRequest._associatedReadableByteStreamController = void 0, e._byobRequest._view = void 0, e._byobRequest = void 0);
|
|
}
|
|
|
|
function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(e) {
|
|
for (; e._pendingPullIntos.length > 0;) {
|
|
if (0 === e._totalQueuedBytes) return;
|
|
var r = e._pendingPullIntos[0];
|
|
ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(e, r) === !0 && (ReadableByteStreamControllerShiftPendingPullInto(e), ReadableByteStreamControllerCommitPullIntoDescriptor(e._controlledReadableStream, r));
|
|
}
|
|
}
|
|
|
|
function ReadableByteStreamControllerPullInto(e, r) {
|
|
var t = e._controlledReadableStream,
|
|
a = 1;
|
|
r.constructor !== DataView && (a = r.constructor.BYTES_PER_ELEMENT);
|
|
var l = r.constructor,
|
|
o = {
|
|
buffer: r.buffer,
|
|
byteOffset: r.byteOffset,
|
|
byteLength: r.byteLength,
|
|
bytesFilled: 0,
|
|
elementSize: a,
|
|
ctor: l,
|
|
readerType: "byob"
|
|
};
|
|
if (e._pendingPullIntos.length > 0) return o.buffer = SameRealmTransfer(o.buffer), e._pendingPullIntos.push(o), ReadableStreamAddReadIntoRequest(t);
|
|
|
|
if ("closed" === t._state) {
|
|
var n = new r.constructor(r.buffer, r.byteOffset, 0);
|
|
return Promise.resolve(CreateIterResultObject(n, !0));
|
|
}
|
|
|
|
if (e._totalQueuedBytes > 0) {
|
|
if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(e, o) === !0) {
|
|
var i = ReadableByteStreamControllerConvertPullIntoDescriptor(o);
|
|
return ReadableByteStreamControllerHandleQueueDrain(e), Promise.resolve(CreateIterResultObject(i, !1));
|
|
}
|
|
|
|
if (e._closeRequested === !0) {
|
|
var d = new TypeError("Insufficient bytes to fill elements in the given buffer");
|
|
return ReadableByteStreamControllerError(e, d), Promise.reject(d);
|
|
}
|
|
}
|
|
|
|
o.buffer = SameRealmTransfer(o.buffer), e._pendingPullIntos.push(o);
|
|
var s = ReadableStreamAddReadIntoRequest(t);
|
|
return ReadableByteStreamControllerCallPullIfNeeded(e), s;
|
|
}
|
|
|
|
function ReadableByteStreamControllerRespondInClosedState(e, r) {
|
|
r.buffer = SameRealmTransfer(r.buffer);
|
|
|
|
for (var t = e._controlledReadableStream; ReadableStreamGetNumReadIntoRequests(t) > 0;) {
|
|
var a = ReadableByteStreamControllerShiftPendingPullInto(e);
|
|
ReadableByteStreamControllerCommitPullIntoDescriptor(t, a);
|
|
}
|
|
}
|
|
|
|
function ReadableByteStreamControllerRespondInReadableState(e, r, t) {
|
|
if (t.bytesFilled + r > t.byteLength) throw new RangeError("bytesWritten out of range");
|
|
|
|
if (ReadableByteStreamControllerFillHeadPullIntoDescriptor(e, r, t), !(t.bytesFilled < t.elementSize)) {
|
|
ReadableByteStreamControllerShiftPendingPullInto(e);
|
|
var a = t.bytesFilled % t.elementSize;
|
|
|
|
if (a > 0) {
|
|
var l = t.byteOffset + t.bytesFilled,
|
|
o = t.buffer.slice(l - a, l);
|
|
ReadableByteStreamControllerEnqueueChunkToQueue(e, o, 0, o.byteLength);
|
|
}
|
|
|
|
t.buffer = SameRealmTransfer(t.buffer), t.bytesFilled -= a, ReadableByteStreamControllerCommitPullIntoDescriptor(e._controlledReadableStream, t), ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(e);
|
|
}
|
|
}
|
|
|
|
function ReadableByteStreamControllerRespondInternal(e, r) {
|
|
var t = e._pendingPullIntos[0],
|
|
a = e._controlledReadableStream;
|
|
|
|
if ("closed" === a._state) {
|
|
if (0 !== r) throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream");
|
|
ReadableByteStreamControllerRespondInClosedState(e, t);
|
|
} else ReadableByteStreamControllerRespondInReadableState(e, r, t);
|
|
}
|
|
|
|
function ReadableByteStreamControllerShiftPendingPullInto(e) {
|
|
var r = e._pendingPullIntos.shift();
|
|
|
|
return ReadableByteStreamControllerInvalidateBYOBRequest(e), r;
|
|
}
|
|
|
|
function ReadableByteStreamControllerShouldCallPull(e) {
|
|
var r = e._controlledReadableStream;
|
|
return "readable" === r._state && e._closeRequested !== !0 && e._started !== !1 && (!!(ReadableStreamHasDefaultReader(r) && ReadableStreamGetNumReadRequests(r) > 0) || !!(ReadableStreamHasBYOBReader(r) && ReadableStreamGetNumReadIntoRequests(r) > 0) || ReadableByteStreamControllerGetDesiredSize(e) > 0);
|
|
}
|
|
|
|
function ReadableByteStreamControllerClose(e) {
|
|
var r = e._controlledReadableStream;
|
|
if (e._totalQueuedBytes > 0) return void (e._closeRequested = !0);
|
|
|
|
if (e._pendingPullIntos.length > 0) {
|
|
var t = e._pendingPullIntos[0];
|
|
|
|
if (t.bytesFilled > 0) {
|
|
var a = new TypeError("Insufficient bytes to fill elements in the given buffer");
|
|
throw ReadableByteStreamControllerError(e, a), a;
|
|
}
|
|
}
|
|
|
|
ReadableStreamClose(r);
|
|
}
|
|
|
|
function ReadableByteStreamControllerEnqueue(e, r) {
|
|
var t = e._controlledReadableStream,
|
|
a = r.buffer,
|
|
l = r.byteOffset,
|
|
o = r.byteLength,
|
|
n = SameRealmTransfer(a);
|
|
if (ReadableStreamHasDefaultReader(t) === !0) {
|
|
if (0 === ReadableStreamGetNumReadRequests(t)) ReadableByteStreamControllerEnqueueChunkToQueue(e, n, l, o);else {
|
|
var i = new Uint8Array(n, l, o);
|
|
ReadableStreamFulfillReadRequest(t, i, !1);
|
|
}
|
|
} else ReadableStreamHasBYOBReader(t) === !0 ? (ReadableByteStreamControllerEnqueueChunkToQueue(e, n, l, o), ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(e)) : ReadableByteStreamControllerEnqueueChunkToQueue(e, n, l, o);
|
|
}
|
|
|
|
function ReadableByteStreamControllerError(e, r) {
|
|
var t = e._controlledReadableStream;
|
|
ReadableByteStreamControllerClearPendingPullIntos(e), e._queue = [], ReadableStreamError(t, r);
|
|
}
|
|
|
|
function ReadableByteStreamControllerGetDesiredSize(e) {
|
|
return e._strategyHWM - e._totalQueuedBytes;
|
|
}
|
|
|
|
function ReadableByteStreamControllerRespond(e, r) {
|
|
if (r = Number(r), IsFiniteNonNegativeNumber(r) === !1) throw new RangeError("bytesWritten must be a finite");
|
|
ReadableByteStreamControllerRespondInternal(e, r);
|
|
}
|
|
|
|
function ReadableByteStreamControllerRespondWithNewView(e, r) {
|
|
var t = e._pendingPullIntos[0];
|
|
if (t.byteOffset + t.bytesFilled !== r.byteOffset) throw new RangeError("The region specified by view does not match byobRequest");
|
|
if (t.byteLength !== r.byteLength) throw new RangeError("The buffer of view has different capacity than byobRequest");
|
|
t.buffer = r.buffer, ReadableByteStreamControllerRespondInternal(e, r.byteLength);
|
|
}
|
|
|
|
function streamBrandCheckException(e) {
|
|
return new TypeError("ReadableStream.prototype." + e + " can only be used on a ReadableStream");
|
|
}
|
|
|
|
function readerLockException(e) {
|
|
return new TypeError("Cannot " + e + " a stream using a released reader");
|
|
}
|
|
|
|
function defaultReaderBrandCheckException(e) {
|
|
return new TypeError("ReadableStreamDefaultReader.prototype." + e + " can only be used on a ReadableStreamDefaultReader");
|
|
}
|
|
|
|
function defaultReaderClosedPromiseInitialize(e) {
|
|
e._closedPromise = new Promise(function (r, t) {
|
|
e._closedPromise_resolve = r, e._closedPromise_reject = t;
|
|
});
|
|
}
|
|
|
|
function defaultReaderClosedPromiseInitializeAsRejected(e, r) {
|
|
e._closedPromise = Promise.reject(r), e._closedPromise_resolve = void 0, e._closedPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultReaderClosedPromiseInitializeAsResolved(e) {
|
|
e._closedPromise = Promise.resolve(void 0), e._closedPromise_resolve = void 0, e._closedPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultReaderClosedPromiseReject(e, r) {
|
|
e._closedPromise_reject(r), e._closedPromise_resolve = void 0, e._closedPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultReaderClosedPromiseResetToRejected(e, r) {
|
|
e._closedPromise = Promise.reject(r);
|
|
}
|
|
|
|
function defaultReaderClosedPromiseResolve(e) {
|
|
e._closedPromise_resolve(void 0), e._closedPromise_resolve = void 0, e._closedPromise_reject = void 0;
|
|
}
|
|
|
|
function byobReaderBrandCheckException(e) {
|
|
return new TypeError("ReadableStreamBYOBReader.prototype." + e + " can only be used on a ReadableStreamBYOBReader");
|
|
}
|
|
|
|
function defaultControllerBrandCheckException(e) {
|
|
return new TypeError("ReadableStreamDefaultController.prototype." + e + " can only be used on a ReadableStreamDefaultController");
|
|
}
|
|
|
|
function byobRequestBrandCheckException(e) {
|
|
return new TypeError("ReadableStreamBYOBRequest.prototype." + e + " can only be used on a ReadableStreamBYOBRequest");
|
|
}
|
|
|
|
function byteStreamControllerBrandCheckException(e) {
|
|
return new TypeError("ReadableByteStreamController.prototype." + e + " can only be used on a ReadableByteStreamController");
|
|
}
|
|
|
|
var _createClass = function () {
|
|
function e(e, r) {
|
|
for (var t = 0; t < r.length; t++) {
|
|
var a = r[t];
|
|
a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a);
|
|
}
|
|
}
|
|
|
|
return function (r, t, a) {
|
|
return t && e(r.prototype, t), a && e(r, a), r;
|
|
};
|
|
}(),
|
|
_require = _dereq_("./helpers.js"),
|
|
ArrayBufferCopy = _require.ArrayBufferCopy,
|
|
CreateIterResultObject = _require.CreateIterResultObject,
|
|
IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber,
|
|
InvokeOrNoop = _require.InvokeOrNoop,
|
|
PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
|
|
SameRealmTransfer = _require.SameRealmTransfer,
|
|
ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,
|
|
ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark,
|
|
_require2 = _dereq_("./helpers.js"),
|
|
createArrayFromList = _require2.createArrayFromList,
|
|
createDataProperty = _require2.createDataProperty,
|
|
typeIsObject = _require2.typeIsObject,
|
|
_require3 = _dereq_("./utils.js"),
|
|
rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection,
|
|
_require4 = _dereq_("./queue-with-sizes.js"),
|
|
DequeueValue = _require4.DequeueValue,
|
|
EnqueueValueWithSize = _require4.EnqueueValueWithSize,
|
|
GetTotalQueueSize = _require4.GetTotalQueueSize,
|
|
_require5 = _dereq_("./writable-stream.js"),
|
|
AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter,
|
|
IsWritableStream = _require5.IsWritableStream,
|
|
IsWritableStreamLocked = _require5.IsWritableStreamLocked,
|
|
WritableStreamAbort = _require5.WritableStreamAbort,
|
|
WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation,
|
|
WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease,
|
|
WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite,
|
|
InternalCancel = Symbol("[[Cancel]]"),
|
|
InternalPull = Symbol("[[Pull]]"),
|
|
ReadableStream = function () {
|
|
function e() {
|
|
var r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
|
|
a = t.size,
|
|
l = t.highWaterMark;
|
|
_classCallCheck(this, e), this._state = "readable", this._reader = void 0, this._storedError = void 0, this._disturbed = !1, this._readableStreamController = void 0;
|
|
var o = r.type,
|
|
n = String(o);
|
|
if ("bytes" === n) void 0 === l && (l = 0), this._readableStreamController = new ReadableByteStreamController(this, r, l);else {
|
|
if (void 0 !== o) throw new RangeError("Invalid type is specified");
|
|
void 0 === l && (l = 1), this._readableStreamController = new ReadableStreamDefaultController(this, r, a, l);
|
|
}
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "cancel",
|
|
value: function (e) {
|
|
return IsReadableStream(this) === !1 ? Promise.reject(streamBrandCheckException("cancel")) : IsReadableStreamLocked(this) === !0 ? Promise.reject(new TypeError("Cannot cancel a stream that already has a reader")) : ReadableStreamCancel(this, e);
|
|
}
|
|
}, {
|
|
key: "getReader",
|
|
value: function () {
|
|
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
r = e.mode;
|
|
if (IsReadableStream(this) === !1) throw streamBrandCheckException("getReader");
|
|
|
|
if ("byob" === r) {
|
|
if (IsReadableByteStreamController(this._readableStreamController) === !1) throw new TypeError("Cannot get a ReadableStreamBYOBReader for a stream not constructed with a byte source");
|
|
return AcquireReadableStreamBYOBReader(this);
|
|
}
|
|
|
|
if (void 0 === r) return AcquireReadableStreamDefaultReader(this);
|
|
throw new RangeError("Invalid mode is specified");
|
|
}
|
|
}, {
|
|
key: "pipeThrough",
|
|
value: function (e, r) {
|
|
var t = e.writable,
|
|
a = e.readable;
|
|
return this.pipeTo(t, r), a;
|
|
}
|
|
}, {
|
|
key: "pipeTo",
|
|
value: function (e) {
|
|
var r = this,
|
|
t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
|
|
a = t.preventClose,
|
|
l = t.preventAbort,
|
|
o = t.preventCancel;
|
|
if (IsReadableStream(this) === !1) return Promise.reject(streamBrandCheckException("pipeTo"));
|
|
if (IsWritableStream(e) === !1) return Promise.reject(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));
|
|
if (a = Boolean(a), l = Boolean(l), o = Boolean(o), IsReadableStreamLocked(this) === !0) return Promise.reject(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream"));
|
|
if (IsWritableStreamLocked(e) === !0) return Promise.reject(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream"));
|
|
var n = AcquireReadableStreamDefaultReader(this),
|
|
i = AcquireWritableStreamDefaultWriter(e),
|
|
d = !1,
|
|
s = Promise.resolve();
|
|
return new Promise(function (t, u) {
|
|
function c() {
|
|
return s = Promise.resolve(), d === !0 ? Promise.resolve() : i._readyPromise.then(function () {
|
|
return ReadableStreamDefaultReaderRead(n).then(function (e) {
|
|
var r = e.value,
|
|
t = e.done;
|
|
if (t !== !0) return s = WritableStreamDefaultWriterWrite(i, r);
|
|
});
|
|
}).then(c);
|
|
}
|
|
|
|
function b(e, r, t) {
|
|
"errored" === e._state ? t(e._storedError) : r.catch(t).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
|
|
function R(e, r, t) {
|
|
"closed" === e._state ? t() : r.then(t).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
|
|
function m() {
|
|
return s.catch(function () {});
|
|
}
|
|
|
|
function f(e, r, t) {
|
|
d !== !0 && (d = !0, m().then(function () {
|
|
return e().then(function () {
|
|
return S(r, t);
|
|
}, function (e) {
|
|
return S(!0, e);
|
|
});
|
|
}).catch(rethrowAssertionErrorRejection));
|
|
}
|
|
|
|
function h(e, r) {
|
|
d !== !0 && (d = !0, m().then(function () {
|
|
S(e, r);
|
|
}).catch(rethrowAssertionErrorRejection));
|
|
}
|
|
|
|
function S(e, r) {
|
|
WritableStreamDefaultWriterRelease(i), ReadableStreamReaderGenericRelease(n), e ? u(r) : t(void 0);
|
|
}
|
|
|
|
b(r, n._closedPromise, function (r) {
|
|
l === !1 ? f(function () {
|
|
return WritableStreamAbort(e, r);
|
|
}, !0, r) : h(!0, r);
|
|
}), b(e, i._closedPromise, function (e) {
|
|
o === !1 ? f(function () {
|
|
return ReadableStreamCancel(r, e);
|
|
}, !0, e) : h(!0, e);
|
|
}), R(r, n._closedPromise, function () {
|
|
a === !1 ? f(function () {
|
|
return WritableStreamDefaultWriterCloseWithErrorPropagation(i);
|
|
}) : h();
|
|
}), "closing" !== e._state && "closed" !== e._state || !function () {
|
|
var e = new TypeError("the destination writable stream closed before all data could be piped to it");
|
|
o === !1 ? f(function () {
|
|
return ReadableStreamCancel(r, e);
|
|
}, !0, e) : h(!0, e);
|
|
}(), c().catch(function (e) {
|
|
s = Promise.resolve(), rethrowAssertionErrorRejection(e);
|
|
});
|
|
});
|
|
}
|
|
}, {
|
|
key: "tee",
|
|
value: function () {
|
|
if (IsReadableStream(this) === !1) throw streamBrandCheckException("tee");
|
|
var e = ReadableStreamTee(this, !1);
|
|
return createArrayFromList(e);
|
|
}
|
|
}, {
|
|
key: "locked",
|
|
get: function () {
|
|
if (IsReadableStream(this) === !1) throw streamBrandCheckException("locked");
|
|
return IsReadableStreamLocked(this);
|
|
}
|
|
}]), e;
|
|
}();
|
|
|
|
module.exports = {
|
|
ReadableStream: ReadableStream,
|
|
IsReadableStreamDisturbed: IsReadableStreamDisturbed,
|
|
ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose,
|
|
ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue,
|
|
ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError,
|
|
ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize
|
|
};
|
|
|
|
var ReadableStreamDefaultReader = function () {
|
|
function e(r) {
|
|
if (_classCallCheck(this, e), IsReadableStream(r) === !1) throw new TypeError("ReadableStreamDefaultReader can only be constructed with a ReadableStream instance");
|
|
if (IsReadableStreamLocked(r) === !0) throw new TypeError("This stream has already been locked for exclusive reading by another reader");
|
|
ReadableStreamReaderGenericInitialize(this, r), this._readRequests = [];
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "cancel",
|
|
value: function (e) {
|
|
return IsReadableStreamDefaultReader(this) === !1 ? Promise.reject(defaultReaderBrandCheckException("cancel")) : void 0 === this._ownerReadableStream ? Promise.reject(readerLockException("cancel")) : ReadableStreamReaderGenericCancel(this, e);
|
|
}
|
|
}, {
|
|
key: "read",
|
|
value: function () {
|
|
return IsReadableStreamDefaultReader(this) === !1 ? Promise.reject(defaultReaderBrandCheckException("read")) : void 0 === this._ownerReadableStream ? Promise.reject(readerLockException("read from")) : ReadableStreamDefaultReaderRead(this);
|
|
}
|
|
}, {
|
|
key: "releaseLock",
|
|
value: function () {
|
|
if (IsReadableStreamDefaultReader(this) === !1) throw defaultReaderBrandCheckException("releaseLock");
|
|
|
|
if (void 0 !== this._ownerReadableStream) {
|
|
if (this._readRequests.length > 0) throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");
|
|
ReadableStreamReaderGenericRelease(this);
|
|
}
|
|
}
|
|
}, {
|
|
key: "closed",
|
|
get: function () {
|
|
return IsReadableStreamDefaultReader(this) === !1 ? Promise.reject(defaultReaderBrandCheckException("closed")) : this._closedPromise;
|
|
}
|
|
}]), e;
|
|
}(),
|
|
ReadableStreamBYOBReader = function () {
|
|
function e(r) {
|
|
if (_classCallCheck(this, e), !IsReadableStream(r)) throw new TypeError("ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a byte source");
|
|
if (IsReadableStreamLocked(r)) throw new TypeError("This stream has already been locked for exclusive reading by another reader");
|
|
ReadableStreamReaderGenericInitialize(this, r), this._readIntoRequests = [];
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "cancel",
|
|
value: function (e) {
|
|
return IsReadableStreamBYOBReader(this) ? void 0 === this._ownerReadableStream ? Promise.reject(readerLockException("cancel")) : ReadableStreamReaderGenericCancel(this, e) : Promise.reject(byobReaderBrandCheckException("cancel"));
|
|
}
|
|
}, {
|
|
key: "read",
|
|
value: function (e) {
|
|
return IsReadableStreamBYOBReader(this) ? void 0 === this._ownerReadableStream ? Promise.reject(readerLockException("read from")) : ArrayBuffer.isView(e) ? 0 === e.byteLength ? Promise.reject(new TypeError("view must have non-zero byteLength")) : ReadableStreamBYOBReaderRead(this, e) : Promise.reject(new TypeError("view must be an array buffer view")) : Promise.reject(byobReaderBrandCheckException("read"));
|
|
}
|
|
}, {
|
|
key: "releaseLock",
|
|
value: function () {
|
|
if (!IsReadableStreamBYOBReader(this)) throw byobReaderBrandCheckException("releaseLock");
|
|
|
|
if (void 0 !== this._ownerReadableStream) {
|
|
if (this._readIntoRequests.length > 0) throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");
|
|
ReadableStreamReaderGenericRelease(this);
|
|
}
|
|
}
|
|
}, {
|
|
key: "closed",
|
|
get: function () {
|
|
return IsReadableStreamBYOBReader(this) ? this._closedPromise : Promise.reject(byobReaderBrandCheckException("closed"));
|
|
}
|
|
}]), e;
|
|
}(),
|
|
ReadableStreamDefaultController = function () {
|
|
function e(r, t, a, l) {
|
|
if (_classCallCheck(this, e), IsReadableStream(r) === !1) throw new TypeError("ReadableStreamDefaultController can only be constructed with a ReadableStream instance");
|
|
if (void 0 !== r._readableStreamController) throw new TypeError("ReadableStreamDefaultController instances can only be created by the ReadableStream constructor");
|
|
this._controlledReadableStream = r, this._underlyingSource = t, this._queue = [], this._started = !1, this._closeRequested = !1, this._pullAgain = !1, this._pulling = !1;
|
|
var o = ValidateAndNormalizeQueuingStrategy(a, l);
|
|
this._strategySize = o.size, this._strategyHWM = o.highWaterMark;
|
|
var n = this,
|
|
i = InvokeOrNoop(t, "start", [this]);
|
|
Promise.resolve(i).then(function () {
|
|
n._started = !0, ReadableStreamDefaultControllerCallPullIfNeeded(n);
|
|
}, function (e) {
|
|
ReadableStreamDefaultControllerErrorIfNeeded(n, e);
|
|
}).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "close",
|
|
value: function () {
|
|
if (IsReadableStreamDefaultController(this) === !1) throw defaultControllerBrandCheckException("close");
|
|
if (this._closeRequested === !0) throw new TypeError("The stream has already been closed; do not close it again!");
|
|
var e = this._controlledReadableStream._state;
|
|
if ("readable" !== e) throw new TypeError("The stream (in " + e + " state) is not in the readable state and cannot be closed");
|
|
ReadableStreamDefaultControllerClose(this);
|
|
}
|
|
}, {
|
|
key: "enqueue",
|
|
value: function (e) {
|
|
if (IsReadableStreamDefaultController(this) === !1) throw defaultControllerBrandCheckException("enqueue");
|
|
if (this._closeRequested === !0) throw new TypeError("stream is closed or draining");
|
|
var r = this._controlledReadableStream._state;
|
|
if ("readable" !== r) throw new TypeError("The stream (in " + r + " state) is not in the readable state and cannot be enqueued to");
|
|
return ReadableStreamDefaultControllerEnqueue(this, e);
|
|
}
|
|
}, {
|
|
key: "error",
|
|
value: function (e) {
|
|
if (IsReadableStreamDefaultController(this) === !1) throw defaultControllerBrandCheckException("error");
|
|
var r = this._controlledReadableStream;
|
|
if ("readable" !== r._state) throw new TypeError("The stream is " + r._state + " and so cannot be errored");
|
|
ReadableStreamDefaultControllerError(this, e);
|
|
}
|
|
}, {
|
|
key: InternalCancel,
|
|
value: function (e) {
|
|
return this._queue = [], PromiseInvokeOrNoop(this._underlyingSource, "cancel", [e]);
|
|
}
|
|
}, {
|
|
key: InternalPull,
|
|
value: function () {
|
|
var e = this._controlledReadableStream;
|
|
|
|
if (this._queue.length > 0) {
|
|
var r = DequeueValue(this._queue);
|
|
return this._closeRequested === !0 && 0 === this._queue.length ? ReadableStreamClose(e) : ReadableStreamDefaultControllerCallPullIfNeeded(this), Promise.resolve(CreateIterResultObject(r, !1));
|
|
}
|
|
|
|
var t = ReadableStreamAddReadRequest(e);
|
|
return ReadableStreamDefaultControllerCallPullIfNeeded(this), t;
|
|
}
|
|
}, {
|
|
key: "desiredSize",
|
|
get: function () {
|
|
if (IsReadableStreamDefaultController(this) === !1) throw defaultControllerBrandCheckException("desiredSize");
|
|
return ReadableStreamDefaultControllerGetDesiredSize(this);
|
|
}
|
|
}]), e;
|
|
}(),
|
|
ReadableStreamBYOBRequest = function () {
|
|
function e(r, t) {
|
|
_classCallCheck(this, e), this._associatedReadableByteStreamController = r, this._view = t;
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "respond",
|
|
value: function (e) {
|
|
if (IsReadableStreamBYOBRequest(this) === !1) throw byobRequestBrandCheckException("respond");
|
|
if (void 0 === this._associatedReadableByteStreamController) throw new TypeError("This BYOB request has been invalidated");
|
|
ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, e);
|
|
}
|
|
}, {
|
|
key: "respondWithNewView",
|
|
value: function (e) {
|
|
if (IsReadableStreamBYOBRequest(this) === !1) throw byobRequestBrandCheckException("respond");
|
|
if (void 0 === this._associatedReadableByteStreamController) throw new TypeError("This BYOB request has been invalidated");
|
|
if (!ArrayBuffer.isView(e)) throw new TypeError("You can only respond with array buffer views");
|
|
ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, e);
|
|
}
|
|
}, {
|
|
key: "view",
|
|
get: function () {
|
|
return this._view;
|
|
}
|
|
}]), e;
|
|
}(),
|
|
ReadableByteStreamController = function () {
|
|
function e(r, t, a) {
|
|
if (_classCallCheck(this, e), IsReadableStream(r) === !1) throw new TypeError("ReadableByteStreamController can only be constructed with a ReadableStream instance given a byte source");
|
|
if (void 0 !== r._readableStreamController) throw new TypeError("ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte source");
|
|
this._controlledReadableStream = r, this._underlyingByteSource = t, this._pullAgain = !1, this._pulling = !1, ReadableByteStreamControllerClearPendingPullIntos(this), this._queue = [], this._totalQueuedBytes = 0, this._closeRequested = !1, this._started = !1, this._strategyHWM = ValidateAndNormalizeHighWaterMark(a);
|
|
var l = t.autoAllocateChunkSize;
|
|
if (void 0 !== l && (Number.isInteger(l) === !1 || l <= 0)) throw new RangeError("autoAllocateChunkSize must be a positive integer");
|
|
this._autoAllocateChunkSize = l, this._pendingPullIntos = [];
|
|
var o = this,
|
|
n = InvokeOrNoop(t, "start", [this]);
|
|
Promise.resolve(n).then(function () {
|
|
o._started = !0, ReadableByteStreamControllerCallPullIfNeeded(o);
|
|
}, function (e) {
|
|
"readable" === r._state && ReadableByteStreamControllerError(o, e);
|
|
}).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "close",
|
|
value: function () {
|
|
if (IsReadableByteStreamController(this) === !1) throw byteStreamControllerBrandCheckException("close");
|
|
if (this._closeRequested === !0) throw new TypeError("The stream has already been closed; do not close it again!");
|
|
var e = this._controlledReadableStream._state;
|
|
if ("readable" !== e) throw new TypeError("The stream (in " + e + " state) is not in the readable state and cannot be closed");
|
|
ReadableByteStreamControllerClose(this);
|
|
}
|
|
}, {
|
|
key: "enqueue",
|
|
value: function (e) {
|
|
if (IsReadableByteStreamController(this) === !1) throw byteStreamControllerBrandCheckException("enqueue");
|
|
if (this._closeRequested === !0) throw new TypeError("stream is closed or draining");
|
|
var r = this._controlledReadableStream._state;
|
|
if ("readable" !== r) throw new TypeError("The stream (in " + r + " state) is not in the readable state and cannot be enqueued to");
|
|
if (!ArrayBuffer.isView(e)) throw new TypeError("You can only enqueue array buffer views when using a ReadableByteStreamController");
|
|
ReadableByteStreamControllerEnqueue(this, e);
|
|
}
|
|
}, {
|
|
key: "error",
|
|
value: function (e) {
|
|
if (IsReadableByteStreamController(this) === !1) throw byteStreamControllerBrandCheckException("error");
|
|
var r = this._controlledReadableStream;
|
|
if ("readable" !== r._state) throw new TypeError("The stream is " + r._state + " and so cannot be errored");
|
|
ReadableByteStreamControllerError(this, e);
|
|
}
|
|
}, {
|
|
key: InternalCancel,
|
|
value: function (e) {
|
|
if (this._pendingPullIntos.length > 0) {
|
|
var r = this._pendingPullIntos[0];
|
|
r.bytesFilled = 0;
|
|
}
|
|
|
|
return this._queue = [], this._totalQueuedBytes = 0, PromiseInvokeOrNoop(this._underlyingByteSource, "cancel", [e]);
|
|
}
|
|
}, {
|
|
key: InternalPull,
|
|
value: function () {
|
|
var e = this._controlledReadableStream;
|
|
|
|
if (0 === ReadableStreamGetNumReadRequests(e)) {
|
|
if (this._totalQueuedBytes > 0) {
|
|
var r = this._queue.shift();
|
|
|
|
this._totalQueuedBytes -= r.byteLength, ReadableByteStreamControllerHandleQueueDrain(this);
|
|
var t = void 0;
|
|
|
|
try {
|
|
t = new Uint8Array(r.buffer, r.byteOffset, r.byteLength);
|
|
} catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
|
|
return Promise.resolve(CreateIterResultObject(t, !1));
|
|
}
|
|
|
|
var a = this._autoAllocateChunkSize;
|
|
|
|
if (void 0 !== a) {
|
|
var l = void 0;
|
|
|
|
try {
|
|
l = new ArrayBuffer(a);
|
|
} catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
|
|
var o = {
|
|
buffer: l,
|
|
byteOffset: 0,
|
|
byteLength: a,
|
|
bytesFilled: 0,
|
|
elementSize: 1,
|
|
ctor: Uint8Array,
|
|
readerType: "default"
|
|
};
|
|
|
|
this._pendingPullIntos.push(o);
|
|
}
|
|
}
|
|
|
|
var n = ReadableStreamAddReadRequest(e);
|
|
return ReadableByteStreamControllerCallPullIfNeeded(this), n;
|
|
}
|
|
}, {
|
|
key: "byobRequest",
|
|
get: function () {
|
|
if (IsReadableByteStreamController(this) === !1) throw byteStreamControllerBrandCheckException("byobRequest");
|
|
|
|
if (void 0 === this._byobRequest && this._pendingPullIntos.length > 0) {
|
|
var e = this._pendingPullIntos[0],
|
|
r = new Uint8Array(e.buffer, e.byteOffset + e.bytesFilled, e.byteLength - e.bytesFilled);
|
|
this._byobRequest = new ReadableStreamBYOBRequest(this, r);
|
|
}
|
|
|
|
return this._byobRequest;
|
|
}
|
|
}, {
|
|
key: "desiredSize",
|
|
get: function () {
|
|
if (IsReadableByteStreamController(this) === !1) throw byteStreamControllerBrandCheckException("desiredSize");
|
|
return ReadableByteStreamControllerGetDesiredSize(this);
|
|
}
|
|
}]), e;
|
|
}();
|
|
}, {
|
|
"./helpers.js": 5,
|
|
"./queue-with-sizes.js": 6,
|
|
"./utils.js": 2,
|
|
"./writable-stream.js": 9
|
|
}],
|
|
8: [function (_dereq_, module, exports) {
|
|
"use strict";
|
|
|
|
function _classCallCheck(r, e) {
|
|
if (!(r instanceof e)) throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
|
|
function TransformStreamCloseReadable(r) {
|
|
if (r._errored === !0) throw new TypeError("TransformStream is already errored");
|
|
if (r._readableClosed === !0) throw new TypeError("Readable side is already closed");
|
|
TransformStreamCloseReadableInternal(r);
|
|
}
|
|
|
|
function TransformStreamEnqueueToReadable(r, e) {
|
|
if (r._errored === !0) throw new TypeError("TransformStream is already errored");
|
|
if (r._readableClosed === !0) throw new TypeError("Readable side is already closed");
|
|
var a = r._readableController;
|
|
|
|
try {
|
|
ReadableStreamDefaultControllerEnqueue(a, e);
|
|
} catch (e) {
|
|
throw r._readableClosed = !0, TransformStreamErrorIfNeeded(r, e), r._storedError;
|
|
}
|
|
|
|
var t = ReadableStreamDefaultControllerGetDesiredSize(a),
|
|
o = t <= 0;
|
|
o === !0 && r._backpressure === !1 && TransformStreamSetBackpressure(r, !0);
|
|
}
|
|
|
|
function TransformStreamError(r, e) {
|
|
if (r._errored === !0) throw new TypeError("TransformStream is already errored");
|
|
TransformStreamErrorInternal(r, e);
|
|
}
|
|
|
|
function TransformStreamCloseReadableInternal(r) {
|
|
try {
|
|
ReadableStreamDefaultControllerClose(r._readableController);
|
|
} catch (r) {}
|
|
|
|
r._readableClosed = !0;
|
|
}
|
|
|
|
function TransformStreamErrorIfNeeded(r, e) {
|
|
r._errored === !1 && TransformStreamErrorInternal(r, e);
|
|
}
|
|
|
|
function TransformStreamErrorInternal(r, e) {
|
|
r._errored = !0, r._storedError = e, r._writableDone === !1 && WritableStreamDefaultControllerError(r._writableController, e), r._readableClosed === !1 && ReadableStreamDefaultControllerError(r._readableController, e);
|
|
}
|
|
|
|
function TransformStreamReadableReadyPromise(r) {
|
|
return r._backpressure === !1 ? Promise.resolve() : r._backpressureChangePromise;
|
|
}
|
|
|
|
function TransformStreamSetBackpressure(r, e) {
|
|
void 0 !== r._backpressureChangePromise && r._backpressureChangePromise_resolve(e), r._backpressureChangePromise = new Promise(function (e) {
|
|
r._backpressureChangePromise_resolve = e;
|
|
}), r._backpressureChangePromise.then(function (r) {}), r._backpressure = e;
|
|
}
|
|
|
|
function TransformStreamDefaultTransform(r, e) {
|
|
var a = e._controlledTransformStream;
|
|
return TransformStreamEnqueueToReadable(a, r), Promise.resolve();
|
|
}
|
|
|
|
function TransformStreamTransform(r, e) {
|
|
r._transforming = !0;
|
|
var a = r._transformer,
|
|
t = r._transformStreamController,
|
|
o = PromiseInvokeOrPerformFallback(a, "transform", [e, t], TransformStreamDefaultTransform, [e, t]);
|
|
return o.then(function () {
|
|
return r._transforming = !1, TransformStreamReadableReadyPromise(r);
|
|
}, function (e) {
|
|
return TransformStreamErrorIfNeeded(r, e), Promise.reject(e);
|
|
});
|
|
}
|
|
|
|
function IsTransformStreamDefaultController(r) {
|
|
return !!typeIsObject(r) && !!Object.prototype.hasOwnProperty.call(r, "_controlledTransformStream");
|
|
}
|
|
|
|
function IsTransformStream(r) {
|
|
return !!typeIsObject(r) && !!Object.prototype.hasOwnProperty.call(r, "_transformStreamController");
|
|
}
|
|
|
|
function defaultControllerBrandCheckException(r) {
|
|
return new TypeError("TransformStreamDefaultController.prototype." + r + " can only be used on a TransformStreamDefaultController");
|
|
}
|
|
|
|
function streamBrandCheckException(r) {
|
|
return new TypeError("TransformStream.prototype." + r + " can only be used on a TransformStream");
|
|
}
|
|
|
|
var _createClass = function () {
|
|
function r(r, e) {
|
|
for (var a = 0; a < e.length; a++) {
|
|
var t = e[a];
|
|
t.enumerable = t.enumerable || !1, t.configurable = !0, "value" in t && (t.writable = !0), Object.defineProperty(r, t.key, t);
|
|
}
|
|
}
|
|
|
|
return function (e, a, t) {
|
|
return a && r(e.prototype, a), t && r(e, t), e;
|
|
};
|
|
}(),
|
|
_require = _dereq_("./helpers.js"),
|
|
InvokeOrNoop = _require.InvokeOrNoop,
|
|
PromiseInvokeOrPerformFallback = _require.PromiseInvokeOrPerformFallback,
|
|
PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
|
|
typeIsObject = _require.typeIsObject,
|
|
_require2 = _dereq_("./readable-stream.js"),
|
|
ReadableStream = _require2.ReadableStream,
|
|
ReadableStreamDefaultControllerClose = _require2.ReadableStreamDefaultControllerClose,
|
|
ReadableStreamDefaultControllerEnqueue = _require2.ReadableStreamDefaultControllerEnqueue,
|
|
ReadableStreamDefaultControllerError = _require2.ReadableStreamDefaultControllerError,
|
|
ReadableStreamDefaultControllerGetDesiredSize = _require2.ReadableStreamDefaultControllerGetDesiredSize,
|
|
_require3 = _dereq_("./writable-stream.js"),
|
|
WritableStream = _require3.WritableStream,
|
|
WritableStreamDefaultControllerError = _require3.WritableStreamDefaultControllerError,
|
|
TransformStreamSink = function () {
|
|
function r(e, a) {
|
|
_classCallCheck(this, r), this._transformStream = e, this._startPromise = a;
|
|
}
|
|
|
|
return _createClass(r, [{
|
|
key: "start",
|
|
value: function (r) {
|
|
var e = this._transformStream;
|
|
return e._writableController = r, this._startPromise.then(function () {
|
|
return TransformStreamReadableReadyPromise(e);
|
|
});
|
|
}
|
|
}, {
|
|
key: "write",
|
|
value: function (r) {
|
|
var e = this._transformStream;
|
|
return TransformStreamTransform(e, r);
|
|
}
|
|
}, {
|
|
key: "abort",
|
|
value: function () {
|
|
var r = this._transformStream;
|
|
r._writableDone = !0, TransformStreamErrorInternal(r, new TypeError("Writable side aborted"));
|
|
}
|
|
}, {
|
|
key: "close",
|
|
value: function () {
|
|
var r = this._transformStream;
|
|
r._writableDone = !0;
|
|
var e = PromiseInvokeOrNoop(r._transformer, "flush", [r._transformStreamController]);
|
|
return e.then(function () {
|
|
return r._errored === !0 ? Promise.reject(r._storedError) : (r._readableClosed === !1 && TransformStreamCloseReadableInternal(r), Promise.resolve());
|
|
}).catch(function (e) {
|
|
return TransformStreamErrorIfNeeded(r, e), Promise.reject(r._storedError);
|
|
});
|
|
}
|
|
}]), r;
|
|
}(),
|
|
TransformStreamSource = function () {
|
|
function r(e, a) {
|
|
_classCallCheck(this, r), this._transformStream = e, this._startPromise = a;
|
|
}
|
|
|
|
return _createClass(r, [{
|
|
key: "start",
|
|
value: function (r) {
|
|
var e = this._transformStream;
|
|
return e._readableController = r, this._startPromise.then(function () {
|
|
return e._backpressure === !0 ? Promise.resolve() : e._backpressureChangePromise;
|
|
});
|
|
}
|
|
}, {
|
|
key: "pull",
|
|
value: function () {
|
|
var r = this._transformStream;
|
|
return TransformStreamSetBackpressure(r, !1), r._backpressureChangePromise;
|
|
}
|
|
}, {
|
|
key: "cancel",
|
|
value: function () {
|
|
var r = this._transformStream;
|
|
r._readableClosed = !0, TransformStreamErrorInternal(r, new TypeError("Readable side canceled"));
|
|
}
|
|
}]), r;
|
|
}(),
|
|
TransformStreamDefaultController = function () {
|
|
function r(e) {
|
|
if (_classCallCheck(this, r), IsTransformStream(e) === !1) throw new TypeError("TransformStreamDefaultController can only be constructed with a TransformStream instance");
|
|
if (void 0 !== e._transformStreamController) throw new TypeError("TransformStreamDefaultController instances can only be created by the TransformStream constructor");
|
|
this._controlledTransformStream = e;
|
|
}
|
|
|
|
return _createClass(r, [{
|
|
key: "enqueue",
|
|
value: function (r) {
|
|
if (IsTransformStreamDefaultController(this) === !1) throw defaultControllerBrandCheckException("enqueue");
|
|
TransformStreamEnqueueToReadable(this._controlledTransformStream, r);
|
|
}
|
|
}, {
|
|
key: "close",
|
|
value: function () {
|
|
if (IsTransformStreamDefaultController(this) === !1) throw defaultControllerBrandCheckException("close");
|
|
TransformStreamCloseReadable(this._controlledTransformStream);
|
|
}
|
|
}, {
|
|
key: "error",
|
|
value: function (r) {
|
|
if (IsTransformStreamDefaultController(this) === !1) throw defaultControllerBrandCheckException("error");
|
|
TransformStreamError(this._controlledTransformStream, r);
|
|
}
|
|
}, {
|
|
key: "desiredSize",
|
|
get: function () {
|
|
if (IsTransformStreamDefaultController(this) === !1) throw defaultControllerBrandCheckException("desiredSize");
|
|
var r = this._controlledTransformStream,
|
|
e = r._readableController;
|
|
return ReadableStreamDefaultControllerGetDesiredSize(e);
|
|
}
|
|
}]), r;
|
|
}(),
|
|
TransformStream = function () {
|
|
function r() {
|
|
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
|
|
_classCallCheck(this, r), this._transformer = e;
|
|
var a = e.readableStrategy,
|
|
t = e.writableStrategy;
|
|
this._transforming = !1, this._errored = !1, this._storedError = void 0, this._writableController = void 0, this._readableController = void 0, this._transformStreamController = void 0, this._writableDone = !1, this._readableClosed = !1, this._backpressure = void 0, this._backpressureChangePromise = void 0, this._backpressureChangePromise_resolve = void 0, this._transformStreamController = new TransformStreamDefaultController(this);
|
|
var o = void 0,
|
|
n = new Promise(function (r) {
|
|
o = r;
|
|
}),
|
|
s = new TransformStreamSource(this, n);
|
|
this._readable = new ReadableStream(s, a);
|
|
var l = new TransformStreamSink(this, n);
|
|
this._writable = new WritableStream(l, t);
|
|
var i = ReadableStreamDefaultControllerGetDesiredSize(this._readableController);
|
|
TransformStreamSetBackpressure(this, i <= 0);
|
|
var m = this,
|
|
f = InvokeOrNoop(e, "start", [m._transformStreamController]);
|
|
o(f), n.catch(function (r) {
|
|
m._errored === !1 && (m._errored = !0, m._storedError = r);
|
|
});
|
|
}
|
|
|
|
return _createClass(r, [{
|
|
key: "readable",
|
|
get: function () {
|
|
if (IsTransformStream(this) === !1) throw streamBrandCheckException("readable");
|
|
return this._readable;
|
|
}
|
|
}, {
|
|
key: "writable",
|
|
get: function () {
|
|
if (IsTransformStream(this) === !1) throw streamBrandCheckException("writable");
|
|
return this._writable;
|
|
}
|
|
}]), r;
|
|
}();
|
|
|
|
module.exports = {
|
|
TransformStream: TransformStream
|
|
};
|
|
}, {
|
|
"./helpers.js": 5,
|
|
"./readable-stream.js": 7,
|
|
"./writable-stream.js": 9
|
|
}],
|
|
9: [function (_dereq_, module, exports) {
|
|
"use strict";
|
|
|
|
function _classCallCheck(e, r) {
|
|
if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
|
|
function AcquireWritableStreamDefaultWriter(e) {
|
|
return new WritableStreamDefaultWriter(e);
|
|
}
|
|
|
|
function IsWritableStream(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_writableStreamController");
|
|
}
|
|
|
|
function IsWritableStreamLocked(e) {
|
|
return void 0 !== e._writer;
|
|
}
|
|
|
|
function WritableStreamAbort(e, r) {
|
|
var t = e._state;
|
|
if ("closed" === t) return Promise.resolve(void 0);
|
|
if ("errored" === t) return Promise.reject(e._storedError);
|
|
var i = new TypeError("Aborted");
|
|
WritableStreamError(e, i);
|
|
var o = e._writableStreamController;
|
|
|
|
if (o._writing === !0 || o._inClose === !0) {
|
|
var a = new Promise(function (r, t) {
|
|
var i = {
|
|
_resolve: r,
|
|
_reject: t
|
|
};
|
|
e._pendingAbortRequest = i;
|
|
});
|
|
return o._writing === !0 ? a.then(function () {
|
|
return WritableStreamDefaultControllerAbort(e._writableStreamController, r);
|
|
}) : a;
|
|
}
|
|
|
|
return WritableStreamDefaultControllerAbort(e._writableStreamController, r);
|
|
}
|
|
|
|
function WritableStreamAddWriteRequest(e) {
|
|
var r = new Promise(function (r, t) {
|
|
var i = {
|
|
_resolve: r,
|
|
_reject: t
|
|
};
|
|
|
|
e._writeRequests.push(i);
|
|
});
|
|
return r;
|
|
}
|
|
|
|
function WritableStreamError(e, r) {
|
|
var t = e._state;
|
|
e._state = "errored", e._storedError = r;
|
|
var i = e._writableStreamController;
|
|
(void 0 === i || i._writing === !1 && i._inClose === !1) && WritableStreamRejectPromisesInReactionToError(e);
|
|
var o = e._writer;
|
|
void 0 !== o && ("writable" === t && WritableStreamDefaultControllerGetBackpressure(e._writableStreamController) === !0 ? defaultWriterReadyPromiseReject(o, r) : defaultWriterReadyPromiseResetToRejected(o, r), o._readyPromise.catch(function () {}));
|
|
}
|
|
|
|
function WritableStreamFinishClose(e) {
|
|
"closing" === e._state ? (defaultWriterClosedPromiseResolve(e._writer), e._state = "closed") : (defaultWriterClosedPromiseReject(e._writer, e._storedError), e._writer._closedPromise.catch(function () {})), void 0 !== e._pendingAbortRequest && (e._pendingAbortRequest._resolve(), e._pendingAbortRequest = void 0);
|
|
}
|
|
|
|
function WritableStreamRejectPromisesInReactionToError(e) {
|
|
var r = e._storedError,
|
|
t = !0,
|
|
i = !1,
|
|
o = void 0;
|
|
|
|
try {
|
|
for (var a, l = e._writeRequests[Symbol.iterator](); !(t = (a = l.next()).done); t = !0) {
|
|
var n = a.value;
|
|
|
|
n._reject(r);
|
|
}
|
|
} catch (e) {
|
|
i = !0, o = e;
|
|
} finally {
|
|
try {
|
|
!t && l.return && l.return();
|
|
} finally {
|
|
if (i) throw o;
|
|
}
|
|
}
|
|
|
|
e._writeRequests = [], void 0 !== e._pendingCloseRequest && (e._pendingCloseRequest._reject(r), e._pendingCloseRequest = void 0);
|
|
var s = e._writer;
|
|
void 0 !== s && (defaultWriterClosedPromiseReject(s, r), s._closedPromise.catch(function () {}));
|
|
}
|
|
|
|
function WritableStreamUpdateBackpressure(e, r) {
|
|
var t = e._writer;
|
|
void 0 !== t && (r === !0 ? defaultWriterReadyPromiseReset(t) : defaultWriterReadyPromiseResolve(t));
|
|
}
|
|
|
|
function IsWritableStreamDefaultWriter(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_ownerWritableStream");
|
|
}
|
|
|
|
function WritableStreamDefaultWriterAbort(e, r) {
|
|
var t = e._ownerWritableStream;
|
|
return WritableStreamAbort(t, r);
|
|
}
|
|
|
|
function WritableStreamDefaultWriterClose(e) {
|
|
var r = e._ownerWritableStream,
|
|
t = r._state;
|
|
if ("closed" === t || "errored" === t) return Promise.reject(new TypeError("The stream (in " + t + " state) is not in the writable state and cannot be closed"));
|
|
var i = new Promise(function (e, t) {
|
|
var i = {
|
|
_resolve: e,
|
|
_reject: t
|
|
};
|
|
r._pendingCloseRequest = i;
|
|
});
|
|
return WritableStreamDefaultControllerGetBackpressure(r._writableStreamController) === !0 && defaultWriterReadyPromiseResolve(e), r._state = "closing", WritableStreamDefaultControllerClose(r._writableStreamController), i;
|
|
}
|
|
|
|
function WritableStreamDefaultWriterCloseWithErrorPropagation(e) {
|
|
var r = e._ownerWritableStream,
|
|
t = r._state;
|
|
return "closing" === t || "closed" === t ? Promise.resolve() : "errored" === t ? Promise.reject(r._storedError) : WritableStreamDefaultWriterClose(e);
|
|
}
|
|
|
|
function WritableStreamDefaultWriterGetDesiredSize(e) {
|
|
var r = e._ownerWritableStream,
|
|
t = r._state;
|
|
return "errored" === t ? null : "closed" === t ? 0 : WritableStreamDefaultControllerGetDesiredSize(r._writableStreamController);
|
|
}
|
|
|
|
function WritableStreamDefaultWriterRelease(e) {
|
|
var r = e._ownerWritableStream,
|
|
t = new TypeError("Writer was released and can no longer be used to monitor the stream's closedness"),
|
|
i = r._state;
|
|
"writable" === i || "closing" === i || void 0 !== r._pendingAbortRequest ? defaultWriterClosedPromiseReject(e, t) : defaultWriterClosedPromiseResetToRejected(e, t), e._closedPromise.catch(function () {}), "writable" === i && WritableStreamDefaultControllerGetBackpressure(r._writableStreamController) === !0 ? defaultWriterReadyPromiseReject(e, t) : defaultWriterReadyPromiseResetToRejected(e, t), e._readyPromise.catch(function () {}), r._writer = void 0, e._ownerWritableStream = void 0;
|
|
}
|
|
|
|
function WritableStreamDefaultWriterWrite(e, r) {
|
|
var t = e._ownerWritableStream,
|
|
i = t._state;
|
|
if ("closed" === i || "errored" === i) return Promise.reject(new TypeError("The stream (in " + i + " state) is not in the writable state and cannot be written to"));
|
|
var o = WritableStreamAddWriteRequest(t);
|
|
return WritableStreamDefaultControllerWrite(t._writableStreamController, r), o;
|
|
}
|
|
|
|
function WritableStreamDefaultControllerAbort(e, r) {
|
|
e._queue = [];
|
|
var t = PromiseInvokeOrFallbackOrNoop(e._underlyingSink, "abort", [r], "close", [e]);
|
|
return t.then(function () {});
|
|
}
|
|
|
|
function WritableStreamDefaultControllerClose(e) {
|
|
EnqueueValueWithSize(e._queue, "close", 0), WritableStreamDefaultControllerAdvanceQueueIfNeeded(e);
|
|
}
|
|
|
|
function WritableStreamDefaultControllerGetDesiredSize(e) {
|
|
var r = GetTotalQueueSize(e._queue);
|
|
return e._strategyHWM - r;
|
|
}
|
|
|
|
function WritableStreamDefaultControllerWrite(e, r) {
|
|
var t = e._controlledWritableStream,
|
|
i = 1;
|
|
if (void 0 !== e._strategySize) try {
|
|
i = e._strategySize(r);
|
|
} catch (r) {
|
|
return void WritableStreamDefaultControllerErrorIfNeeded(e, r);
|
|
}
|
|
var o = {
|
|
chunk: r
|
|
},
|
|
a = WritableStreamDefaultControllerGetBackpressure(e);
|
|
|
|
try {
|
|
EnqueueValueWithSize(e._queue, o, i);
|
|
} catch (r) {
|
|
return void WritableStreamDefaultControllerErrorIfNeeded(e, r);
|
|
}
|
|
|
|
if ("writable" === t._state) {
|
|
var l = WritableStreamDefaultControllerGetBackpressure(e);
|
|
a !== l && WritableStreamUpdateBackpressure(t, l);
|
|
}
|
|
|
|
WritableStreamDefaultControllerAdvanceQueueIfNeeded(e);
|
|
}
|
|
|
|
function IsWritableStreamDefaultController(e) {
|
|
return !!typeIsObject(e) && !!Object.prototype.hasOwnProperty.call(e, "_underlyingSink");
|
|
}
|
|
|
|
function WritableStreamDefaultControllerAdvanceQueueIfNeeded(e) {
|
|
if ("closed" !== e._controlledWritableStream._state && "errored" !== e._controlledWritableStream._state && e._started !== !1 && e._writing !== !0 && 0 !== e._queue.length) {
|
|
var r = PeekQueueValue(e._queue);
|
|
"close" === r ? WritableStreamDefaultControllerProcessClose(e) : WritableStreamDefaultControllerProcessWrite(e, r.chunk);
|
|
}
|
|
}
|
|
|
|
function WritableStreamDefaultControllerErrorIfNeeded(e, r) {
|
|
"writable" !== e._controlledWritableStream._state && "closing" !== e._controlledWritableStream._state || WritableStreamDefaultControllerError(e, r);
|
|
}
|
|
|
|
function WritableStreamDefaultControllerProcessClose(e) {
|
|
var r = e._controlledWritableStream;
|
|
DequeueValue(e._queue), e._inClose = !0;
|
|
var t = PromiseInvokeOrNoop(e._underlyingSink, "close", [e]);
|
|
t.then(function () {
|
|
e._inClose = !1, "closing" !== r._state && "errored" !== r._state || (r._pendingCloseRequest._resolve(void 0), r._pendingCloseRequest = void 0, WritableStreamFinishClose(r));
|
|
}, function (t) {
|
|
e._inClose = !1, r._pendingCloseRequest._reject(t), r._pendingCloseRequest = void 0, void 0 !== r._pendingAbortRequest && (r._pendingAbortRequest._reject(t), r._pendingAbortRequest = void 0), WritableStreamDefaultControllerErrorIfNeeded(e, t);
|
|
}).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
|
|
function WritableStreamDefaultControllerProcessWrite(e, r) {
|
|
e._writing = !0;
|
|
var t = e._controlledWritableStream;
|
|
t._pendingWriteRequest = t._writeRequests.shift();
|
|
var i = PromiseInvokeOrNoop(e._underlyingSink, "write", [r, e]);
|
|
i.then(function () {
|
|
var r = t._state;
|
|
if (e._writing = !1, t._pendingWriteRequest._resolve(void 0), t._pendingWriteRequest = void 0, "errored" === r) return WritableStreamRejectPromisesInReactionToError(t), void (void 0 !== t._pendingAbortRequest && (t._pendingAbortRequest._resolve(), t._pendingAbortRequest = void 0));
|
|
var i = WritableStreamDefaultControllerGetBackpressure(e);
|
|
|
|
if (DequeueValue(e._queue), "closing" !== r) {
|
|
var o = WritableStreamDefaultControllerGetBackpressure(e);
|
|
i !== o && WritableStreamUpdateBackpressure(e._controlledWritableStream, o);
|
|
}
|
|
|
|
WritableStreamDefaultControllerAdvanceQueueIfNeeded(e);
|
|
}, function (r) {
|
|
e._writing = !1, t._pendingWriteRequest._reject(r), t._pendingWriteRequest = void 0, "errored" === t._state && (t._storedError = r, WritableStreamRejectPromisesInReactionToError(t)), void 0 !== t._pendingAbortRequest && (t._pendingAbortRequest._reject(r), t._pendingAbortRequest = void 0), WritableStreamDefaultControllerErrorIfNeeded(e, r);
|
|
}).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
|
|
function WritableStreamDefaultControllerGetBackpressure(e) {
|
|
var r = WritableStreamDefaultControllerGetDesiredSize(e);
|
|
return r <= 0;
|
|
}
|
|
|
|
function WritableStreamDefaultControllerError(e, r) {
|
|
var t = e._controlledWritableStream;
|
|
WritableStreamError(t, r), e._queue = [];
|
|
}
|
|
|
|
function streamBrandCheckException(e) {
|
|
return new TypeError("WritableStream.prototype." + e + " can only be used on a WritableStream");
|
|
}
|
|
|
|
function defaultWriterBrandCheckException(e) {
|
|
return new TypeError("WritableStreamDefaultWriter.prototype." + e + " can only be used on a WritableStreamDefaultWriter");
|
|
}
|
|
|
|
function defaultWriterLockException(e) {
|
|
return new TypeError("Cannot " + e + " a stream using a released writer");
|
|
}
|
|
|
|
function defaultWriterClosedPromiseInitialize(e) {
|
|
e._closedPromise = new Promise(function (r, t) {
|
|
e._closedPromise_resolve = r, e._closedPromise_reject = t;
|
|
});
|
|
}
|
|
|
|
function defaultWriterClosedPromiseInitializeAsRejected(e, r) {
|
|
e._closedPromise = Promise.reject(r), e._closedPromise_resolve = void 0, e._closedPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultWriterClosedPromiseInitializeAsResolved(e) {
|
|
e._closedPromise = Promise.resolve(void 0), e._closedPromise_resolve = void 0, e._closedPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultWriterClosedPromiseReject(e, r) {
|
|
e._closedPromise_reject(r), e._closedPromise_resolve = void 0, e._closedPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultWriterClosedPromiseResetToRejected(e, r) {
|
|
e._closedPromise = Promise.reject(r);
|
|
}
|
|
|
|
function defaultWriterClosedPromiseResolve(e) {
|
|
e._closedPromise_resolve(void 0), e._closedPromise_resolve = void 0, e._closedPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultWriterReadyPromiseInitialize(e) {
|
|
e._readyPromise = new Promise(function (r, t) {
|
|
e._readyPromise_resolve = r, e._readyPromise_reject = t;
|
|
});
|
|
}
|
|
|
|
function defaultWriterReadyPromiseInitializeAsResolved(e) {
|
|
e._readyPromise = Promise.resolve(void 0), e._readyPromise_resolve = void 0, e._readyPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultWriterReadyPromiseReject(e, r) {
|
|
e._readyPromise_reject(r), e._readyPromise_resolve = void 0, e._readyPromise_reject = void 0;
|
|
}
|
|
|
|
function defaultWriterReadyPromiseReset(e) {
|
|
e._readyPromise = new Promise(function (r, t) {
|
|
e._readyPromise_resolve = r, e._readyPromise_reject = t;
|
|
});
|
|
}
|
|
|
|
function defaultWriterReadyPromiseResetToRejected(e, r) {
|
|
e._readyPromise = Promise.reject(r);
|
|
}
|
|
|
|
function defaultWriterReadyPromiseResolve(e) {
|
|
e._readyPromise_resolve(void 0), e._readyPromise_resolve = void 0, e._readyPromise_reject = void 0;
|
|
}
|
|
|
|
var _createClass = function () {
|
|
function e(e, r) {
|
|
for (var t = 0; t < r.length; t++) {
|
|
var i = r[t];
|
|
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(e, i.key, i);
|
|
}
|
|
}
|
|
|
|
return function (r, t, i) {
|
|
return t && e(r.prototype, t), i && e(r, i), r;
|
|
};
|
|
}(),
|
|
_require = _dereq_("./helpers.js"),
|
|
InvokeOrNoop = _require.InvokeOrNoop,
|
|
PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
|
|
PromiseInvokeOrFallbackOrNoop = _require.PromiseInvokeOrFallbackOrNoop,
|
|
ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,
|
|
typeIsObject = _require.typeIsObject,
|
|
_require2 = _dereq_("./utils.js"),
|
|
rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection,
|
|
_require3 = _dereq_("./queue-with-sizes.js"),
|
|
DequeueValue = _require3.DequeueValue,
|
|
EnqueueValueWithSize = _require3.EnqueueValueWithSize,
|
|
GetTotalQueueSize = _require3.GetTotalQueueSize,
|
|
PeekQueueValue = _require3.PeekQueueValue,
|
|
WritableStream = function () {
|
|
function e() {
|
|
var r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
|
|
i = t.size,
|
|
o = t.highWaterMark,
|
|
a = void 0 === o ? 1 : o;
|
|
_classCallCheck(this, e), this._state = "writable", this._storedError = void 0, this._writer = void 0, this._writableStreamController = void 0, this._writeRequests = [], this._pendingWriteRequest = void 0, this._pendingCloseRequest = void 0, this._pendingAbortRequest = void 0;
|
|
var l = r.type;
|
|
if (void 0 !== l) throw new RangeError("Invalid type is specified");
|
|
this._writableStreamController = new WritableStreamDefaultController(this, r, i, a);
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "abort",
|
|
value: function (e) {
|
|
return IsWritableStream(this) === !1 ? Promise.reject(streamBrandCheckException("abort")) : IsWritableStreamLocked(this) === !0 ? Promise.reject(new TypeError("Cannot abort a stream that already has a writer")) : WritableStreamAbort(this, e);
|
|
}
|
|
}, {
|
|
key: "getWriter",
|
|
value: function () {
|
|
if (IsWritableStream(this) === !1) throw streamBrandCheckException("getWriter");
|
|
return AcquireWritableStreamDefaultWriter(this);
|
|
}
|
|
}, {
|
|
key: "locked",
|
|
get: function () {
|
|
if (IsWritableStream(this) === !1) throw streamBrandCheckException("locked");
|
|
return IsWritableStreamLocked(this);
|
|
}
|
|
}]), e;
|
|
}();
|
|
|
|
module.exports = {
|
|
AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter,
|
|
IsWritableStream: IsWritableStream,
|
|
IsWritableStreamLocked: IsWritableStreamLocked,
|
|
WritableStream: WritableStream,
|
|
WritableStreamAbort: WritableStreamAbort,
|
|
WritableStreamDefaultControllerError: WritableStreamDefaultControllerError,
|
|
WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation,
|
|
WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease,
|
|
WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite
|
|
};
|
|
|
|
var WritableStreamDefaultWriter = function () {
|
|
function e(r) {
|
|
if (_classCallCheck(this, e), IsWritableStream(r) === !1) throw new TypeError("WritableStreamDefaultWriter can only be constructed with a WritableStream instance");
|
|
if (IsWritableStreamLocked(r) === !0) throw new TypeError("This stream has already been locked for exclusive writing by another writer");
|
|
this._ownerWritableStream = r, r._writer = this;
|
|
var t = r._state;
|
|
"writable" === t || "closing" === t ? defaultWriterClosedPromiseInitialize(this) : "closed" === t ? defaultWriterClosedPromiseInitializeAsResolved(this) : (defaultWriterClosedPromiseInitializeAsRejected(this, r._storedError), this._closedPromise.catch(function () {})), "writable" === t && WritableStreamDefaultControllerGetBackpressure(r._writableStreamController) === !0 ? defaultWriterReadyPromiseInitialize(this) : defaultWriterReadyPromiseInitializeAsResolved(this, void 0);
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "abort",
|
|
value: function (e) {
|
|
return IsWritableStreamDefaultWriter(this) === !1 ? Promise.reject(defaultWriterBrandCheckException("abort")) : void 0 === this._ownerWritableStream ? Promise.reject(defaultWriterLockException("abort")) : WritableStreamDefaultWriterAbort(this, e);
|
|
}
|
|
}, {
|
|
key: "close",
|
|
value: function () {
|
|
if (IsWritableStreamDefaultWriter(this) === !1) return Promise.reject(defaultWriterBrandCheckException("close"));
|
|
var e = this._ownerWritableStream;
|
|
return void 0 === e ? Promise.reject(defaultWriterLockException("close")) : "closing" === e._state ? Promise.reject(new TypeError("cannot close an already-closing stream")) : WritableStreamDefaultWriterClose(this);
|
|
}
|
|
}, {
|
|
key: "releaseLock",
|
|
value: function () {
|
|
if (IsWritableStreamDefaultWriter(this) === !1) throw defaultWriterBrandCheckException("releaseLock");
|
|
var e = this._ownerWritableStream;
|
|
void 0 !== e && WritableStreamDefaultWriterRelease(this);
|
|
}
|
|
}, {
|
|
key: "write",
|
|
value: function (e) {
|
|
if (IsWritableStreamDefaultWriter(this) === !1) return Promise.reject(defaultWriterBrandCheckException("write"));
|
|
var r = this._ownerWritableStream;
|
|
return void 0 === r ? Promise.reject(defaultWriterLockException("write to")) : "closing" === r._state ? Promise.reject(new TypeError("Cannot write to an already-closed stream")) : WritableStreamDefaultWriterWrite(this, e);
|
|
}
|
|
}, {
|
|
key: "closed",
|
|
get: function () {
|
|
return IsWritableStreamDefaultWriter(this) === !1 ? Promise.reject(defaultWriterBrandCheckException("closed")) : this._closedPromise;
|
|
}
|
|
}, {
|
|
key: "desiredSize",
|
|
get: function () {
|
|
if (IsWritableStreamDefaultWriter(this) === !1) throw defaultWriterBrandCheckException("desiredSize");
|
|
if (void 0 === this._ownerWritableStream) throw defaultWriterLockException("desiredSize");
|
|
return WritableStreamDefaultWriterGetDesiredSize(this);
|
|
}
|
|
}, {
|
|
key: "ready",
|
|
get: function () {
|
|
return IsWritableStreamDefaultWriter(this) === !1 ? Promise.reject(defaultWriterBrandCheckException("ready")) : this._readyPromise;
|
|
}
|
|
}]), e;
|
|
}(),
|
|
WritableStreamDefaultController = function () {
|
|
function e(r, t, i, o) {
|
|
if (_classCallCheck(this, e), IsWritableStream(r) === !1) throw new TypeError("WritableStreamDefaultController can only be constructed with a WritableStream instance");
|
|
if (void 0 !== r._writableStreamController) throw new TypeError("WritableStreamDefaultController instances can only be created by the WritableStream constructor");
|
|
this._controlledWritableStream = r, this._underlyingSink = t, this._queue = [], this._started = !1, this._writing = !1, this._inClose = !1;
|
|
var a = ValidateAndNormalizeQueuingStrategy(i, o);
|
|
this._strategySize = a.size, this._strategyHWM = a.highWaterMark;
|
|
var l = WritableStreamDefaultControllerGetBackpressure(this);
|
|
l === !0 && WritableStreamUpdateBackpressure(r, l);
|
|
var n = this,
|
|
s = InvokeOrNoop(t, "start", [this]);
|
|
Promise.resolve(s).then(function () {
|
|
n._started = !0, WritableStreamDefaultControllerAdvanceQueueIfNeeded(n);
|
|
}, function (e) {
|
|
WritableStreamDefaultControllerErrorIfNeeded(n, e);
|
|
}).catch(rethrowAssertionErrorRejection);
|
|
}
|
|
|
|
return _createClass(e, [{
|
|
key: "error",
|
|
value: function (e) {
|
|
if (IsWritableStreamDefaultController(this) === !1) throw new TypeError("WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController");
|
|
var r = this._controlledWritableStream._state;
|
|
if ("closed" === r || "errored" === r) throw new TypeError("The stream is " + r + " and so cannot be errored");
|
|
WritableStreamDefaultControllerError(this, e);
|
|
}
|
|
}]), e;
|
|
}();
|
|
}, {
|
|
"./helpers.js": 5,
|
|
"./queue-with-sizes.js": 6,
|
|
"./utils.js": 2
|
|
}]
|
|
}, {}, [1])(1);
|
|
});
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack/buildin/global.js":
|
|
/*!***********************************!*\
|
|
!*** (webpack)/buildin/global.js ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
var g; // This works in non-strict mode
|
|
|
|
g = function () {
|
|
return this;
|
|
}();
|
|
|
|
try {
|
|
// This works if eval is allowed (see CSP)
|
|
g = g || new Function("return this")();
|
|
} catch (e) {
|
|
// This works if the window reference is available
|
|
if (typeof window === "object") g = window;
|
|
} // g can still be undefined, but nothing to do about it...
|
|
// We return undefined, instead of nothing here, so it's
|
|
// easier to handle this case. if(!global) { ...}
|
|
|
|
|
|
module.exports = g;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/filesystem.json":
|
|
/*!*****************************!*\
|
|
!*** ./src/filesystem.json ***!
|
|
\*****************************/
|
|
/*! exports provided: article.cls, sample.tex, size10.clo, tex.pool, default */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = {"article.cls":"JSUKJSUgVGhpcyBpcyBmaWxlIGBhcnRpY2xlLmNscycsCiUlIGdlbmVyYXRlZCB3aXRoIHRoZSBkb2NzdHJpcCB1dGlsaXR5LgolJQolJSBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGVzIHdlcmU6CiUlCiUlIGNsYXNzZXMuZHR4ICAod2l0aCBvcHRpb25zOiBgYXJ0aWNsZScpCiUlIAolJSBUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGUuCiUlIAolJSBUaGUgc291cmNlIGlzIG1haW50YWluZWQgYnkgdGhlIExhVGVYIFByb2plY3QgdGVhbSBhbmQgYnVnCiUlIHJlcG9ydHMgZm9yIGl0IGNhbiBiZSBvcGVuZWQgYXQgaHR0cHM6Ly9sYXRleC1wcm9qZWN0Lm9yZy9idWdzLmh0bWwKJSUgKGJ1dCBwbGVhc2Ugb2JzZXJ2ZSBjb25kaXRpb25zIG9uIGJ1ZyByZXBvcnRzIHNlbnQgdG8gdGhhdCBhZGRyZXNzISkKJSUgCiUlIAolJSBDb3B5cmlnaHQgMTk5My0yMDE3CiUlIFRoZSBMYVRlWDMgUHJvamVjdCBhbmQgYW55IGluZGl2aWR1YWwgYXV0aG9ycyBsaXN0ZWQgZWxzZXdoZXJlCiUlIGluIHRoaXMgZmlsZS4KJSUgCiUlIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZyb20gZmlsZShzKSBvZiB0aGUgTGFUZVggYmFzZSBzeXN0ZW0uCiUlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiUlIAolJSBJdCBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQolJSBjb25kaXRpb25zIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlLCBlaXRoZXIgdmVyc2lvbiAxLjNjCiUlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgolJSBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIGluCiUlICAgIGh0dHBzOi8vd3d3LmxhdGV4LXByb2plY3Qub3JnL2xwcGwudHh0CiUlIGFuZCB2ZXJzaW9uIDEuM2Mgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWAolJSB2ZXJzaW9uIDIwMDUvMTIvMDEgb3IgbGF0ZXIuCiUlIAolJSBUaGlzIGZpbGUgaGFzIHRoZSBMUFBMIG1haW50ZW5hbmNlIHN0YXR1cyAibWFpbnRhaW5lZCIuCiUlIAolJSBUaGlzIGZpbGUgbWF5IG9ubHkgYmUgZGlzdHJpYnV0ZWQgdG9nZXRoZXIgd2l0aCBhIGNvcHkgb2YgdGhlIExhVGVYCiUlIGJhc2Ugc3lzdGVtLiBZb3UgbWF5IGhvd2V2ZXIgZGlzdHJpYnV0ZSB0aGUgTGFUZVggYmFzZSBzeXN0ZW0gd2l0aG91dAolJSBzdWNoIGdlbmVyYXRlZCBmaWxlcy4KJSUgCiUlIFRoZSBsaXN0IG9mIGFsbCBmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIExhVGVYIGJhc2UgZGlzdHJpYnV0aW9uIGlzCiUlIGdpdmVuIGluIHRoZSBmaWxlIGBtYW5pZmVzdC50eHQnLiBTZWUgYWxzbyBgbGVnYWwudHh0JyBmb3IgYWRkaXRpb25hbAolJSBpbmZvcm1hdGlvbi4KJSUgCiUlIFRoZSBsaXN0IG9mIGRlcml2ZWQgKHVucGFja2VkKSBmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbgolJSBhbmQgY292ZXJlZCBieSBMUFBMIGlzIGRlZmluZWQgYnkgdGhlIHVucGFja2luZyBzY3JpcHRzICh3aXRoCiUlIGV4dGVuc2lvbiAuaW5zKSB3aGljaCBhcmUgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uLgpcTmVlZHNUZVhGb3JtYXR7TGFUZVgyZX1bMTk5NS8xMi8wMV0KXFByb3ZpZGVzQ2xhc3N7YXJ0aWNsZX0KICAgICAgICAgICAgICBbMjAxNC8wOS8yOSB2MS40aAogU3RhbmRhcmQgTGFUZVggZG9jdW1lbnQgY2xhc3NdClxuZXdjb21tYW5kXEBwdHNpemV7fQpcbmV3aWZcaWZAcmVzdG9uZWNvbApcbmV3aWZcaWZAdGl0bGVwYWdlClxAdGl0bGVwYWdlZmFsc2UKXGlmQGNvbXBhdGliaWxpdHlcZWxzZQpcRGVjbGFyZU9wdGlvbnthNHBhcGVyfQogICB7XHNldGxlbmd0aFxwYXBlcmhlaWdodCB7Mjk3bW19JQogICAgXHNldGxlbmd0aFxwYXBlcndpZHRoICB7MjEwbW19fQpcRGVjbGFyZU9wdGlvbnthNXBhcGVyfQogICB7XHNldGxlbmd0aFxwYXBlcmhlaWdodCB7MjEwbW19JQogICAgXHNldGxlbmd0aFxwYXBlcndpZHRoICB7MTQ4bW19fQpcRGVjbGFyZU9wdGlvbntiNXBhcGVyfQogICB7XHNldGxlbmd0aFxwYXBlcmhlaWdodCB7MjUwbW19JQogICAgXHNldGxlbmd0aFxwYXBlcndpZHRoICB7MTc2bW19fQpcRGVjbGFyZU9wdGlvbntsZXR0ZXJwYXBlcn0KICAge1xzZXRsZW5ndGhccGFwZXJoZWlnaHQgezExaW59JQogICAgXHNldGxlbmd0aFxwYXBlcndpZHRoICB7OC41aW59fQpcRGVjbGFyZU9wdGlvbntsZWdhbHBhcGVyfQogICB7XHNldGxlbmd0aFxwYXBlcmhlaWdodCB7MTRpbn0lCiAgICBcc2V0bGVuZ3RoXHBhcGVyd2lkdGggIHs4LjVpbn19ClxEZWNsYXJlT3B0aW9ue2V4ZWN1dGl2ZXBhcGVyfQogICB7XHNldGxlbmd0aFxwYXBlcmhlaWdodCB7MTAuNWlufSUKICAgIFxzZXRsZW5ndGhccGFwZXJ3aWR0aCAgezcuMjVpbn19ClxEZWNsYXJlT3B0aW9ue2xhbmRzY2FwZX0KICAge1xzZXRsZW5ndGhcQHRlbXBkaW1hICAge1xwYXBlcmhlaWdodH0lCiAgICBcc2V0bGVuZ3RoXHBhcGVyaGVpZ2h0IHtccGFwZXJ3aWR0aH0lCiAgICBcc2V0bGVuZ3RoXHBhcGVyd2lkdGggIHtcQHRlbXBkaW1hfX0KXGZpClxpZkBjb21wYXRpYmlsaXR5CiAgXHJlbmV3Y29tbWFuZFxAcHRzaXplezB9ClxlbHNlClxEZWNsYXJlT3B0aW9uezEwcHR9e1xyZW5ld2NvbW1hbmRcQHB0c2l6ZXswfX0KXGZpClxEZWNsYXJlT3B0aW9uezExcHR9e1xyZW5ld2NvbW1hbmRcQHB0c2l6ZXsxfX0KXERlY2xhcmVPcHRpb257MTJwdH17XHJlbmV3Y29tbWFuZFxAcHRzaXplezJ9fQpcaWZAY29tcGF0aWJpbGl0eVxlbHNlClxEZWNsYXJlT3B0aW9ue29uZXNpZGV9e1xAdHdvc2lkZWZhbHNlIFxAbXBhcnN3aXRjaGZhbHNlfQpcZmkKXERlY2xhcmVPcHRpb257dHdvc2lkZX17XEB0d29zaWRldHJ1ZSAgXEBtcGFyc3dpdGNodHJ1ZX0KXERlY2xhcmVPcHRpb257ZHJhZnR9e1xzZXRsZW5ndGhcb3ZlcmZ1bGxydWxlezVwdH19ClxpZkBjb21wYXRpYmlsaXR5XGVsc2UKXERlY2xhcmVPcHRpb257ZmluYWx9e1xzZXRsZW5ndGhcb3ZlcmZ1bGxydWxlezBwdH19ClxmaQpcRGVjbGFyZU9wdGlvbnt0aXRsZXBhZ2V9e1xAdGl0bGVwYWdldHJ1ZX0KXGlmQGNvbXBhdGliaWxpdHlcZWxzZQpcRGVjbGFyZU9wdGlvbntub3RpdGxlcGFnZX17XEB0aXRsZXBhZ2VmYWxzZX0KXGZpClxpZkBjb21wYXRpYmlsaXR5XGVsc2UKXERlY2xhcmVPcHRpb257b25lY29sdW1ufXtcQHR3b2NvbHVtbmZhbHNlfQpcZmkKXERlY2xhcmVPcHRpb257dHdvY29sdW1ufXtcQHR3b2NvbHVtbnRydWV9ClxEZWNsYXJlT3B0aW9ue2xlcW5vfXtcaW5wdXR7bGVxbm8uY2xvfX0KXERlY2xhcmVPcHRpb257ZmxlcW59e1xpbnB1dHtmbGVxbi5jbG99fQpcRGVjbGFyZU9wdGlvbntvcGVuYmlifXslCiAgXEF0RW5kT2ZQYWNrYWdleyUKICAgXHJlbmV3Y29tbWFuZFxAb3BlbmJpYkBjb2RleyUKICAgICAgXGFkdmFuY2VcbGVmdG1hcmdpblxiaWJpbmRlbnQKICAgICAgXGl0ZW1pbmRlbnQgLVxiaWJpbmRlbnQKICAgICAgXGxpc3RwYXJpbmRlbnQgXGl0ZW1pbmRlbnQKICAgICAgXHBhcnNlcCBcekAKICAgICAgfSUKICAgXHJlbmV3Y29tbWFuZFxuZXdibG9ja3tccGFyfX0lCn0KXEV4ZWN1dGVPcHRpb25ze2xldHRlcnBhcGVyLDEwcHQsb25lc2lkZSxvbmVjb2x1bW4sZmluYWx9ClxQcm9jZXNzT3B0aW9ucwpcaW5wdXR7c2l6ZTFcQHB0c2l6ZS5jbG99ClxzZXRsZW5ndGhcbGluZXNraXB7MVxwQH0KXHNldGxlbmd0aFxub3JtYWxsaW5lc2tpcHsxXHBAfQpccmVuZXdjb21tYW5kXGJhc2VsaW5lc3RyZXRjaHt9ClxzZXRsZW5ndGhccGFyc2tpcHswXHBAIFxAcGx1cyBccEB9ClxAbG93cGVuYWx0eSAgIDUxClxAbWVkcGVuYWx0eSAgMTUxClxAaGlnaHBlbmFsdHkgMzAxClxzZXRjb3VudGVye3RvcG51bWJlcn17Mn0KXHJlbmV3Y29tbWFuZFx0b3BmcmFjdGlvbnsuN30KXHNldGNvdW50ZXJ7Ym90dG9tbnVtYmVyfXsxfQpccmVuZXdjb21tYW5kXGJvdHRvbWZyYWN0aW9uey4zfQpcc2V0Y291bnRlcnt0b3RhbG51bWJlcn17M30KXHJlbmV3Y29tbWFuZFx0ZXh0ZnJhY3Rpb257LjJ9ClxyZW5ld2NvbW1hbmRcZmxvYXRwYWdlZnJhY3Rpb257LjV9ClxzZXRjb3VudGVye2RibHRvcG51bWJlcn17Mn0KXHJlbmV3Y29tbWFuZFxkYmx0b3BmcmFjdGlvbnsuN30KXHJlbmV3Y29tbWFuZFxkYmxmbG9hdHBhZ2VmcmFjdGlvbnsuNX0KXGlmQHR3b3NpZGUKICBcZGVmXHBzQGhlYWRpbmdzeyUKICAgICAgXGxldFxAb2RkZm9vdFxAZW1wdHlcbGV0XEBldmVuZm9vdFxAZW1wdHkKICAgICAgXGRlZlxAZXZlbmhlYWR7XHRoZXBhZ2VcaGZpbFxzbHNoYXBlXGxlZnRtYXJrfSUKICAgICAgXGRlZlxAb2RkaGVhZHt7XHNsc2hhcGVccmlnaHRtYXJrfVxoZmlsXHRoZXBhZ2V9JQogICAgICBcbGV0XEBta2JvdGhcbWFya2JvdGgKICAgIFxkZWZcc2VjdGlvbm1hcmsjIzF7JQogICAgICBcbWFya2JvdGgge1xNYWtlVXBwZXJjYXNleyUKICAgICAgICBcaWZudW0gXGNAc2VjbnVtZGVwdGggPlx6QAogICAgICAgICAgXHRoZXNlY3Rpb25ccXVhZAogICAgICAgIFxmaQogICAgICAgICMjMX19e319JQogICAgXGRlZlxzdWJzZWN0aW9ubWFyayMjMXslCiAgICAgIFxtYXJrcmlnaHQgeyUKICAgICAgICBcaWZudW0gXGNAc2VjbnVtZGVwdGggPlxAbmUKICAgICAgICAgIFx0aGVzdWJzZWN0aW9uXHF1YWQKICAgICAgICBcZmkKICAgICAgICAjIzF9fX0KXGVsc2UKICBcZGVmXHBzQGhlYWRpbmdzeyUKICAgIFxsZXRcQG9kZGZvb3RcQGVtcHR5CiAgICBcZGVmXEBvZGRoZWFke3tcc2xzaGFwZVxyaWdodG1hcmt9XGhmaWxcdGhlcGFnZX0lCiAgICBcbGV0XEBta2JvdGhcbWFya2JvdGgKICAgIFxkZWZcc2VjdGlvbm1hcmsjIzF7JQogICAgICBcbWFya3JpZ2h0IHtcTWFrZVVwcGVyY2FzZXslCiAgICAgICAgXGlmbnVtIFxjQHNlY251bWRlcHRoID5cbUBuZQogICAgICAgICAgXHRoZXNlY3Rpb25ccXVhZAogICAgICAgIFxmaQogICAgICAgICMjMX19fX0KXGZpClxkZWZccHNAbXloZWFkaW5nc3slCiAgICBcbGV0XEBvZGRmb290XEBlbXB0eVxsZXRcQGV2ZW5mb290XEBlbXB0eQogICAgXGRlZlxAZXZlbmhlYWR7XHRoZXBhZ2VcaGZpbFxzbHNoYXBlXGxlZnRtYXJrfSUKICAgIFxkZWZcQG9kZGhlYWR7e1xzbHNoYXBlXHJpZ2h0bWFya31caGZpbFx0aGVwYWdlfSUKICAgIFxsZXRcQG1rYm90aFxAZ29iYmxldHdvCiAgICBcbGV0XHNlY3Rpb25tYXJrXEBnb2JibGUKICAgIFxsZXRcc3Vic2VjdGlvbm1hcmtcQGdvYmJsZQogICAgfQogIFxpZkB0aXRsZXBhZ2UKICBcbmV3Y29tbWFuZFxtYWtldGl0bGV7XGJlZ2lue3RpdGxlcGFnZX0lCiAgXGxldFxmb290bm90ZXNpemVcc21hbGwKICBcbGV0XGZvb3Rub3RlcnVsZVxyZWxheAogIFxsZXQgXGZvb3Rub3RlIFx0aGFua3MKICBcbnVsbFx2ZmlsCiAgXHZza2lwIDYwXHBACiAgXGJlZ2lue2NlbnRlcn0lCiAgICB7XExBUkdFIFxAdGl0bGUgXHBhcn0lCiAgICBcdnNraXAgM2VtJQogICAge1xsYXJnZQogICAgIFxsaW5lc2tpcCAuNzVlbSUKICAgICAgXGJlZ2lue3RhYnVsYXJ9W3Rde2N9JQogICAgICAgIFxAYXV0aG9yCiAgICAgIFxlbmR7dGFidWxhcn1ccGFyfSUKICAgICAgXHZza2lwIDEuNWVtJQogICAge1xsYXJnZSBcQGRhdGUgXHBhcn0lICAgICAgICUgU2V0IGRhdGUgaW4gXGxhcmdlIHNpemUuCiAgXGVuZHtjZW50ZXJ9XHBhcgogIFxAdGhhbmtzCiAgXHZmaWxcbnVsbAogIFxlbmR7dGl0bGVwYWdlfSUKICBcc2V0Y291bnRlcntmb290bm90ZX17MH0lCiAgXGdsb2JhbFxsZXRcdGhhbmtzXHJlbGF4CiAgXGdsb2JhbFxsZXRcbWFrZXRpdGxlXHJlbGF4CiAgXGdsb2JhbFxsZXRcQHRoYW5rc1xAZW1wdHkKICBcZ2xvYmFsXGxldFxAYXV0aG9yXEBlbXB0eQogIFxnbG9iYWxcbGV0XEBkYXRlXEBlbXB0eQogIFxnbG9iYWxcbGV0XEB0aXRsZVxAZW1wdHkKICBcZ2xvYmFsXGxldFx0aXRsZVxyZWxheAogIFxnbG9iYWxcbGV0XGF1dGhvclxyZWxheAogIFxnbG9iYWxcbGV0XGRhdGVccmVsYXgKICBcZ2xvYmFsXGxldFxhbmRccmVsYXgKfQpcZWxzZQpcbmV3Y29tbWFuZFxtYWtldGl0bGV7XHBhcgogIFxiZWdpbmdyb3VwCiAgICBccmVuZXdjb21tYW5kXHRoZWZvb3Rub3Rle1xAZm5zeW1ib2xcY0Bmb290bm90ZX0lCiAgICBcZGVmXEBtYWtlZm5tYXJre1xybGFwe1xAdGV4dHN1cGVyc2NyaXB0e1xub3JtYWxmb250XEB0aGVmbm1hcmt9fX0lCiAgICBcbG9uZ1xkZWZcQG1ha2VmbnRleHQjIzF7XHBhcmluZGVudCAxZW1cbm9pbmRlbnQKICAgICAgICAgICAgXGhiQHh0QDEuOGVteyUKICAgICAgICAgICAgICAgIFxoc3NcQHRleHRzdXBlcnNjcmlwdHtcbm9ybWFsZm9udFxAdGhlZm5tYXJrfX0jIzF9JQogICAgXGlmQHR3b2NvbHVtbgogICAgICBcaWZudW0gXGNvbEBudW1iZXI9XEBuZQogICAgICAgIFxAbWFrZXRpdGxlCiAgICAgIFxlbHNlCiAgICAgICAgXHR3b2NvbHVtbltcQG1ha2V0aXRsZV0lCiAgICAgIFxmaQogICAgXGVsc2UKICAgICAgXG5ld3BhZ2UKICAgICAgXGdsb2JhbFxAdG9wbnVtXHpAICAgJSBQcmV2ZW50cyBmaWd1cmVzIGZyb20gZ29pbmcgYXQgdG9wIG9mIHBhZ2UuCiAgICAgIFxAbWFrZXRpdGxlCiAgICBcZmkKICAgIFx0aGlzcGFnZXN0eWxle3BsYWlufVxAdGhhbmtzCiAgXGVuZGdyb3VwCiAgXHNldGNvdW50ZXJ7Zm9vdG5vdGV9ezB9JQogIFxnbG9iYWxcbGV0XHRoYW5rc1xyZWxheAogIFxnbG9iYWxcbGV0XG1ha2V0aXRsZVxyZWxheAogIFxnbG9iYWxcbGV0XEBtYWtldGl0bGVccmVsYXgKICBcZ2xvYmFsXGxldFxAdGhhbmtzXEBlbXB0eQogIFxnbG9iYWxcbGV0XEBhdXRob3JcQGVtcHR5CiAgXGdsb2JhbFxsZXRcQGRhdGVcQGVtcHR5CiAgXGdsb2JhbFxsZXRcQHRpdGxlXEBlbXB0eQogIFxnbG9iYWxcbGV0XHRpdGxlXHJlbGF4CiAgXGdsb2JhbFxsZXRcYXV0aG9yXHJlbGF4CiAgXGdsb2JhbFxsZXRcZGF0ZVxyZWxheAogIFxnbG9iYWxcbGV0XGFuZFxyZWxheAp9ClxkZWZcQG1ha2V0aXRsZXslCiAgXG5ld3BhZ2UKICBcbnVsbAogIFx2c2tpcCAyZW0lCiAgXGJlZ2lue2NlbnRlcn0lCiAgXGxldCBcZm9vdG5vdGUgXHRoYW5rcwogICAge1xMQVJHRSBcQHRpdGxlIFxwYXJ9JQogICAgXHZza2lwIDEuNWVtJQogICAge1xsYXJnZQogICAgICBcbGluZXNraXAgLjVlbSUKICAgICAgXGJlZ2lue3RhYnVsYXJ9W3Rde2N9JQogICAgICAgIFxAYXV0aG9yCiAgICAgIFxlbmR7dGFidWxhcn1ccGFyfSUKICAgIFx2c2tpcCAxZW0lCiAgICB7XGxhcmdlIFxAZGF0ZX0lCiAgXGVuZHtjZW50ZXJ9JQogIFxwYXIKICBcdnNraXAgMS41ZW19ClxmaQpcc2V0Y291bnRlcntzZWNudW1kZXB0aH17M30KXG5ld2NvdW50ZXIge3BhcnR9ClxuZXdjb3VudGVyIHtzZWN0aW9ufQpcbmV3Y291bnRlciB7c3Vic2VjdGlvbn1bc2VjdGlvbl0KXG5ld2NvdW50ZXIge3N1YnN1YnNlY3Rpb259W3N1YnNlY3Rpb25dClxuZXdjb3VudGVyIHtwYXJhZ3JhcGh9W3N1YnN1YnNlY3Rpb25dClxuZXdjb3VudGVyIHtzdWJwYXJhZ3JhcGh9W3BhcmFncmFwaF0KXHJlbmV3Y29tbWFuZCBcdGhlcGFydCB7XEBSb21hblxjQHBhcnR9ClxyZW5ld2NvbW1hbmQgXHRoZXNlY3Rpb24ge1xAYXJhYmljXGNAc2VjdGlvbn0KXHJlbmV3Y29tbWFuZFx0aGVzdWJzZWN0aW9uICAge1x0aGVzZWN0aW9uLlxAYXJhYmljXGNAc3Vic2VjdGlvbn0KXHJlbmV3Y29tbWFuZFx0aGVzdWJzdWJzZWN0aW9ue1x0aGVzdWJzZWN0aW9uLlxAYXJhYmljXGNAc3Vic3Vic2VjdGlvbn0KXHJlbmV3Y29tbWFuZFx0aGVwYXJhZ3JhcGggICAge1x0aGVzdWJzdWJzZWN0aW9uLlxAYXJhYmljXGNAcGFyYWdyYXBofQpccmVuZXdjb21tYW5kXHRoZXN1YnBhcmFncmFwaCB7XHRoZXBhcmFncmFwaC5cQGFyYWJpY1xjQHN1YnBhcmFncmFwaH0KXG5ld2NvbW1hbmRccGFydHslCiAgIFxpZkBub3NraXBzZWMgXGxlYXZldm1vZGUgXGZpCiAgIFxwYXIKICAgXGFkZHZzcGFjZXs0ZXh9JQogICBcQGFmdGVyaW5kZW50ZmFsc2UKICAgXHNlY2RlZlxAcGFydFxAc3BhcnR9CgpcZGVmXEBwYXJ0WyMxXSMyeyUKICAgIFxpZm51bSBcY0BzZWNudW1kZXB0aCA+XG1AbmUKICAgICAgXHJlZnN0ZXBjb3VudGVye3BhcnR9JQogICAgICBcYWRkY29udGVudHNsaW5le3RvY317cGFydH17XHRoZXBhcnRcaHNwYWNlezFlbX0jMX0lCiAgICBcZWxzZQogICAgICBcYWRkY29udGVudHNsaW5le3RvY317cGFydH17IzF9JQogICAgXGZpCiAgICB7XHBhcmluZGVudCBcekAgXHJhZ2dlZHJpZ2h0CiAgICAgXGludGVybGluZXBlbmFsdHkgXEBNCiAgICAgXG5vcm1hbGZvbnQKICAgICBcaWZudW0gXGNAc2VjbnVtZGVwdGggPlxtQG5lCiAgICAgICBcTGFyZ2VcYmZzZXJpZXMgXHBhcnRuYW1lXG5vYnJlYWtzcGFjZVx0aGVwYXJ0CiAgICAgICBccGFyXG5vYnJlYWsKICAgICBcZmkKICAgICBcaHVnZSBcYmZzZXJpZXMgIzIlCiAgICAgXG1hcmtib3Roe317fVxwYXJ9JQogICAgXG5vYnJlYWsKICAgIFx2c2tpcCAzZXgKICAgIFxAYWZ0ZXJoZWFkaW5nfQpcZGVmXEBzcGFydCMxeyUKICAgIHtccGFyaW5kZW50IFx6QCBccmFnZ2VkcmlnaHQKICAgICBcaW50ZXJsaW5lcGVuYWx0eSBcQE0KICAgICBcbm9ybWFsZm9udAogICAgIFxodWdlIFxiZnNlcmllcyAjMVxwYXJ9JQogICAgIFxub2JyZWFrCiAgICAgXHZza2lwIDNleAogICAgIFxAYWZ0ZXJoZWFkaW5nfQpcbmV3Y29tbWFuZFxzZWN0aW9ue1xAc3RhcnRzZWN0aW9uIHtzZWN0aW9ufXsxfXtcekB9JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHstMy41ZXggXEBwbHVzIC0xZXggXEBtaW51cyAtLjJleH0lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezIuM2V4IFxAcGx1cy4yZXh9JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbm9ybWFsZm9udFxMYXJnZVxiZnNlcmllc319ClxuZXdjb21tYW5kXHN1YnNlY3Rpb257XEBzdGFydHNlY3Rpb257c3Vic2VjdGlvbn17Mn17XHpAfSUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHstMy4yNWV4XEBwbHVzIC0xZXggXEBtaW51cyAtLjJleH0lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MS41ZXggXEBwbHVzIC4yZXh9JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xub3JtYWxmb250XGxhcmdlXGJmc2VyaWVzfX0KXG5ld2NvbW1hbmRcc3Vic3Vic2VjdGlvbntcQHN0YXJ0c2VjdGlvbntzdWJzdWJzZWN0aW9ufXszfXtcekB9JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey0zLjI1ZXhcQHBsdXMgLTFleCBcQG1pbnVzIC0uMmV4fSUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLjVleCBcQHBsdXMgLjJleH0lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG5vcm1hbGZvbnRcbm9ybWFsc2l6ZVxiZnNlcmllc319ClxuZXdjb21tYW5kXHBhcmFncmFwaHtcQHN0YXJ0c2VjdGlvbntwYXJhZ3JhcGh9ezR9e1x6QH0lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHszLjI1ZXggXEBwbHVzMWV4IFxAbWludXMuMmV4fSUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey0xZW19JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG5vcm1hbGZvbnRcbm9ybWFsc2l6ZVxiZnNlcmllc319ClxuZXdjb21tYW5kXHN1YnBhcmFncmFwaHtcQHN0YXJ0c2VjdGlvbntzdWJwYXJhZ3JhcGh9ezV9e1xwYXJpbmRlbnR9JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7My4yNWV4IFxAcGx1czFleCBcQG1pbnVzIC4yZXh9JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LTFlbX0lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xub3JtYWxmb250XG5vcm1hbHNpemVcYmZzZXJpZXN9fQpcaWZAdHdvY29sdW1uCiAgXHNldGxlbmd0aFxsZWZ0bWFyZ2luaSAgezJlbX0KXGVsc2UKICBcc2V0bGVuZ3RoXGxlZnRtYXJnaW5pICB7Mi41ZW19ClxmaQpcbGVmdG1hcmdpbiAgXGxlZnRtYXJnaW5pClxzZXRsZW5ndGhcbGVmdG1hcmdpbmlpICB7Mi4yZW19ClxzZXRsZW5ndGhcbGVmdG1hcmdpbmlpaSB7MS44N2VtfQpcc2V0bGVuZ3RoXGxlZnRtYXJnaW5pdiAgezEuN2VtfQpcaWZAdHdvY29sdW1uCiAgXHNldGxlbmd0aFxsZWZ0bWFyZ2ludiAgey41ZW19CiAgXHNldGxlbmd0aFxsZWZ0bWFyZ2ludmkgey41ZW19ClxlbHNlCiAgXHNldGxlbmd0aFxsZWZ0bWFyZ2ludiAgezFlbX0KICBcc2V0bGVuZ3RoXGxlZnRtYXJnaW52aSB7MWVtfQpcZmkKXHNldGxlbmd0aCAgXGxhYmVsc2VwICB7LjVlbX0KXHNldGxlbmd0aCAgXGxhYmVsd2lkdGh7XGxlZnRtYXJnaW5pfQpcYWRkdG9sZW5ndGhcbGFiZWx3aWR0aHstXGxhYmVsc2VwfQpcQGJlZ2lucGFycGVuYWx0eSAtXEBsb3dwZW5hbHR5ClxAZW5kcGFycGVuYWx0eSAgIC1cQGxvd3BlbmFsdHkKXEBpdGVtcGVuYWx0eSAgICAgLVxAbG93cGVuYWx0eQpccmVuZXdjb21tYW5kXHRoZWVudW1pe1xAYXJhYmljXGNAZW51bWl9ClxyZW5ld2NvbW1hbmRcdGhlZW51bWlpe1xAYWxwaFxjQGVudW1paX0KXHJlbmV3Y29tbWFuZFx0aGVlbnVtaWlpe1xAcm9tYW5cY0BlbnVtaWlpfQpccmVuZXdjb21tYW5kXHRoZWVudW1pdntcQEFscGhcY0BlbnVtaXZ9ClxuZXdjb21tYW5kXGxhYmVsZW51bWl7XHRoZWVudW1pLn0KXG5ld2NvbW1hbmRcbGFiZWxlbnVtaWl7KFx0aGVlbnVtaWkpfQpcbmV3Y29tbWFuZFxsYWJlbGVudW1paWl7XHRoZWVudW1paWkufQpcbmV3Y29tbWFuZFxsYWJlbGVudW1pdntcdGhlZW51bWl2Ln0KXHJlbmV3Y29tbWFuZFxwQGVudW1paXtcdGhlZW51bWl9ClxyZW5ld2NvbW1hbmRccEBlbnVtaWlpe1x0aGVlbnVtaShcdGhlZW51bWlpKX0KXHJlbmV3Y29tbWFuZFxwQGVudW1pdntccEBlbnVtaWlpXHRoZWVudW1paWl9ClxuZXdjb21tYW5kXGxhYmVsaXRlbWl7XHRleHRidWxsZXR9ClxuZXdjb21tYW5kXGxhYmVsaXRlbWlpe1xub3JtYWxmb250XGJmc2VyaWVzIFx0ZXh0ZW5kYXNofQpcbmV3Y29tbWFuZFxsYWJlbGl0ZW1paWl7XHRleHRhc3Rlcmlza2NlbnRlcmVkfQpcbmV3Y29tbWFuZFxsYWJlbGl0ZW1pdntcdGV4dHBlcmlvZGNlbnRlcmVkfQpcbmV3ZW52aXJvbm1lbnR7ZGVzY3JpcHRpb259CiAgICAgICAgICAgICAgIHtcbGlzdHt9e1xsYWJlbHdpZHRoXHpAIFxpdGVtaW5kZW50LVxsZWZ0bWFyZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIFxsZXRcbWFrZWxhYmVsXGRlc2NyaXB0aW9ubGFiZWx9fQogICAgICAgICAgICAgICB7XGVuZGxpc3R9ClxuZXdjb21tYW5kKlxkZXNjcmlwdGlvbmxhYmVsWzFde1xoc3BhY2VcbGFiZWxzZXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbm9ybWFsZm9udFxiZnNlcmllcyAjMX0KXGlmQHRpdGxlcGFnZQogIFxuZXdlbnZpcm9ubWVudHthYnN0cmFjdH17JQogICAgICBcdGl0bGVwYWdlCiAgICAgIFxudWxsXHZmaWwKICAgICAgXEBiZWdpbnBhcnBlbmFsdHlcQGxvd3BlbmFsdHkKICAgICAgXGJlZ2lue2NlbnRlcn0lCiAgICAgICAgXGJmc2VyaWVzIFxhYnN0cmFjdG5hbWUKICAgICAgICBcQGVuZHBhcnBlbmFsdHlcQE0KICAgICAgXGVuZHtjZW50ZXJ9fSUKICAgICB7XHBhclx2ZmlsXG51bGxcZW5kdGl0bGVwYWdlfQpcZWxzZQogIFxuZXdlbnZpcm9ubWVudHthYnN0cmFjdH17JQogICAgICBcaWZAdHdvY29sdW1uCiAgICAgICAgXHNlY3Rpb24qe1xhYnN0cmFjdG5hbWV9JQogICAgICBcZWxzZQogICAgICAgIFxzbWFsbAogICAgICAgIFxiZWdpbntjZW50ZXJ9JQogICAgICAgICAge1xiZnNlcmllcyBcYWJzdHJhY3RuYW1lXHZzcGFjZXstLjVlbX1cdnNwYWNle1x6QH19JQogICAgICAgIFxlbmR7Y2VudGVyfSUKICAgICAgICBccXVvdGF0aW9uCiAgICAgIFxmaX0KICAgICAge1xpZkB0d29jb2x1bW5cZWxzZVxlbmRxdW90YXRpb25cZml9ClxmaQpcbmV3ZW52aXJvbm1lbnR7dmVyc2V9CiAgICAgICAgICAgICAgIHtcbGV0XFxcQGNlbnRlcmNyCiAgICAgICAgICAgICAgICBcbGlzdHt9e1xpdGVtc2VwICAgICAgXHpACiAgICAgICAgICAgICAgICAgICAgICAgIFxpdGVtaW5kZW50ICAgLTEuNWVtJQogICAgICAgICAgICAgICAgICAgICAgICBcbGlzdHBhcmluZGVudFxpdGVtaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIFxyaWdodG1hcmdpbiAgXGxlZnRtYXJnaW4KICAgICAgICAgICAgICAgICAgICAgICAgXGFkdmFuY2VcbGVmdG1hcmdpbiAxLjVlbX0lCiAgICAgICAgICAgICAgICBcaXRlbVxyZWxheH0KICAgICAgICAgICAgICAge1xlbmRsaXN0fQpcbmV3ZW52aXJvbm1lbnR7cXVvdGF0aW9ufQogICAgICAgICAgICAgICB7XGxpc3R7fXtcbGlzdHBhcmluZGVudCAxLjVlbSUKICAgICAgICAgICAgICAgICAgICAgICAgXGl0ZW1pbmRlbnQgICAgXGxpc3RwYXJpbmRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgXHJpZ2h0bWFyZ2luICAgXGxlZnRtYXJnaW4KICAgICAgICAgICAgICAgICAgICAgICAgXHBhcnNlcCAgICAgICAgXHpAIFxAcGx1c1xwQH0lCiAgICAgICAgICAgICAgICBcaXRlbVxyZWxheH0KICAgICAgICAgICAgICAge1xlbmRsaXN0fQpcbmV3ZW52aXJvbm1lbnR7cXVvdGV9CiAgICAgICAgICAgICAgIHtcbGlzdHt9e1xyaWdodG1hcmdpblxsZWZ0bWFyZ2lufSUKICAgICAgICAgICAgICAgIFxpdGVtXHJlbGF4fQogICAgICAgICAgICAgICB7XGVuZGxpc3R9ClxpZkBjb21wYXRpYmlsaXR5ClxuZXdlbnZpcm9ubWVudHt0aXRsZXBhZ2V9CiAgICB7JQogICAgICBcaWZAdHdvY29sdW1uCiAgICAgICAgXEByZXN0b25lY29sdHJ1ZVxvbmVjb2x1bW4KICAgICAgXGVsc2UKICAgICAgICBcQHJlc3RvbmVjb2xmYWxzZVxuZXdwYWdlCiAgICAgIFxmaQogICAgICBcdGhpc3BhZ2VzdHlsZXtlbXB0eX0lCiAgICAgIFxzZXRjb3VudGVye3BhZ2V9XHpACiAgICB9JQogICAge1xpZkByZXN0b25lY29sXHR3b2NvbHVtbiBcZWxzZSBcbmV3cGFnZSBcZmkKICAgIH0KXGVsc2UKXG5ld2Vudmlyb25tZW50e3RpdGxlcGFnZX0KICAgIHslCiAgICAgIFxpZkB0d29jb2x1bW4KICAgICAgICBcQHJlc3RvbmVjb2x0cnVlXG9uZWNvbHVtbgogICAgICBcZWxzZQogICAgICAgIFxAcmVzdG9uZWNvbGZhbHNlXG5ld3BhZ2UKICAgICAgXGZpCiAgICAgIFx0aGlzcGFnZXN0eWxle2VtcHR5fSUKICAgICAgXHNldGNvdW50ZXJ7cGFnZX1cQG5lCiAgICB9JQogICAge1xpZkByZXN0b25lY29sXHR3b2NvbHVtbiBcZWxzZSBcbmV3cGFnZSBcZmkKICAgICBcaWZAdHdvc2lkZVxlbHNlCiAgICAgICAgXHNldGNvdW50ZXJ7cGFnZX1cQG5lCiAgICAgXGZpCiAgICB9ClxmaQpcbmV3Y29tbWFuZFxhcHBlbmRpeHtccGFyCiAgXHNldGNvdW50ZXJ7c2VjdGlvbn17MH0lCiAgXHNldGNvdW50ZXJ7c3Vic2VjdGlvbn17MH0lCiAgXGdkZWZcdGhlc2VjdGlvbntcQEFscGhcY0BzZWN0aW9ufX0KXHNldGxlbmd0aFxhcnJheWNvbHNlcHs1XHBAfQpcc2V0bGVuZ3RoXHRhYmNvbHNlcHs2XHBAfQpcc2V0bGVuZ3RoXGFycmF5cnVsZXdpZHRoey40XHBAfQpcc2V0bGVuZ3RoXGRvdWJsZXJ1bGVzZXB7MlxwQH0KXHNldGxlbmd0aFx0YWJiaW5nc2Vwe1xsYWJlbHNlcH0KXHNraXBcQG1wZm9vdGlucyA9IFxza2lwXGZvb3RpbnMKXHNldGxlbmd0aFxmYm94c2VwezNccEB9ClxzZXRsZW5ndGhcZmJveHJ1bGV7LjRccEB9ClxyZW5ld2NvbW1hbmQgXHRoZWVxdWF0aW9uIHtcQGFyYWJpY1xjQGVxdWF0aW9ufQpcbmV3Y291bnRlcntmaWd1cmV9ClxyZW5ld2NvbW1hbmQgXHRoZWZpZ3VyZSB7XEBhcmFiaWNcY0BmaWd1cmV9ClxkZWZcZnBzQGZpZ3VyZXt0YnB9ClxkZWZcZnR5cGVAZmlndXJlezF9ClxkZWZcZXh0QGZpZ3VyZXtsb2Z9ClxkZWZcZm51bUBmaWd1cmV7XGZpZ3VyZW5hbWVcbm9icmVha3NwYWNlXHRoZWZpZ3VyZX0KXG5ld2Vudmlyb25tZW50e2ZpZ3VyZX0KICAgICAgICAgICAgICAge1xAZmxvYXR7ZmlndXJlfX0KICAgICAgICAgICAgICAge1xlbmRAZmxvYXR9ClxuZXdlbnZpcm9ubWVudHtmaWd1cmUqfQogICAgICAgICAgICAgICB7XEBkYmxmbG9hdHtmaWd1cmV9fQogICAgICAgICAgICAgICB7XGVuZEBkYmxmbG9hdH0KXG5ld2NvdW50ZXJ7dGFibGV9ClxyZW5ld2NvbW1hbmRcdGhldGFibGV7XEBhcmFiaWNcY0B0YWJsZX0KXGRlZlxmcHNAdGFibGV7dGJwfQpcZGVmXGZ0eXBlQHRhYmxlezJ9ClxkZWZcZXh0QHRhYmxle2xvdH0KXGRlZlxmbnVtQHRhYmxle1x0YWJsZW5hbWVcbm9icmVha3NwYWNlXHRoZXRhYmxlfQpcbmV3ZW52aXJvbm1lbnR7dGFibGV9CiAgICAgICAgICAgICAgIHtcQGZsb2F0e3RhYmxlfX0KICAgICAgICAgICAgICAge1xlbmRAZmxvYXR9ClxuZXdlbnZpcm9ubWVudHt0YWJsZSp9CiAgICAgICAgICAgICAgIHtcQGRibGZsb2F0e3RhYmxlfX0KICAgICAgICAgICAgICAge1xlbmRAZGJsZmxvYXR9ClxuZXdsZW5ndGhcYWJvdmVjYXB0aW9uc2tpcApcbmV3bGVuZ3RoXGJlbG93Y2FwdGlvbnNraXAKXHNldGxlbmd0aFxhYm92ZWNhcHRpb25za2lwezEwXHBAfQpcc2V0bGVuZ3RoXGJlbG93Y2FwdGlvbnNraXB7MFxwQH0KXGxvbmdcZGVmXEBtYWtlY2FwdGlvbiMxIzJ7JQogIFx2c2tpcFxhYm92ZWNhcHRpb25za2lwCiAgXHNib3hcQHRlbXBib3hheyMxOiAjMn0lCiAgXGlmZGltIFx3ZFxAdGVtcGJveGEgPlxoc2l6ZQogICAgIzE6ICMyXHBhcgogIFxlbHNlCiAgICBcZ2xvYmFsIFxAbWluaXBhZ2VmYWxzZQogICAgXGhiQHh0QFxoc2l6ZXtcaGZpbFxib3hcQHRlbXBib3hhXGhmaWx9JQogIFxmaQogIFx2c2tpcFxiZWxvd2NhcHRpb25za2lwfQpcRGVjbGFyZU9sZEZvbnRDb21tYW5ke1xybX17XG5vcm1hbGZvbnRccm1mYW1pbHl9e1xtYXRocm19ClxEZWNsYXJlT2xkRm9udENvbW1hbmR7XHNmfXtcbm9ybWFsZm9udFxzZmZhbWlseX17XG1hdGhzZn0KXERlY2xhcmVPbGRGb250Q29tbWFuZHtcdHR9e1xub3JtYWxmb250XHR0ZmFtaWx5fXtcbWF0aHR0fQpcRGVjbGFyZU9sZEZvbnRDb21tYW5ke1xiZn17XG5vcm1hbGZvbnRcYmZzZXJpZXN9e1xtYXRoYmZ9ClxEZWNsYXJlT2xkRm9udENvbW1hbmR7XGl0fXtcbm9ybWFsZm9udFxpdHNoYXBlfXtcbWF0aGl0fQpcRGVjbGFyZU9sZEZvbnRDb21tYW5ke1xzbH17XG5vcm1hbGZvbnRcc2xzaGFwZX17XEBub21hdGhcc2x9ClxEZWNsYXJlT2xkRm9udENvbW1hbmR7XHNjfXtcbm9ybWFsZm9udFxzY3NoYXBlfXtcQG5vbWF0aFxzY30KXERlY2xhcmVSb2J1c3RDb21tYW5kKlxjYWx7XEBmb250c3dpdGNoXHJlbGF4XG1hdGhjYWx9ClxEZWNsYXJlUm9idXN0Q29tbWFuZCpcbWl0e1xAZm9udHN3aXRjaFxyZWxheFxtYXRobm9ybWFsfQpcbmV3Y29tbWFuZFxAcG51bXdpZHRoezEuNTVlbX0KXG5ld2NvbW1hbmRcQHRvY3JtYXJnezIuNTVlbX0KXG5ld2NvbW1hbmRcQGRvdHNlcHs0LjV9ClxzZXRjb3VudGVye3RvY2RlcHRofXszfQpcbmV3Y29tbWFuZFx0YWJsZW9mY29udGVudHN7JQogICAgXHNlY3Rpb24qe1xjb250ZW50c25hbWUKICAgICAgICBcQG1rYm90aHslCiAgICAgICAgICAgXE1ha2VVcHBlcmNhc2VcY29udGVudHNuYW1lfXtcTWFrZVVwcGVyY2FzZVxjb250ZW50c25hbWV9fSUKICAgIFxAc3RhcnR0b2N7dG9jfSUKICAgIH0KXG5ld2NvbW1hbmQqXGxAcGFydFsyXXslCiAgXGlmbnVtIFxjQHRvY2RlcHRoID4tMlxyZWxheAogICAgXGFkZHBlbmFsdHlcQHNlY3BlbmFsdHkKICAgIFxhZGR2c3BhY2V7Mi4yNWVtIFxAcGx1c1xwQH0lCiAgICBcc2V0bGVuZ3RoXEB0ZW1wZGltYXszZW19JQogICAgXGJlZ2luZ3JvdXAKICAgICAgXHBhcmluZGVudCBcekAgXHJpZ2h0c2tpcCBcQHBudW13aWR0aAogICAgICBccGFyZmlsbHNraXAgLVxAcG51bXdpZHRoCiAgICAgIHtcbGVhdmV2bW9kZQogICAgICAgXGxhcmdlIFxiZnNlcmllcyAjMVxoZmlsIFxoYkB4dEBcQHBudW13aWR0aHtcaHNzICMyfX1ccGFyCiAgICAgICBcbm9icmVhawogICAgICAgXGlmQGNvbXBhdGliaWxpdHkKICAgICAgICAgXGdsb2JhbFxAbm9icmVha3RydWUKICAgICAgICAgXGV2ZXJ5cGFye1xnbG9iYWxcQG5vYnJlYWtmYWxzZVxldmVyeXBhcnt9fSUKICAgICAgXGZpCiAgICBcZW5kZ3JvdXAKICBcZml9ClxuZXdjb21tYW5kKlxsQHNlY3Rpb25bMl17JQogIFxpZm51bSBcY0B0b2NkZXB0aCA+XHpACiAgICBcYWRkcGVuYWx0eVxAc2VjcGVuYWx0eQogICAgXGFkZHZzcGFjZXsxLjBlbSBcQHBsdXNccEB9JQogICAgXHNldGxlbmd0aFxAdGVtcGRpbWF7MS41ZW19JQogICAgXGJlZ2luZ3JvdXAKICAgICAgXHBhcmluZGVudCBcekAgXHJpZ2h0c2tpcCBcQHBudW13aWR0aAogICAgICBccGFyZmlsbHNraXAgLVxAcG51bXdpZHRoCiAgICAgIFxsZWF2ZXZtb2RlIFxiZnNlcmllcwogICAgICBcYWR2YW5jZVxsZWZ0c2tpcFxAdGVtcGRpbWEKICAgICAgXGhza2lwIC1cbGVmdHNraXAKICAgICAgIzFcbm9icmVha1xoZmlsIFxub2JyZWFrXGhiQHh0QFxAcG51bXdpZHRoe1xoc3MgIzJ9XHBhcgogICAgXGVuZGdyb3VwCiAgXGZpfQpcbmV3Y29tbWFuZCpcbEBzdWJzZWN0aW9ue1xAZG90dGVkdG9jbGluZXsyfXsxLjVlbX17Mi4zZW19fQpcbmV3Y29tbWFuZCpcbEBzdWJzdWJzZWN0aW9ue1xAZG90dGVkdG9jbGluZXszfXszLjhlbX17My4yZW19fQpcbmV3Y29tbWFuZCpcbEBwYXJhZ3JhcGh7XEBkb3R0ZWR0b2NsaW5lezR9ezcuMGVtfXs0LjFlbX19ClxuZXdjb21tYW5kKlxsQHN1YnBhcmFncmFwaHtcQGRvdHRlZHRvY2xpbmV7NX17MTBlbX17NWVtfX0KXG5ld2NvbW1hbmRcbGlzdG9mZmlndXJlc3slCiAgICBcc2VjdGlvbip7XGxpc3RmaWd1cmVuYW1lfSUKICAgICAgXEBta2JvdGh7XE1ha2VVcHBlcmNhc2VcbGlzdGZpZ3VyZW5hbWV9JQogICAgICAgICAgICAgIHtcTWFrZVVwcGVyY2FzZVxsaXN0ZmlndXJlbmFtZX0lCiAgICBcQHN0YXJ0dG9je2xvZn0lCiAgICB9ClxuZXdjb21tYW5kKlxsQGZpZ3VyZXtcQGRvdHRlZHRvY2xpbmV7MX17MS41ZW19ezIuM2VtfX0KXG5ld2NvbW1hbmRcbGlzdG9mdGFibGVzeyUKICAgIFxzZWN0aW9uKntcbGlzdHRhYmxlbmFtZX0lCiAgICAgIFxAbWtib3RoeyUKICAgICAgICAgIFxNYWtlVXBwZXJjYXNlXGxpc3R0YWJsZW5hbWV9JQogICAgICAgICB7XE1ha2VVcHBlcmNhc2VcbGlzdHRhYmxlbmFtZX0lCiAgICBcQHN0YXJ0dG9je2xvdH0lCiAgICB9ClxsZXRcbEB0YWJsZVxsQGZpZ3VyZQpcbmV3ZGltZW5cYmliaW5kZW50ClxzZXRsZW5ndGhcYmliaW5kZW50ezEuNWVtfQpcbmV3ZW52aXJvbm1lbnR7dGhlYmlibGlvZ3JhcGh5fVsxXQogICAgIHtcc2VjdGlvbip7XHJlZm5hbWV9JQogICAgICBcQG1rYm90aHtcTWFrZVVwcGVyY2FzZVxyZWZuYW1lfXtcTWFrZVVwcGVyY2FzZVxyZWZuYW1lfSUKICAgICAgXGxpc3R7XEBiaWJsYWJlbHtcQGFyYWJpY1xjQGVudW1pdn19JQogICAgICAgICAgIHtcc2V0dG93aWR0aFxsYWJlbHdpZHRoe1xAYmlibGFiZWx7IzF9fSUKICAgICAgICAgICAgXGxlZnRtYXJnaW5cbGFiZWx3aWR0aAogICAgICAgICAgICBcYWR2YW5jZVxsZWZ0bWFyZ2luXGxhYmVsc2VwCiAgICAgICAgICAgIFxAb3BlbmJpYkBjb2RlCiAgICAgICAgICAgIFx1c2Vjb3VudGVye2VudW1pdn0lCiAgICAgICAgICAgIFxsZXRccEBlbnVtaXZcQGVtcHR5CiAgICAgICAgICAgIFxyZW5ld2NvbW1hbmRcdGhlZW51bWl2e1xAYXJhYmljXGNAZW51bWl2fX0lCiAgICAgIFxzbG9wcHkKICAgICAgXGNsdWJwZW5hbHR5NDAwMAogICAgICBcQGNsdWJwZW5hbHR5IFxjbHVicGVuYWx0eQogICAgICBcd2lkb3dwZW5hbHR5NDAwMCUKICAgICAgXHNmY29kZWBcLlxAbX0KICAgICB7XGRlZlxAbm9pdGVtZXJyCiAgICAgICB7XEBsYXRleEB3YXJuaW5ne0VtcHR5IGB0aGViaWJsaW9ncmFwaHknIGVudmlyb25tZW50fX0lCiAgICAgIFxlbmRsaXN0fQpcbmV3Y29tbWFuZFxuZXdibG9ja3tcaHNraXAgLjExZW1cQHBsdXMuMzNlbVxAbWludXMuMDdlbX0KXGxldFxAb3BlbmJpYkBjb2RlXEBlbXB0eQpcbmV3ZW52aXJvbm1lbnR7dGhlaW5kZXh9CiAgICAgICAgICAgICAgIHtcaWZAdHdvY29sdW1uCiAgICAgICAgICAgICAgICAgIFxAcmVzdG9uZWNvbGZhbHNlCiAgICAgICAgICAgICAgICBcZWxzZQogICAgICAgICAgICAgICAgICBcQHJlc3RvbmVjb2x0cnVlCiAgICAgICAgICAgICAgICBcZmkKICAgICAgICAgICAgICAgIFx0d29jb2x1bW5bXHNlY3Rpb24qe1xpbmRleG5hbWV9XSUKICAgICAgICAgICAgICAgIFxAbWtib3Roe1xNYWtlVXBwZXJjYXNlXGluZGV4bmFtZX0lCiAgICAgICAgICAgICAgICAgICAgICAgIHtcTWFrZVVwcGVyY2FzZVxpbmRleG5hbWV9JQogICAgICAgICAgICAgICAgXHRoaXNwYWdlc3R5bGV7cGxhaW59XHBhcmluZGVudFx6QAogICAgICAgICAgICAgICAgXHBhcnNraXBcekAgXEBwbHVzIC4zXHBAXHJlbGF4CiAgICAgICAgICAgICAgICBcY29sdW1uc2VwcnVsZSBcekAKICAgICAgICAgICAgICAgIFxjb2x1bW5zZXAgMzVccEAKICAgICAgICAgICAgICAgIFxsZXRcaXRlbVxAaWR4aXRlbX0KICAgICAgICAgICAgICAge1xpZkByZXN0b25lY29sXG9uZWNvbHVtblxlbHNlXGNsZWFycGFnZVxmaX0KXG5ld2NvbW1hbmRcQGlkeGl0ZW17XHBhclxoYW5naW5kZW50IDQwXHBAfQpcbmV3Y29tbWFuZFxzdWJpdGVte1xAaWR4aXRlbSBcaHNwYWNlKnsyMFxwQH19ClxuZXdjb21tYW5kXHN1YnN1Yml0ZW17XEBpZHhpdGVtIFxoc3BhY2UqezMwXHBAfX0KXG5ld2NvbW1hbmRcaW5kZXhzcGFjZXtccGFyIFx2c2tpcCAxMFxwQCBcQHBsdXM1XHBAIFxAbWludXMzXHBAXHJlbGF4fQpccmVuZXdjb21tYW5kXGZvb3Rub3RlcnVsZXslCiAgXGtlcm4tM1xwQAogIFxocnVsZVxAd2lkdGguNFxjb2x1bW53aWR0aAogIFxrZXJuMi42XHBAfQpcbmV3Y29tbWFuZFxAbWFrZWZudGV4dFsxXXslCiAgICBccGFyaW5kZW50IDFlbSUKICAgIFxub2luZGVudAogICAgXGhiQHh0QDEuOGVte1xoc3NcQG1ha2Vmbm1hcmt9IzF9ClxuZXdjb21tYW5kXGNvbnRlbnRzbmFtZXtDb250ZW50c30KXG5ld2NvbW1hbmRcbGlzdGZpZ3VyZW5hbWV7TGlzdCBvZiBGaWd1cmVzfQpcbmV3Y29tbWFuZFxsaXN0dGFibGVuYW1le0xpc3Qgb2YgVGFibGVzfQpcbmV3Y29tbWFuZFxyZWZuYW1le1JlZmVyZW5jZXN9ClxuZXdjb21tYW5kXGluZGV4bmFtZXtJbmRleH0KXG5ld2NvbW1hbmRcZmlndXJlbmFtZXtGaWd1cmV9ClxuZXdjb21tYW5kXHRhYmxlbmFtZXtUYWJsZX0KXG5ld2NvbW1hbmRccGFydG5hbWV7UGFydH0KXG5ld2NvbW1hbmRcYXBwZW5kaXhuYW1le0FwcGVuZGl4fQpcbmV3Y29tbWFuZFxhYnN0cmFjdG5hbWV7QWJzdHJhY3R9ClxkZWZcdG9kYXl7XGlmY2FzZVxtb250aFxvcgogIEphbnVhcnlcb3IgRmVicnVhcnlcb3IgTWFyY2hcb3IgQXByaWxcb3IgTWF5XG9yIEp1bmVcb3IKICBKdWx5XG9yIEF1Z3VzdFxvciBTZXB0ZW1iZXJcb3IgT2N0b2JlclxvciBOb3ZlbWJlclxvciBEZWNlbWJlclxmaQogIFxzcGFjZVxudW1iZXJcZGF5LCBcbnVtYmVyXHllYXJ9ClxzZXRsZW5ndGhcY29sdW1uc2VwezEwXHBAfQpcc2V0bGVuZ3RoXGNvbHVtbnNlcHJ1bGV7MFxwQH0KXHBhZ2VzdHlsZXtwbGFpbn0KXHBhZ2VudW1iZXJpbmd7YXJhYmljfQpcaWZAdHdvc2lkZQpcZWxzZQogIFxyYWdnZWRib3R0b20KXGZpClxpZkB0d29jb2x1bW4KICBcdHdvY29sdW1uCiAgXHNsb3BweQogIFxmbHVzaGJvdHRvbQpcZWxzZQogIFxvbmVjb2x1bW4KXGZpClxlbmRpbnB1dAolJQolJSBFbmQgb2YgZmlsZSBgYXJ0aWNsZS5jbHMnLgo=","sample.tex":"XGRvY3VtZW50Y2xhc3N7YXJ0aWNsZX0KJVx1c2VwYWNrYWdle2Ftc21hdGh9CiVcdXNlcGFja2FnZVt5eXl5bW1kZCxoaG1tc3Nde2RhdGV0aW1lfQpcYmVnaW57ZG9jdW1lbnR9Cgpcc2VjdGlvbntIZWxsbywgd29ybGQufQoKSGVsbG8gdGhlcmUuICBUaGlzIGlzIHdvcmtpbmcuCgpIZXJlIGlzIHNvbWUgbWF0aDoKXFsKICBcaW50X2FeYiBmKHgpIFwsIGR4ID0gRihiKSAtIEYoYSkuClxdClRvZGF5IGlzIFx0b2RheS4KJUEgZm9ybXVsYSBpcwolXGJlZ2lue2FsaWduKn0KJSAgYSAmPSB4XjIgKyB5XjIgXFwKJSAgZih4KSAmPSBcY29zIFxzaW4geAolXGVuZHthbGlnbip9CiVhbmQgc3VjaC4gVGhlIHRpbWUgaXMgXGN1cnJlbnR0aW1lLgogIApcZW5ke2RvY3VtZW50fQo=","size10.clo":"JSUKJSUgVGhpcyBpcyBmaWxlIGBzaXplMTAuY2xvJywKJSUgZ2VuZXJhdGVkIHdpdGggdGhlIGRvY3N0cmlwIHV0aWxpdHkuCiUlCiUlIFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMgd2VyZToKJSUKJSUgY2xhc3Nlcy5kdHggICh3aXRoIG9wdGlvbnM6IGAxMHB0JykKJSUgCiUlIFRoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZS4KJSUgCiUlIFRoZSBzb3VyY2UgaXMgbWFpbnRhaW5lZCBieSB0aGUgTGFUZVggUHJvamVjdCB0ZWFtIGFuZCBidWcKJSUgcmVwb3J0cyBmb3IgaXQgY2FuIGJlIG9wZW5lZCBhdCBodHRwczovL2xhdGV4LXByb2plY3Qub3JnL2J1Z3MuaHRtbAolJSAoYnV0IHBsZWFzZSBvYnNlcnZlIGNvbmRpdGlvbnMgb24gYnVnIHJlcG9ydHMgc2VudCB0byB0aGF0IGFkZHJlc3MhKQolJSAKJSUgCiUlIENvcHlyaWdodCAxOTkzLTIwMTcKJSUgVGhlIExhVGVYMyBQcm9qZWN0IGFuZCBhbnkgaW5kaXZpZHVhbCBhdXRob3JzIGxpc3RlZCBlbHNld2hlcmUKJSUgaW4gdGhpcyBmaWxlLgolJSAKJSUgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZnJvbSBmaWxlKHMpIG9mIHRoZSBMYVRlWCBiYXNlIHN5c3RlbS4KJSUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJSUgCiUlIEl0IG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCiUlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuM2MKJSUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiUlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KJSUgICAgaHR0cHM6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKJSUgYW5kIHZlcnNpb24gMS4zYyBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYCiUlIHZlcnNpb24gMjAwNS8xMi8wMSBvciBsYXRlci4KJSUgCiUlIFRoaXMgZmlsZSBoYXMgdGhlIExQUEwgbWFpbnRlbmFuY2Ugc3RhdHVzICJtYWludGFpbmVkIi4KJSUgCiUlIFRoaXMgZmlsZSBtYXkgb25seSBiZSBkaXN0cmlidXRlZCB0b2dldGhlciB3aXRoIGEgY29weSBvZiB0aGUgTGFUZVgKJSUgYmFzZSBzeXN0ZW0uIFlvdSBtYXkgaG93ZXZlciBkaXN0cmlidXRlIHRoZSBMYVRlWCBiYXNlIHN5c3RlbSB3aXRob3V0CiUlIHN1Y2ggZ2VuZXJhdGVkIGZpbGVzLgolJSAKJSUgVGhlIGxpc3Qgb2YgYWxsIGZpbGVzIGJlbG9uZ2luZyB0byB0aGUgTGFUZVggYmFzZSBkaXN0cmlidXRpb24gaXMKJSUgZ2l2ZW4gaW4gdGhlIGZpbGUgYG1hbmlmZXN0LnR4dCcuIFNlZSBhbHNvIGBsZWdhbC50eHQnIGZvciBhZGRpdGlvbmFsCiUlIGluZm9ybWF0aW9uLgolJSAKJSUgVGhlIGxpc3Qgb2YgZGVyaXZlZCAodW5wYWNrZWQpIGZpbGVzIGJlbG9uZ2luZyB0byB0aGUgZGlzdHJpYnV0aW9uCiUlIGFuZCBjb3ZlcmVkIGJ5IExQUEwgaXMgZGVmaW5lZCBieSB0aGUgdW5wYWNraW5nIHNjcmlwdHMgKHdpdGgKJSUgZXh0ZW5zaW9uIC5pbnMpIHdoaWNoIGFyZSBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24uClxQcm92aWRlc0ZpbGV7c2l6ZTEwLmNsb30KICAgICAgICAgICAgICBbMjAxNC8wOS8yOSB2MS40aAogICAgICBTdGFuZGFyZCBMYVRlWCBmaWxlIChzaXplIG9wdGlvbildClxyZW5ld2NvbW1hbmRcbm9ybWFsc2l6ZXslCiAgIFxAc2V0Zm9udHNpemVcbm9ybWFsc2l6ZVxAeHB0XEB4aWlwdAogICBcYWJvdmVkaXNwbGF5c2tpcCAxMFxwQCBcQHBsdXMyXHBAIFxAbWludXM1XHBACiAgIFxhYm92ZWRpc3BsYXlzaG9ydHNraXAgXHpAIFxAcGx1czNccEAKICAgXGJlbG93ZGlzcGxheXNob3J0c2tpcCA2XHBAIFxAcGx1czNccEAgXEBtaW51czNccEAKICAgXGJlbG93ZGlzcGxheXNraXAgXGFib3ZlZGlzcGxheXNraXAKICAgXGxldFxAbGlzdGlcQGxpc3RJfQpcbm9ybWFsc2l6ZQpcbmV3Y29tbWFuZFxzbWFsbHslCiAgIFxAc2V0Zm9udHNpemVcc21hbGxcQGl4cHR7MTF9JQogICBcYWJvdmVkaXNwbGF5c2tpcCA4LjVccEAgXEBwbHVzM1xwQCBcQG1pbnVzNFxwQAogICBcYWJvdmVkaXNwbGF5c2hvcnRza2lwIFx6QCBcQHBsdXMyXHBACiAgIFxiZWxvd2Rpc3BsYXlzaG9ydHNraXAgNFxwQCBcQHBsdXMyXHBAIFxAbWludXMyXHBACiAgIFxkZWZcQGxpc3Rpe1xsZWZ0bWFyZ2luXGxlZnRtYXJnaW5pCiAgICAgICAgICAgICAgIFx0b3BzZXAgNFxwQCBcQHBsdXMyXHBAIFxAbWludXMyXHBACiAgICAgICAgICAgICAgIFxwYXJzZXAgMlxwQCBcQHBsdXNccEAgXEBtaW51c1xwQAogICAgICAgICAgICAgICBcaXRlbXNlcCBccGFyc2VwfSUKICAgXGJlbG93ZGlzcGxheXNraXAgXGFib3ZlZGlzcGxheXNraXAKfQpcbmV3Y29tbWFuZFxmb290bm90ZXNpemV7JQogICBcQHNldGZvbnRzaXplXGZvb3Rub3Rlc2l6ZVxAdmlpaXB0ezkuNX0lCiAgIFxhYm92ZWRpc3BsYXlza2lwIDZccEAgXEBwbHVzMlxwQCBcQG1pbnVzNFxwQAogICBcYWJvdmVkaXNwbGF5c2hvcnRza2lwIFx6QCBcQHBsdXNccEAKICAgXGJlbG93ZGlzcGxheXNob3J0c2tpcCAzXHBAIFxAcGx1c1xwQCBcQG1pbnVzMlxwQAogICBcZGVmXEBsaXN0aXtcbGVmdG1hcmdpblxsZWZ0bWFyZ2luaQogICAgICAgICAgICAgICBcdG9wc2VwIDNccEAgXEBwbHVzXHBAIFxAbWludXNccEAKICAgICAgICAgICAgICAgXHBhcnNlcCAyXHBAIFxAcGx1c1xwQCBcQG1pbnVzXHBACiAgICAgICAgICAgICAgIFxpdGVtc2VwIFxwYXJzZXB9JQogICBcYmVsb3dkaXNwbGF5c2tpcCBcYWJvdmVkaXNwbGF5c2tpcAp9ClxuZXdjb21tYW5kXHNjcmlwdHNpemV7XEBzZXRmb250c2l6ZVxzY3JpcHRzaXplXEB2aWlwdFxAdmlpaXB0fQpcbmV3Y29tbWFuZFx0aW55e1xAc2V0Zm9udHNpemVcdGlueVxAdnB0XEB2aXB0fQpcbmV3Y29tbWFuZFxsYXJnZXtcQHNldGZvbnRzaXplXGxhcmdlXEB4aWlwdHsxNH19ClxuZXdjb21tYW5kXExhcmdle1xAc2V0Zm9udHNpemVcTGFyZ2VcQHhpdnB0ezE4fX0KXG5ld2NvbW1hbmRcTEFSR0V7XEBzZXRmb250c2l6ZVxMQVJHRVxAeHZpaXB0ezIyfX0KXG5ld2NvbW1hbmRcaHVnZXtcQHNldGZvbnRzaXplXGh1Z2VcQHh4cHR7MjV9fQpcbmV3Y29tbWFuZFxIdWdle1xAc2V0Zm9udHNpemVcSHVnZVxAeHh2cHR7MzB9fQpcaWZAdHdvY29sdW1uCiAgXHNldGxlbmd0aFxwYXJpbmRlbnR7MWVtfQpcZWxzZQogIFxzZXRsZW5ndGhccGFyaW5kZW50ezE1XHBAfQpcZmkKXHNldGxlbmd0aFxzbWFsbHNraXBhbW91bnR7M1xwQCBcQHBsdXMgMVxwQCBcQG1pbnVzIDFccEB9ClxzZXRsZW5ndGhcbWVkc2tpcGFtb3VudHs2XHBAIFxAcGx1cyAyXHBAIFxAbWludXMgMlxwQH0KXHNldGxlbmd0aFxiaWdza2lwYW1vdW50ezEyXHBAIFxAcGx1cyA0XHBAIFxAbWludXMgNFxwQH0KXHNldGxlbmd0aFxoZWFkaGVpZ2h0ezEyXHBAfQpcc2V0bGVuZ3RoXGhlYWRzZXAgICB7MjVccEB9ClxzZXRsZW5ndGhcdG9wc2tpcCAgIHsxMFxwQH0KXHNldGxlbmd0aFxmb290c2tpcHszMFxwQH0KXGlmQGNvbXBhdGliaWxpdHkgXHNldGxlbmd0aFxtYXhkZXB0aHs0XHBAfSBcZWxzZQpcc2V0bGVuZ3RoXG1heGRlcHRoey41XHRvcHNraXB9IFxmaQpcaWZAY29tcGF0aWJpbGl0eQogIFxpZkB0d29jb2x1bW4KICAgIFxzZXRsZW5ndGhcdGV4dHdpZHRoezQxMFxwQH0KICBcZWxzZQogICAgXHNldGxlbmd0aFx0ZXh0d2lkdGh7MzQ1XHBAfQogIFxmaQpcZWxzZQogIFxzZXRsZW5ndGhcQHRlbXBkaW1he1xwYXBlcndpZHRofQogIFxhZGR0b2xlbmd0aFxAdGVtcGRpbWF7LTJpbn0KICBcc2V0bGVuZ3RoXEB0ZW1wZGltYnszNDVccEB9CiAgXGlmQHR3b2NvbHVtbgogICAgXGlmZGltXEB0ZW1wZGltYT4yXEB0ZW1wZGltYlxyZWxheAogICAgICBcc2V0bGVuZ3RoXHRleHR3aWR0aHsyXEB0ZW1wZGltYn0KICAgIFxlbHNlCiAgICAgIFxzZXRsZW5ndGhcdGV4dHdpZHRoe1xAdGVtcGRpbWF9CiAgICBcZmkKICBcZWxzZQogICAgXGlmZGltXEB0ZW1wZGltYT5cQHRlbXBkaW1iXHJlbGF4CiAgICAgIFxzZXRsZW5ndGhcdGV4dHdpZHRoe1xAdGVtcGRpbWJ9CiAgICBcZWxzZQogICAgICBcc2V0bGVuZ3RoXHRleHR3aWR0aHtcQHRlbXBkaW1hfQogICAgXGZpCiAgXGZpClxmaQpcaWZAY29tcGF0aWJpbGl0eVxlbHNlCiAgXEBzZXR0b3BvaW50XHRleHR3aWR0aApcZmkKXGlmQGNvbXBhdGliaWxpdHkKICBcc2V0bGVuZ3RoXHRleHRoZWlnaHR7NDNcYmFzZWxpbmVza2lwfQpcZWxzZQogIFxzZXRsZW5ndGhcQHRlbXBkaW1he1xwYXBlcmhlaWdodH0KICBcYWRkdG9sZW5ndGhcQHRlbXBkaW1hey0yaW59CiAgXGFkZHRvbGVuZ3RoXEB0ZW1wZGltYXstMS41aW59CiAgXGRpdmlkZVxAdGVtcGRpbWFcYmFzZWxpbmVza2lwCiAgXEB0ZW1wY250YT1cQHRlbXBkaW1hCiAgXHNldGxlbmd0aFx0ZXh0aGVpZ2h0e1xAdGVtcGNudGFcYmFzZWxpbmVza2lwfQpcZmkKXGFkZHRvbGVuZ3RoXHRleHRoZWlnaHR7XHRvcHNraXB9ClxpZkB0d29jb2x1bW4KIFxzZXRsZW5ndGhcbWFyZ2lucGFyc2VwIHsxMFxwQH0KXGVsc2UKICBcc2V0bGVuZ3RoXG1hcmdpbnBhcnNlcHsxMVxwQH0KXGZpClxzZXRsZW5ndGhcbWFyZ2lucGFycHVzaHs1XHBAfQpcaWZAY29tcGF0aWJpbGl0eQogIFxpZkB0d29zaWRlCiAgICAgXHNldGxlbmd0aFxvZGRzaWRlbWFyZ2luICAgezQ0XHBAfQogICAgIFxzZXRsZW5ndGhcZXZlbnNpZGVtYXJnaW4gIHs4MlxwQH0KICAgICBcc2V0bGVuZ3RoXG1hcmdpbnBhcndpZHRoIHsxMDdccEB9CiAgXGVsc2UKICAgICBcc2V0bGVuZ3RoXG9kZHNpZGVtYXJnaW4gICB7NjNccEB9CiAgICAgXHNldGxlbmd0aFxldmVuc2lkZW1hcmdpbiAgezYzXHBAfQogICAgIFxzZXRsZW5ndGhcbWFyZ2lucGFyd2lkdGggIHs5MFxwQH0KICBcZmkKICBcaWZAdHdvY29sdW1uCiAgICAgXHNldGxlbmd0aFxvZGRzaWRlbWFyZ2luICB7MzBccEB9CiAgICAgXHNldGxlbmd0aFxldmVuc2lkZW1hcmdpbiB7MzBccEB9CiAgICAgXHNldGxlbmd0aFxtYXJnaW5wYXJ3aWR0aCB7NDhccEB9CiAgXGZpClxlbHNlCiAgXGlmQHR3b3NpZGUKICAgIFxzZXRsZW5ndGhcQHRlbXBkaW1hICAgICAgICB7XHBhcGVyd2lkdGh9CiAgICBcYWRkdG9sZW5ndGhcQHRlbXBkaW1hICAgICAgey1cdGV4dHdpZHRofQogICAgXHNldGxlbmd0aFxvZGRzaWRlbWFyZ2luICAgIHsuNFxAdGVtcGRpbWF9CiAgICBcYWRkdG9sZW5ndGhcb2Rkc2lkZW1hcmdpbiAgey0xaW59CiAgICBcc2V0bGVuZ3RoXG1hcmdpbnBhcndpZHRoICAgey42XEB0ZW1wZGltYX0KICAgIFxhZGR0b2xlbmd0aFxtYXJnaW5wYXJ3aWR0aCB7LVxtYXJnaW5wYXJzZXB9CiAgICBcYWRkdG9sZW5ndGhcbWFyZ2lucGFyd2lkdGggey0wLjRpbn0KICBcZWxzZQogICAgXHNldGxlbmd0aFxAdGVtcGRpbWEgICAgICAgIHtccGFwZXJ3aWR0aH0KICAgIFxhZGR0b2xlbmd0aFxAdGVtcGRpbWEgICAgICB7LVx0ZXh0d2lkdGh9CiAgICBcc2V0bGVuZ3RoXG9kZHNpZGVtYXJnaW4gICAgey41XEB0ZW1wZGltYX0KICAgIFxhZGR0b2xlbmd0aFxvZGRzaWRlbWFyZ2luICB7LTFpbn0KICAgIFxzZXRsZW5ndGhcbWFyZ2lucGFyd2lkdGggICB7LjVcQHRlbXBkaW1hfQogICAgXGFkZHRvbGVuZ3RoXG1hcmdpbnBhcndpZHRoIHstXG1hcmdpbnBhcnNlcH0KICAgIFxhZGR0b2xlbmd0aFxtYXJnaW5wYXJ3aWR0aCB7LTAuNGlufQogICAgXGFkZHRvbGVuZ3RoXG1hcmdpbnBhcndpZHRoIHstLjRpbn0KICBcZmkKICBcaWZkaW0gXG1hcmdpbnBhcndpZHRoID4yaW4KICAgICBcc2V0bGVuZ3RoXG1hcmdpbnBhcndpZHRoezJpbn0KICBcZmkKICBcQHNldHRvcG9pbnRcb2Rkc2lkZW1hcmdpbgogIFxAc2V0dG9wb2ludFxtYXJnaW5wYXJ3aWR0aAogIFxzZXRsZW5ndGhcZXZlbnNpZGVtYXJnaW4gIHtccGFwZXJ3aWR0aH0KICBcYWRkdG9sZW5ndGhcZXZlbnNpZGVtYXJnaW57LTJpbn0KICBcYWRkdG9sZW5ndGhcZXZlbnNpZGVtYXJnaW57LVx0ZXh0d2lkdGh9CiAgXGFkZHRvbGVuZ3RoXGV2ZW5zaWRlbWFyZ2luey1cb2Rkc2lkZW1hcmdpbn0KICBcQHNldHRvcG9pbnRcZXZlbnNpZGVtYXJnaW4KXGZpClxpZkBjb21wYXRpYmlsaXR5CiAgXHNldGxlbmd0aFx0b3BtYXJnaW57MjdwdH0KXGVsc2UKICBcc2V0bGVuZ3RoXHRvcG1hcmdpbntccGFwZXJoZWlnaHR9CiAgXGFkZHRvbGVuZ3RoXHRvcG1hcmdpbnstMmlufQogIFxhZGR0b2xlbmd0aFx0b3BtYXJnaW57LVxoZWFkaGVpZ2h0fQogIFxhZGR0b2xlbmd0aFx0b3BtYXJnaW57LVxoZWFkc2VwfQogIFxhZGR0b2xlbmd0aFx0b3BtYXJnaW57LVx0ZXh0aGVpZ2h0fQogIFxhZGR0b2xlbmd0aFx0b3BtYXJnaW57LVxmb290c2tpcH0gICAgICUgdGhpcyBtaWdodCBiZSB3cm9uZyEKICBcYWRkdG9sZW5ndGhcdG9wbWFyZ2luey0uNVx0b3BtYXJnaW59CiAgXEBzZXR0b3BvaW50XHRvcG1hcmdpbgpcZmkKXHNldGxlbmd0aFxmb290bm90ZXNlcHs2LjY1XHBAfQpcc2V0bGVuZ3Roe1xza2lwXGZvb3RpbnN9ezlccEAgXEBwbHVzIDRccEAgXEBtaW51cyAyXHBAfQpcc2V0bGVuZ3RoXGZsb2F0c2VwICAgIHsxMlxwQCBcQHBsdXMgMlxwQCBcQG1pbnVzIDJccEB9ClxzZXRsZW5ndGhcdGV4dGZsb2F0c2VwezIwXHBAIFxAcGx1cyAyXHBAIFxAbWludXMgNFxwQH0KXHNldGxlbmd0aFxpbnRleHRzZXAgICB7MTJccEAgXEBwbHVzIDJccEAgXEBtaW51cyAyXHBAfQpcc2V0bGVuZ3RoXGRibGZsb2F0c2VwICAgIHsxMlxwQCBcQHBsdXMgMlxwQCBcQG1pbnVzIDJccEB9ClxzZXRsZW5ndGhcZGJsdGV4dGZsb2F0c2VwezIwXHBAIFxAcGx1cyAyXHBAIFxAbWludXMgNFxwQH0KXHNldGxlbmd0aFxAZnB0b3B7MFxwQCBcQHBsdXMgMWZpbH0KXHNldGxlbmd0aFxAZnBzZXB7OFxwQCBcQHBsdXMgMmZpbH0KXHNldGxlbmd0aFxAZnBib3R7MFxwQCBcQHBsdXMgMWZpbH0KXHNldGxlbmd0aFxAZGJsZnB0b3B7MFxwQCBcQHBsdXMgMWZpbH0KXHNldGxlbmd0aFxAZGJsZnBzZXB7OFxwQCBcQHBsdXMgMmZpbH0KXHNldGxlbmd0aFxAZGJsZnBib3R7MFxwQCBcQHBsdXMgMWZpbH0KXHNldGxlbmd0aFxwYXJ0b3BzZXB7MlxwQCBcQHBsdXMgMVxwQCBcQG1pbnVzIDFccEB9ClxkZWZcQGxpc3Rpe1xsZWZ0bWFyZ2luXGxlZnRtYXJnaW5pCiAgICAgICAgICAgIFxwYXJzZXAgNFxwQCBcQHBsdXMyXHBAIFxAbWludXNccEAKICAgICAgICAgICAgXHRvcHNlcCA4XHBAIFxAcGx1czJccEAgXEBtaW51czRccEAKICAgICAgICAgICAgXGl0ZW1zZXA0XHBAIFxAcGx1czJccEAgXEBtaW51c1xwQH0KXGxldFxAbGlzdElcQGxpc3RpClxAbGlzdGkKXGRlZlxAbGlzdGlpIHtcbGVmdG1hcmdpblxsZWZ0bWFyZ2luaWkKICAgICAgICAgICAgICBcbGFiZWx3aWR0aFxsZWZ0bWFyZ2luaWkKICAgICAgICAgICAgICBcYWR2YW5jZVxsYWJlbHdpZHRoLVxsYWJlbHNlcAogICAgICAgICAgICAgIFx0b3BzZXAgICAgNFxwQCBcQHBsdXMyXHBAIFxAbWludXNccEAKICAgICAgICAgICAgICBccGFyc2VwICAgIDJccEAgXEBwbHVzXHBAICBcQG1pbnVzXHBACiAgICAgICAgICAgICAgXGl0ZW1zZXAgICBccGFyc2VwfQpcZGVmXEBsaXN0aWlpe1xsZWZ0bWFyZ2luXGxlZnRtYXJnaW5paWkKICAgICAgICAgICAgICBcbGFiZWx3aWR0aFxsZWZ0bWFyZ2luaWlpCiAgICAgICAgICAgICAgXGFkdmFuY2VcbGFiZWx3aWR0aC1cbGFiZWxzZXAKICAgICAgICAgICAgICBcdG9wc2VwICAgIDJccEAgXEBwbHVzXHBAXEBtaW51c1xwQAogICAgICAgICAgICAgIFxwYXJzZXAgICAgXHpACiAgICAgICAgICAgICAgXHBhcnRvcHNlcCBccEAgXEBwbHVzXHpAIFxAbWludXNccEAKICAgICAgICAgICAgICBcaXRlbXNlcCAgIFx0b3BzZXB9ClxkZWZcQGxpc3RpdiB7XGxlZnRtYXJnaW5cbGVmdG1hcmdpbml2CiAgICAgICAgICAgICAgXGxhYmVsd2lkdGhcbGVmdG1hcmdpbml2CiAgICAgICAgICAgICAgXGFkdmFuY2VcbGFiZWx3aWR0aC1cbGFiZWxzZXB9ClxkZWZcQGxpc3R2ICB7XGxlZnRtYXJnaW5cbGVmdG1hcmdpbnYKICAgICAgICAgICAgICBcbGFiZWx3aWR0aFxsZWZ0bWFyZ2ludgogICAgICAgICAgICAgIFxhZHZhbmNlXGxhYmVsd2lkdGgtXGxhYmVsc2VwfQpcZGVmXEBsaXN0dmkge1xsZWZ0bWFyZ2luXGxlZnRtYXJnaW52aQogICAgICAgICAgICAgIFxsYWJlbHdpZHRoXGxlZnRtYXJnaW52aQogICAgICAgICAgICAgIFxhZHZhbmNlXGxhYmVsd2lkdGgtXGxhYmVsc2VwfQpcZW5kaW5wdXQKJSUKJSUgRW5kIG9mIGZpbGUgYHNpemUxMC5jbG8nLgo=","tex.pool":"MDIuNgoxMWJ1ZmZlciBzaXplCjA5cG9vbCBzaXplCjE3bnVtYmVyIG9mIHN0cmluZ3MKMDM/Pz8KMTNtMmQ1YzJsNXgydjVpCjI4RW5kIG9mIGZpbGUgb24gdGhlIHRlcm1pbmFsIQowMiEgCjQyKFRoYXQgbWFrZXMgMTAwIGVycm9yczsgcGxlYXNlIHRyeSBhZ2Fpbi4pCjAyPyAKMjJZb3Ugd2FudCB0byBlZGl0IGZpbGUgCjA5IGF0IGxpbmUgCjYwVHlwZSA8cmV0dXJuPiB0byBwcm9jZWVkLCBTIHRvIHNjcm9sbCBmdXR1cmUgZXJyb3IgbWVzc2FnZXMsCjQ0UiB0byBydW4gd2l0aG91dCBzdG9wcGluZywgUSB0byBydW4gcXVpZXRseSwKMjNJIHRvIGluc2VydCBzb21ldGhpbmcsIAoyMEUgdG8gZWRpdCB5b3VyIGZpbGUsCjU2MSBvciAuLi4gb3IgOSB0byBpZ25vcmUgdGhlIG5leHQgMSB0byA5IHRva2VucyBvZiBpbnB1dCwKMjJIIGZvciBoZWxwLCBYIHRvIHF1aXQuCjEzT0ssIGVudGVyaW5nIAowOWJhdGNobW9kZQoxMW5vbnN0b3Btb2RlCjEwc2Nyb2xsbW9kZQowMy4uLgowN2luc2VydD4KNDRJIGhhdmUganVzdCBkZWxldGVkIHNvbWUgdGV4dCwgYXMgeW91IGFza2VkLgo0OFlvdSBjYW4gbm93IGRlbGV0ZSBtb3JlLCBvciBpbnNlcnQsIG9yIHdoYXRldmVyLgo1MFNvcnJ5LCBJIGRvbid0IGtub3cgaG93IHRvIGhlbHAgaW4gdGhpcyBzaXR1YXRpb24uCjM2TWF5YmUgeW91IHNob3VsZCB0cnkgYXNraW5nIGEgaHVtYW4/CjQyU29ycnksIEkgYWxyZWFkeSBnYXZlIHdoYXQgaGVscCBJIGNvdWxkLi4uCjU5QW4gZXJyb3IgbWlnaHQgaGF2ZSBvY2N1cnJlZCBiZWZvcmUgSSBub3RpY2VkIGFueSBwcm9ibGVtcy4KNDVgYElmIGFsbCBlbHNlIGZhaWxzLCByZWFkIHRoZSBpbnN0cnVjdGlvbnMuJycKMDIgKAoxNEVtZXJnZW5jeSBzdG9wCjMwVGVYIGNhcGFjaXR5IGV4Y2VlZGVkLCBzb3JyeSBbCjQ0SWYgeW91IHJlYWxseSBhYnNvbHV0ZWx5IG5lZWQgbW9yZSBjYXBhY2l0eSwKMzV5b3UgY2FuIGFzayBhIHdpemFyZCB0byBlbmxhcmdlIG1lLgoxOVRoaXMgY2FuJ3QgaGFwcGVuICgKNTlJJ20gYnJva2VuLiBQbGVhc2Ugc2hvdyB0aGlzIHRvIHNvbWVvbmUgd2hvIGNhbiBmaXggY2FuIGZpeAozNUkgY2FuJ3QgZ28gb24gbWVldGluZyB5b3UgbGlrZSB0aGlzCjU1T25lIG9mIHlvdXIgZmF1eCBwYXMgc2VlbXMgdG8gaGF2ZSB3b3VuZGVkIG1lIGRlZXBseS4uLgo1OWluIGZhY3QsIEknbSBiYXJlbHkgY29uc2Npb3VzLiBQbGVhc2UgZml4IGl0IGFuZCB0cnkgYWdhaW4uCjEySW50ZXJydXB0aW9uCjA5WW91IHJhbmc/CjYwVHJ5IHRvIGluc2VydCBzb21lIGluc3RydWN0aW9ucyBmb3IgbWUgKGUuZy4sYElcc2hvd2xpc3RzJyksCjQzdW5sZXNzIHlvdSBqdXN0IHdhbnQgdG8gcXVpdCBieSB0eXBpbmcgYFgnLgoxNm1haW4gbWVtb3J5IHNpemUKMjRBVkFJTCBsaXN0IGNsb2JiZXJlZCBhdCAKMzFEb3VibGUtQVZBSUwgbGlzdCBjbG9iYmVyZWQgYXQgCjI0RG91Ymx5IGZyZWUgbG9jYXRpb24gYXQgCjEyQmFkIGZsYWcgYXQgCjE0TmV3IGJ1c3kgbG9jczoKMDVMSU5LKAowNUlORk8oCjAyW10KMTBDTE9CQkVSRUQuCjA0Zm91bAowM2ZpbAowNiBwbHVzIAowNyBtaW51cyAKMDMgW10KMjZCYWQgbGluaywgZGlzcGxheSBhYm9ydGVkLgowNGV0Yy4KMThVbmtub3duIG5vZGUgdHlwZSEKMDV1bnNldAowNGJveCgKMDIpeAoxMCwgc2hpZnRlZCAKMDkgY29sdW1ucykKMTAsIHN0cmV0Y2ggCjA5LCBzaHJpbmsgCjExLCBnbHVlIHNldCAKMDItIAowMz8uPwowMzwgLQowNXJ1bGUoCjA2aW5zZXJ0CjE1LCBuYXR1cmFsIHNpemUgCjA4OyBzcGxpdCgKMTQpOyBmbG9hdCBjb3N0IAowNGdsdWUKMDlub25zY3JpcHQKMDVtc2tpcAowMm11CjAwCjA4bGVhZGVycyAKMDRrZXJuCjEzIChmb3IgYWNjZW50KQowNW1rZXJuCjAzZW5kCjA1YmVnaW4KMDRtYXRoCjAyb24KMDNvZmYKMTMsIHN1cnJvdW5kZWQgCjExIChsaWdhdHVyZSAKMDhwZW5hbHR5IAoxM2Rpc2NyZXRpb25hcnkKMTEgcmVwbGFjaW5nIAowNG1hcmsKMDd2YWRqdXN0CjA4Zmx1c2hpbmcKMDdjb3B5aW5nCjA4dmVydGljYWwKMTBob3Jpem9udGFsCjEyZGlzcGxheSBtYXRoCjAybm8KMTdpbnRlcm5hbCB2ZXJ0aWNhbAoyMXJlc3RyaWN0ZWQgaG9yaXpvbnRhbAowNSBtb2RlCjE4c2VtYW50aWMgbmVzdCBzaXplCjA0IyMjIAoxNyBlbnRlcmVkIGF0IGxpbmUgCjEwIChsYW5ndWFnZQoxMDpoeXBoZW5taW4KMTggKFxvdXRwdXQgcm91dGluZSkKMjUjIyMgcmVjZW50IGNvbnRyaWJ1dGlvbnM6CjEwcHJldmRlcHRoIAowN2lnbm9yZWQKMTEsIHByZXZncmFmIAowNSBsaW5lCjEyc3BhY2VmYWN0b3IgCjE5LCBjdXJyZW50IGxhbmd1YWdlIAoyOHRoaXMgd2lsbCBiZSBkZW5vbWluYXRvciBvZjoKMDhsaW5lc2tpcAoxMmJhc2VsaW5lc2tpcAowN3BhcnNraXAKMTZhYm92ZWRpc3BsYXlza2lwCjE2YmVsb3dkaXNwbGF5c2tpcAoyMWFib3ZlZGlzcGxheXNob3J0c2tpcAoyMWJlbG93ZGlzcGxheXNob3J0c2tpcAowOGxlZnRza2lwCjA5cmlnaHRza2lwCjA3dG9wc2tpcAoxMnNwbGl0dG9wc2tpcAowN3RhYnNraXAKMDlzcGFjZXNraXAKMTB4c3BhY2Vza2lwCjExcGFyZmlsbHNraXAKMTB0aGlubXVza2lwCjA5bWVkbXVza2lwCjExdGhpY2ttdXNraXAKMjVbdW5rbm93biBnbHVlIHBhcmFtZXRlciFdCjA0c2tpcAowNm11c2tpcAowMnB0CjA2b3V0cHV0CjA4ZXZlcnlwYXIKMDlldmVyeW1hdGgKMTJldmVyeWRpc3BsYXkKMDlldmVyeWhib3gKMDlldmVyeXZib3gKMDhldmVyeWpvYgowN2V2ZXJ5Y3IKMDdlcnJoZWxwCjA0dG9rcwowNEVUQy4KMDNib3gKMDR2b2lkCjEyY3VycmVudCBmb250CjA4dGV4dGZvbnQKMTBzY3JpcHRmb250CjE2c2NyaXB0c2NyaXB0Zm9udAowN2NhdGNvZGUKMDZsY2NvZGUKMDZ1Y2NvZGUKMDZzZmNvZGUKMDhtYXRoY29kZQoxMnByZXRvbGVyYW5jZQowOXRvbGVyYW5jZQoxMWxpbmVwZW5hbHR5CjEzaHlwaGVucGVuYWx0eQoxNWV4aHlwaGVucGVuYWx0eQoxMWNsdWJwZW5hbHR5CjEyd2lkb3dwZW5hbHR5CjE5ZGlzcGxheXdpZG93cGVuYWx0eQoxM2Jyb2tlbnBlbmFsdHkKMTJiaW5vcHBlbmFsdHkKMTByZWxwZW5hbHR5CjE3cHJlZGlzcGxheXBlbmFsdHkKMThwb3N0ZGlzcGxheXBlbmFsdHkKMTZpbnRlcmxpbmVwZW5hbHR5CjIwZG91YmxlaHlwaGVuZGVtZXJpdHMKMTlmaW5hbGh5cGhlbmRlbWVyaXRzCjExYWRqZGVtZXJpdHMKMDNtYWcKMTVkZWxpbWl0ZXJmYWN0b3IKMDlsb29zZW5lc3MKMDR0aW1lCjAzZGF5CjA1bW9udGgKMDR5ZWFyCjE0c2hvd2JveGJyZWFkdGgKMTJzaG93Ym94ZGVwdGgKMDhoYmFkbmVzcwowOHZiYWRuZXNzCjA3cGF1c2luZwoxM3RyYWNpbmdvbmxpbmUKMTN0cmFjaW5nbWFjcm9zCjEydHJhY2luZ3N0YXRzCjE3dHJhY2luZ3BhcmFncmFwaHMKMTJ0cmFjaW5ncGFnZXMKMTN0cmFjaW5nb3V0cHV0CjE2dHJhY2luZ2xvc3RjaGFycwoxNXRyYWNpbmdjb21tYW5kcwoxNXRyYWNpbmdyZXN0b3JlcwowNnVjaHlwaAoxM291dHB1dHBlbmFsdHkKMTNtYXhkZWFkY3ljbGVzCjA5aGFuZ2FmdGVyCjE1ZmxvYXRpbmdwZW5hbHR5CjEwZ2xvYmFsZGVmcwowM2ZhbQoxMGVzY2FwZWNoYXIKMTdkZWZhdWx0aHlwaGVuY2hhcgoxNWRlZmF1bHRza2V3Y2hhcgoxMWVuZGxpbmVjaGFyCjExbmV3bGluZWNoYXIKMDhsYW5ndWFnZQoxM2xlZnRoeXBoZW5taW4KMTRyaWdodGh5cGhlbm1pbgoxNGhvbGRpbmdpbnNlcnRzCjE3ZXJyb3Jjb250ZXh0bGluZXMKMjhbdW5rbm93biBpbnRlZ2VyIHBhcmFtZXRlciFdCjA1Y291bnQKMDdkZWxjb2RlCjA5cGFyaW5kZW50CjEybWF0aHN1cnJvdW5kCjEzbGluZXNraXBsaW1pdAowNWhzaXplCjA1dnNpemUKMDhtYXhkZXB0aAoxM3NwbGl0bWF4ZGVwdGgKMTFib3htYXhkZXB0aAowNWhmdXp6CjA1dmZ1enoKMThkZWxpbWl0ZXJzaG9ydGZhbGwKMThudWxsZGVsaW1pdGVyc3BhY2UKMTFzY3JpcHRzcGFjZQoxNHByZWRpc3BsYXlzaXplCjEyZGlzcGxheXdpZHRoCjEzZGlzcGxheWluZGVudAoxMm92ZXJmdWxscnVsZQoxMGhhbmdpbmRlbnQKMDdob2Zmc2V0CjA3dm9mZnNldAoxNmVtZXJnZW5jeXN0cmV0Y2gKMjZbdW5rbm93biBkaW1lbiBwYXJhbWV0ZXIhXQowNWRpbWVuCjA2RVFVSVYoCjEybm90ZXhwYW5kZWQ6CjA5aGFzaCBzaXplCjA2Y3NuYW1lCjA5ZW5kY3NuYW1lCjExSU1QT1NTSUJMRS4KMTJOT05FWElTVEVOVC4KMDZhY2NlbnQKMDdhZHZhbmNlCjE1YWZ0ZXJhc3NpZ25tZW50CjEwYWZ0ZXJncm91cAoxMGJlZ2luZ3JvdXAKMDRjaGFyCjA5ZGVsaW1pdGVyCjA2ZGl2aWRlCjA4ZW5kZ3JvdXAKMTFleHBhbmRhZnRlcgowNGZvbnQKMDlmb250ZGltZW4KMDZoYWxpZ24KMDVocnVsZQoxMmlnbm9yZXNwYWNlcwoxMG1hdGhhY2NlbnQKMDhtYXRoY2hhcgoxMG1hdGhjaG9pY2UKMDhtdWx0aXBseQowN25vYWxpZ24KMTBub2JvdW5kYXJ5CjA4bm9leHBhbmQKMDRvbWl0CjA4cGFyc2hhcGUKMDdwZW5hbHR5CjA4cHJldmdyYWYKMDdyYWRpY2FsCjA0cmVhZAowNXJlbGF4CjA2c2V0Ym94CjAzdGhlCjA2dmFsaWduCjA3dmNlbnRlcgowNXZydWxlCjA5c2F2ZSBzaXplCjE1Z3JvdXBpbmcgbGV2ZWxzCjExcmVhc3NpZ25pbmcKMDhjaGFuZ2luZwowNGludG8KMTdnbG9iYWxseSBjaGFuZ2luZwowOGN1cmxldmVsCjA5cmV0YWluaW5nCjA5cmVzdG9yaW5nCjA1U0FWRSgKMjhJbmNvbXBhdGlibGUgbWFnbmlmaWNhdGlvbiAoCjAyKTsKMzYgdGhlIHByZXZpb3VzIHZhbHVlIHdpbGwgYmUgcmV0YWluZWQKNThJIGNhbiBoYW5kbGUgb25seSBvbmUgbWFnbmlmaWNhdGlvbiByYXRpbyBwZXIgam9iLiBTbyBJJ3ZlCjU5cmV2ZXJ0ZWQgdG8gdGhlIG1hZ25pZmljYXRpb24geW91IHVzZWQgZWFybGllciBvbiB0aGlzIHJ1bi4KNDZJbGxlZ2FsIG1hZ25pZmljYXRpb24gaGFzIGJlZW4gY2hhbmdlZCB0byAxMDAwCjUyVGhlIG1hZ25pZmljYXRpb24gcmF0aW8gbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMyNzY4LgowNEJBRC4KMDItPgoyMmJlZ2luLWdyb3VwIGNoYXJhY3RlciAKMjBlbmQtZ3JvdXAgY2hhcmFjdGVyIAoyMW1hdGggc2hpZnQgY2hhcmFjdGVyIAoyNm1hY3JvIHBhcmFtZXRlciBjaGFyYWN0ZXIgCjIyc3VwZXJzY3JpcHQgY2hhcmFjdGVyIAoyMHN1YnNjcmlwdCBjaGFyYWN0ZXIgCjI1ZW5kIG9mIGFsaWdubWVudCB0ZW1wbGF0ZQoxMmJsYW5rIHNwYWNlIAoxMXRoZSBsZXR0ZXIgCjE0dGhlIGNoYXJhY3RlciAKMjNbdW5rbm93biBjb21tYW5kIGNvZGUhXQowMjogCjA3KGxldmVsIAowOFJ1bmF3YXkgCjEwZGVmaW5pdGlvbgowOGFyZ3VtZW50CjA4cHJlYW1ibGUKMDR0ZXh0CjAzPCo+CjA5PGluc2VydD4gCjA2PHJlYWQgCjAybC4KMTE8YXJndW1lbnQ+IAoxMTx0ZW1wbGF0ZT4gCjE2PHJlY2VudGx5IHJlYWQ+IAoxOTx0byBiZSByZWFkIGFnYWluPiAKMTY8aW5zZXJ0ZWQgdGV4dD4gCjA5PG91dHB1dD4gCjExPGV2ZXJ5cGFyPiAKMTI8ZXZlcnltYXRoPiAKMTU8ZXZlcnlkaXNwbGF5PiAKMTI8ZXZlcnloYm94PiAKMTI8ZXZlcnl2Ym94PiAKMTE8ZXZlcnlqb2I+IAoxMDxldmVyeWNyPiAKMDc8bWFyaz4gCjExPGV2ZXJ5ZW9mPiAKMDg8d3JpdGU+IAoxNmlucHV0IHN0YWNrIHNpemUKMDV3cml0ZQo0OChpbnRlcndvdmVuIGFsaWdubWVudCBwcmVhbWJsZXMgYXJlIG5vdCBhbGxvd2VkKQoxN3RleHQgaW5wdXQgbGV2ZWxzCjAzcGFyCjExSW5jb21wbGV0ZSAKMzQ7IGFsbCB0ZXh0IHdhcyBpZ25vcmVkIGFmdGVyIGxpbmUgCjU0QSBmb3JiaWRkZW4gY29udHJvbCBzZXF1ZW5jZSBvY2N1cnJlZCBpbiBza2lwcGVkIHRleHQuCjU5VGhpcyBraW5kIG9mIGVycm9yIGhhcHBlbnMgd2hlbiB5b3Ugc2F5IGBcaWYuLi4nIGFuZCBmb3JnZXQKNTl0aGUgbWF0Y2hpbmcgYFxmaScuIEkndmUgaW5zZXJ0ZWQgYSBgXGZpJzsgdGhpcyBtaWdodCB3b3JrLgo1M1RoZSBmaWxlIGVuZGVkIHdoaWxlIEkgd2FzIHNraXBwaW5nIGNvbmRpdGlvbmFsIHRleHQuCjEwRmlsZSBlbmRlZAozMkZvcmJpZGRlbiBjb250cm9sIHNlcXVlbmNlIGZvdW5kCjE2IHdoaWxlIHNjYW5uaW5nIAowNCBvZiAKNDZJIHN1c3BlY3QgeW91IGhhdmUgZm9yZ290dGVuIGEgYH0nLCBjYXVzaW5nIG1lCjQxdG8gcmVhZCBwYXN0IHdoZXJlIHlvdSB3YW50ZWQgbWUgdG8gc3RvcC4KNDlJJ2xsIHRyeSB0byByZWNvdmVyOyBidXQgaWYgdGhlIGVycm9yIGlzIHNlcmlvdXMsCjUxeW91J2QgYmV0dGVyIHR5cGUgYEUnIG9yIGBYJyBub3cgYW5kIGZpeCB5b3VyIGZpbGUuCjAzdXNlCjM5VGV4dCBsaW5lIGNvbnRhaW5zIGFuIGludmFsaWQgY2hhcmFjdGVyCjUzQSBmdW5ueSBzeW1ib2wgdGhhdCBJIGNhbid0IHJlYWQgaGFzIGp1c3QgYmVlbiBpbnB1dC4KNDhDb250aW51ZSwgYW5kIEknbGwgZm9yZ2V0IHRoYXQgaXQgZXZlciBoYXBwZW5lZC4KMzcoUGxlYXNlIHR5cGUgYSBjb21tYW5kIG9yIHNheSBgXGVuZCcpCjM4KioqIChqb2IgYWJvcnRlZCwgbm8gbGVnYWwgXGVuZCBmb3VuZCkKMDI9PgoyNlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlCjQ3VGhlIGNvbnRyb2wgc2VxdWVuY2UgYXQgdGhlIGVuZCBvZiB0aGUgdG9wIGxpbmUKNTJvZiB5b3VyIGVycm9yIG1lc3NhZ2Ugd2FzIG5ldmVyIFxkZWYnZWQuIElmIHlvdSBoYXZlCjU1bWlzc3BlbGxlZCBpdCAoZS5nLiwgYFxob2J4JyksIHR5cGUgYEknIGFuZCB0aGUgY29ycmVjdAo1MXNwZWxsaW5nIChlLmcuLCBgSVxoYm94JykuIE90aGVyd2lzZSBqdXN0IGNvbnRpbnVlLAo0NWFuZCBJJ2xsIGZvcmdldCBhYm91dCB3aGF0ZXZlciB3YXMgdW5kZWZpbmVkLgowOE1pc3NpbmcgCjA5IGluc2VydGVkCjUzVGhlIGNvbnRyb2wgc2VxdWVuY2UgbWFya2VkIDx0byBiZSByZWFkIGFnYWluPiBzaG91bGQKNDJub3QgYXBwZWFyIGJldHdlZW4gXGNzbmFtZSBhbmQgXGVuZGNzbmFtZS4KMDVpbnB1dAowOGVuZGlucHV0CjA3dG9wbWFyawowOWZpcnN0bWFyawowN2JvdG1hcmsKMTRzcGxpdGZpcnN0bWFyawoxMnNwbGl0Ym90bWFyawoyMHBhcmFtZXRlciBzdGFjayBzaXplCjEyQXJndW1lbnQgb2YgCjE1IGhhcyBhbiBleHRyYSB9CjU4SSd2ZSBydW4gYWNyb3NzIGEgYH0nIHRoYXQgZG9lc24ndCBzZWVtIHRvIG1hdGNoIGFueXRoaW5nLgo1MkZvciBleGFtcGxlLCBgXGRlZlxhIzF7Li4ufScgYW5kIGBcYX0nIHdvdWxkIHByb2R1Y2UKNTR0aGlzIGVycm9yLiBJZiB5b3Ugc2ltcGx5IHByb2NlZWQgbm93LCB0aGUgYFxwYXInIHRoYXQKNTJJJ3ZlIGp1c3QgaW5zZXJ0ZWQgd2lsbCBjYXVzZSBtZSB0byByZXBvcnQgYSBydW5hd2F5CjU0YXJndW1lbnQgdGhhdCBtaWdodCBiZSB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gQnV0IGlmCjU3eW91ciBgfScgd2FzIHNwdXJpb3VzLCBqdXN0IHR5cGUgYDInIGFuZCBpdCB3aWxsIGdvIGF3YXkuCjIzUGFyYWdyYXBoIGVuZGVkIGJlZm9yZSAKMTMgd2FzIGNvbXBsZXRlCjU4SSBzdXNwZWN0IHlvdSd2ZSBmb3Jnb3R0ZW4gYSBgfScsIGNhdXNpbmcgbWUgdG8gYXBwbHkgdGhpcwo1NGNvbnRyb2wgc2VxdWVuY2UgdG8gdG9vIG11Y2ggdGV4dC4gSG93IGNhbiB3ZSByZWNvdmVyPwo1OU15IHBsYW4gaXMgdG8gZm9yZ2V0IHRoZSB3aG9sZSB0aGluZyBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuCjA3VXNlIG9mIAoyOSBkb2Vzbid0IG1hdGNoIGl0cyBkZWZpbml0aW9uCjU0SWYgeW91IHNheSwgZS5nLiwgYFxkZWZcYTF7Li4ufScsIHRoZW4geW91IG11c3QgYWx3YXlzCjUycHV0IGAxJyBhZnRlciBgXGEnLCBzaW5jZSBjb250cm9sIHNlcXVlbmNlIG5hbWVzIGFyZQo1Mm1hZGUgdXAgb2YgbGV0dGVycyBvbmx5LiBUaGUgbWFjcm8gaGVyZSBoYXMgbm90IGJlZW4KNTFmb2xsb3dlZCBieSB0aGUgcmVxdWlyZWQgc3R1ZmYsIHNvIEknbSBpZ25vcmluZyBpdC4KMDI8LQoxOE1pc3NpbmcgeyBpbnNlcnRlZAo1MkEgbGVmdCBicmFjZSB3YXMgbWFuZGF0b3J5IGhlcmUsIHNvIEkndmUgcHV0IG9uZSBpbi4KNTVZb3UgbWlnaHQgd2FudCB0byBkZWxldGUgYW5kL29yIGluc2VydCBzb21lIGNvcnJlY3Rpb25zCjQ4c28gdGhhdCBJIHdpbGwgZmluZCBhIG1hdGNoaW5nIHJpZ2h0IGJyYWNlIHNvb24uCjU0KElmIHlvdSdyZSBjb25mdXNlZCBieSBhbGwgdGhpcywgdHJ5IHR5cGluZyBgSX0nIG5vdy4pCjIzSW5jb21wYXRpYmxlIGdsdWUgdW5pdHMKNTJJJ20gZ29pbmcgdG8gYXNzdW1lIHRoYXQgMW11PTFwdCB3aGVuIHRoZXkncmUgbWl4ZWQuCjMxTWlzc2luZyBudW1iZXIsIHRyZWF0ZWQgYXMgemVybwo0N0EgbnVtYmVyIHNob3VsZCBoYXZlIGJlZW4gaGVyZTsgSSBpbnNlcnRlZCBgMCcuCjU0KElmIHlvdSBjYW4ndCBmaWd1cmUgb3V0IHdoeSBJIG5lZWRlZCB0byBzZWUgYSBudW1iZXIsCjUxbG9vayB1cCBgd2VpcmQgZXJyb3InIGluIHRoZSBpbmRleCB0byBUaGUgVGVYYm9vay4pCjExc3BhY2VmYWN0b3IKMDlwcmV2ZGVwdGgKMTBkZWFkY3ljbGVzCjE1aW5zZXJ0cGVuYWx0aWVzCjAyd2QKMDJodAowMmRwCjExbGFzdHBlbmFsdHkKMDhsYXN0a2VybgowOGxhc3Rza2lwCjExaW5wdXRsaW5lbm8KMDdiYWRuZXNzCjA5SW1wcm9wZXIgCjU0WW91IGNhbiByZWZlciB0byBcc3BhY2VmYWN0b3Igb25seSBpbiBob3Jpem9udGFsIG1vZGU7CjU0eW91IGNhbiByZWZlciB0byBccHJldmRlcHRoIG9ubHkgaW4gdmVydGljYWwgbW9kZTsgYW5kCjQ4bmVpdGhlciBvZiB0aGVzZSBpcyBtZWFuaW5nZnVsIGluc2lkZSBcd3JpdGUuIFNvCjUySSdtIGZvcmdldHRpbmcgd2hhdCB5b3Ugc2FpZCBhbmQgdXNpbmcgemVybyBpbnN0ZWFkLgoxNVlvdSBjYW4ndCB1c2UgYAowOCcgYWZ0ZXIgCjE3QmFkIHJlZ2lzdGVyIGNvZGUKNDRBIHJlZ2lzdGVyIG51bWJlciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LgoyN0kgY2hhbmdlZCB0aGlzIG9uZSB0byB6ZXJvLgoxOEJhZCBjaGFyYWN0ZXIgY29kZQo0NUEgY2hhcmFjdGVyIG51bWJlciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LgoxMEJhZCBudW1iZXIKNTFTaW5jZSBJIGV4cGVjdGVkIHRvIHJlYWQgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNSwKMTJCYWQgbWF0aGNoYXIKNDZBIG1hdGhjaGFyIG51bWJlciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzI3NjcuCjE4QmFkIGRlbGltaXRlciBjb2RlCjU2QSBudW1lcmljIGRlbGltaXRlciBjb2RlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyXnsyN30tMS4KMjhJbXByb3BlciBhbHBoYWJldGljIGNvbnN0YW50CjU2QSBvbmUtY2hhcmFjdGVyIGNvbnRyb2wgc2VxdWVuY2UgYmVsb25ncyBhZnRlciBhIGAgbWFyay4KMzdTbyBJJ20gZXNzZW50aWFsbHkgaW5zZXJ0aW5nIFwwIGhlcmUuCjE0TnVtYmVyIHRvbyBiaWcKNTRJIGNhbiBvbmx5IGdvIHVwIHRvIDIxNDc0ODM2NDc9JzE3Nzc3Nzc3Nzc3PSI3RkZGRkZGRiwKNDJzbyBJJ20gdXNpbmcgdGhhdCBudW1iZXIgaW5zdGVhZCBvZiB5b3Vycy4KMDR0cnVlCjI1SWxsZWdhbCB1bml0IG9mIG1lYXN1cmUgKAoxOHJlcGxhY2VkIGJ5IGZpbGxsKQozNUkgZGRkb24ndCBnbyBhbnkgaGlnaGVyIHRoYW4gZmlsbGwuCjAyZW0KMDJleAoxMm11IGluc2VydGVkKQo0OFRoZSB1bml0IG9mIG1lYXN1cmVtZW50IGluIG1hdGggZ2x1ZSBtdXN0IGJlIG11Lgo1MVRvIHJlY292ZXIgZ3JhY2VmdWxseSBmcm9tIHRoaXMgZXJyb3IsIGl0J3MgYmVzdCB0bwo1MmRlbGV0ZSB0aGUgZXJyb25lb3VzIHVuaXRzOyBlLmcuLCB0eXBlIGAyJyB0byBkZWxldGUKNDV0d28gbGV0dGVycy4gKFNlZSBDaGFwdGVyIDI3IG9mIFRoZSBUZVhib29rLikKMDJpbgowMnBjCjAyY20KMDJtbQowMmJwCjAyZGQKMDJjYwowMnNwCjEycHQgaW5zZXJ0ZWQpCjQ5RGltZW5zaW9ucyBjYW4gYmUgaW4gdW5pdHMgb2YgZW0sIGV4LCBpbiwgcHQsIHBjLAo1MGNtLCBtbSwgZGQsIGNjLCBicCwgb3Igc3A7IGJ1dCB5b3VycyBpcyBhIG5ldyBvbmUhCjU5SSdsbCBhc3N1bWUgdGhhdCB5b3UgbWVhbnQgdG8gc2F5IHB0LCBmb3IgcHJpbnRlcidzIHBvaW50cy4KMTlEaW1lbnNpb24gdG9vIGxhcmdlCjUwSSBjYW4ndCB3b3JrIHdpdGggc2l6ZXMgYmlnZ2VyIHRoYW4gYWJvdXQgMTkgZmVldC4KNDZDb250aW51ZSBhbmQgSSdsbCB1c2UgdGhlIGxhcmdlc3QgdmFsdWUgSSBjYW4uCjA0cGx1cwowNW1pbnVzCjA1d2lkdGgKMDZoZWlnaHQKMDVkZXB0aAowNm51bWJlcgoxMnJvbWFubnVtZXJhbAowNnN0cmluZwowN21lYW5pbmcKMDhmb250bmFtZQowN2pvYm5hbWUKMTJlVGVYcmV2aXNpb24KMDQgYXQgCjYwV2hlcmUgd2FzIHRoZSBsZWZ0IGJyYWNlPyBZb3Ugc2FpZCBzb21ldGhpbmcgbGlrZSBgXGRlZlxhfScsCjQzd2hpY2ggSSdtIGdvaW5nIHRvIGludGVycHJldCBhcyBgXGRlZlxhe30nLgozMllvdSBhbHJlYWR5IGhhdmUgbmluZSBwYXJhbWV0ZXJzCjQ1SSdtIGdvaW5nIHRvIGlnbm9yZSB0aGUgIyBzaWduIHlvdSBqdXN0IHVzZWQuCjQxUGFyYW1ldGVycyBtdXN0IGJlIG51bWJlcmVkIGNvbnNlY3V0aXZlbHkKNTdJJ3ZlIGluc2VydGVkIHRoZSBkaWdpdCB5b3Ugc2hvdWxkIGhhdmUgdXNlZCBhZnRlciB0aGUgIy4KMzZUeXBlIGAxJyB0byBkZWxldGUgd2hhdCB5b3UgZGlkIHVzZS4KNDJJbGxlZ2FsIHBhcmFtZXRlciBudW1iZXIgaW4gZGVmaW5pdGlvbiBvZiAKNDFZb3UgbWVhbnQgdG8gdHlwZSAjIyBpbnN0ZWFkIG9mICMsIHJpZ2h0Pwo1Nk9yIG1heWJlIGEgfSB3YXMgZm9yZ290dGVuIHNvbWV3aGVyZSBlYXJsaWVyLCBhbmQgdGhpbmdzCjU4YXJlIGFsbCBzY3Jld2VkIHVwPyBJJ20gZ29pbmcgdG8gYXNzdW1lIHRoYXQgeW91IG1lYW50ICMjLgo0OSoqKiAoY2Fubm90IFxyZWFkIGZyb20gdGVybWluYWwgaW4gbm9uc3RvcCBtb2RlcykKMThGaWxlIGVuZGVkIHdpdGhpbiAKMzNUaGlzIFxyZWFkIGhhcyB1bmJhbGFuY2VkIGJyYWNlcy4KMDJpZgowNWlmY2F0CjA1aWZudW0KMDVpZmRpbQowNWlmb2RkCjA3aWZ2bW9kZQowN2lmaG1vZGUKMDdpZm1tb2RlCjA3aWZpbm5lcgowNmlmdm9pZAowNmlmaGJveAowNmlmdmJveAowM2lmeAowNWlmZW9mCjA2aWZ0cnVlCjA3aWZmYWxzZQowNmlmY2FzZQowNnVubGVzcwowMmZpCjAyb3IKMDRlbHNlCjA2RXh0cmEgCjQ0SSdtIGlnbm9yaW5nIHRoaXM7IGl0IGRvZXNuJ3QgbWF0Y2ggYW55IFxpZi4KMDZ7dHJ1ZX0KMDd7ZmFsc2V9CjIzTWlzc2luZyA9IGluc2VydGVkIGZvciAKNDhJIHdhcyBleHBlY3RpbmcgdG8gc2VlIGA8JywgYD0nLCBvciBgPicuIERpZG4ndC4KMDZ7Y2FzZSAKMTBUZVhpbnB1dHM6CjA5VGVYZm9udHM6CjA0LmZtdAoxNWlucHV0IGZpbGUgbmFtZQoxOUkgY2FuJ3QgZmluZCBmaWxlIGAKMjNJIGNhbid0IHdyaXRlIG9uIGZpbGUgYAowMicuCjA0LnRleAoyMFBsZWFzZSB0eXBlIGFub3RoZXIgCjQ1KioqIChqb2IgYWJvcnRlZCwgZmlsZSBlcnJvciBpbiBub25zdG9wIG1vZGUpCjA0LmR2aQoyMGZpbGUgbmFtZSBmb3Igb3V0cHV0CjA2dGV4cHV0CjA0LmxvZwowMioqCjIwdHJhbnNjcmlwdCBmaWxlIG5hbWUKMDIgIAowOG51bGxmb250CjA1Rm9udCAKMDggc2NhbGVkIAozNiBub3QgbG9hZGFibGU6IEJhZCBtZXRyaWMgKFRGTSkgZmlsZQo0MiBub3QgbG9hZGFibGU6IE1ldHJpYyAoVEZNKSBmaWxlIG5vdCBmb3VuZAo1MEkgd2Fzbid0IGFibGUgdG8gcmVhZCB0aGUgc2l6ZSBkYXRhIGZvciB0aGlzIGZvbnQsCjQwc28gSSB3aWxsIGlnbm9yZSB0aGUgZm9udCBzcGVjaWZpY2F0aW9uLgo0OFtXaXphcmRzIGNhbiBmaXggVEZNIGZpbGVzIHVzaW5nIFRGdG9QTC9QTHRvVEYuXQo0NllvdSBtaWdodCB0cnkgaW5zZXJ0aW5nIGEgZGlmZmVyZW50IGZvbnQgc3BlYzsKNTdlLmcuLCB0eXBlIGBJXGZvbnQ8c2FtZSBmb250IGlkPj08c3Vic3RpdHV0ZSBmb250IG5hbWU+Jy4KMDQudGZtCjMzIG5vdCBsb2FkZWQ6IE5vdCBlbm91Z2ggcm9vbSBsZWZ0CjUySSdtIGFmcmFpZCBJIHdvbid0IGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhpcyBmb250LAo1NWJlY2F1c2UgbXkgbWVtb3J5IGZvciBjaGFyYWN0ZXItc2l6ZSBkYXRhIGlzIHRvbyBzbWFsbC4KNTFJZiB5b3UncmUgcmVhbGx5IHN0dWNrLCBhc2sgYSB3aXphcmQgdG8gZW5sYXJnZSBtZS4KNThPciBtYXliZSB0cnkgYElcZm9udDxzYW1lIGZvbnQgaWQ+PTxuYW1lIG9mIGxvYWRlZCBmb250PicuCjIzTWlzc2luZyBmb250IGlkZW50aWZpZXIKNDJJIHdhcyBsb29raW5nIGZvciBhIGNvbnRyb2wgc2VxdWVuY2Ugd2hvc2UKNDJjdXJyZW50IG1lYW5pbmcgaGFzIGJlZW4gZGVmaW5lZCBieSBcZm9udC4KMTAgaGFzIG9ubHkgCjIxIGZvbnRkaW1lbiBwYXJhbWV0ZXJzCjUxVG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBmb250IHBhcmFtZXRlcnMsIHlvdSBtdXN0CjUzdXNlIFxmb250ZGltZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFxmb250IGlzIGxvYWRlZC4KMTFmb250IG1lbW9yeQozMU1pc3NpbmcgY2hhcmFjdGVyOiBUaGVyZSBpcyBubyAKMDkgaW4gZm9udCAKMTIgVGVYIG91dHB1dCAKMDh2bGlzdG91dAozMUNvbXBsZXRlZCBib3ggYmVpbmcgc2hpcHBlZCBvdXQKMjFNZW1vcnkgdXNhZ2UgYmVmb3JlOiAKMDggYWZ0ZXI6IAoxOTsgc3RpbGwgdW50b3VjaGVkOiAKMzFIdWdlIHBhZ2UgY2Fubm90IGJlIHNoaXBwZWQgb3V0CjUwVGhlIHBhZ2UganVzdCBjcmVhdGVkIGlzIG1vcmUgdGhhbiAxOCBmZWV0IHRhbGwgb3IKNThtb3JlIHRoYW4gMTggZmVldCB3aWRlLCBzbyBJIHN1c3BlY3Qgc29tZXRoaW5nIHdlbnQgd3JvbmcuCjM1VGhlIGZvbGxvd2luZyBib3ggaGFzIGJlZW4gZGVsZXRlZDoKMTlObyBwYWdlcyBvZiBvdXRwdXQuCjE4T3V0cHV0IHdyaXR0ZW4gb24gCjA1IHBhZ2UKMDIsIAowOCBieXRlcykuCjAydG8KMDZzcHJlYWQKMDlVbmRlcmZ1bGwKMDVMb29zZQoxNiBcaGJveCAoYmFkbmVzcyAKMzgpIGhhcyBvY2N1cnJlZCB3aGlsZSBcb3V0cHV0IGlzIGFjdGl2ZQoyNCkgaW4gcGFyYWdyYXBoIGF0IGxpbmVzIAoyNCkgaW4gYWxpZ25tZW50IGF0IGxpbmVzIAowMi0tCjE5KSBkZXRlY3RlZCBhdCBsaW5lIAoxNk92ZXJmdWxsIFxoYm94ICgKMTFwdCB0b28gd2lkZQoyMVRpZ2h0IFxoYm94IChiYWRuZXNzIAowNXZwYWNrCjE2IFx2Ym94IChiYWRuZXNzIAoxNk92ZXJmdWxsIFx2Ym94ICgKMTFwdCB0b28gaGlnaAoyMVRpZ2h0IFx2Ym94IChiYWRuZXNzIAowMnt9CjEyZGlzcGxheXN0eWxlCjA5dGV4dHN0eWxlCjExc2NyaXB0c3R5bGUKMTdzY3JpcHRzY3JpcHRzdHlsZQoxNFVua25vd24gc3R5bGUhCjA3bWF0aG9yZAowNm1hdGhvcAowN21hdGhiaW4KMDdtYXRocmVsCjA4bWF0aG9wZW4KMDltYXRoY2xvc2UKMDltYXRocHVuY3QKMDltYXRoaW5uZXIKMDhvdmVybGluZQowOXVuZGVybGluZQowNGxlZnQKMDVyaWdodAowNm1pZGRsZQowNmxpbWl0cwowOG5vbGltaXRzCjIwZnJhY3Rpb24sIHRoaWNrbmVzcyAKMDk9IGRlZmF1bHQKMTcsIGxlZnQtZGVsaW1pdGVyIAoxOCwgcmlnaHQtZGVsaW1pdGVyIAoyNSBpcyB1bmRlZmluZWQgKGNoYXJhY3RlciAKNTRTb21ld2hlcmUgaW4gdGhlIG1hdGggZm9ybXVsYSBqdXN0IGVuZGVkLCB5b3UgdXNlZCB0aGUKNjBzdGF0ZWQgY2hhcmFjdGVyIGZyb20gYW4gdW5kZWZpbmVkIGZvbnQgZmFtaWx5LiBGb3IgZXhhbXBsZSwKNThwbGFpbiBUZVggZG9lc24ndCBhbGxvdyBcaXQgb3IgXHNsIGluIHN1YnNjcmlwdHMuIFByb2NlZWQsCjUyYW5kIEknbGwgdHJ5IHRvIGZvcmdldCB0aGF0IEkgbmVlZGVkIHRoYXQgY2hhcmFjdGVyLgowNm1saXN0MQowNm1saXN0MgowNm1saXN0Mwo2NDAyMzQwMDAxMjIqNDAwMDEzMyoqMyoqMzQ0KjA0MDA0MDAqMDAwMDAwMjM0MDAwMTExKjExMTExMTIzNDEwMTEKMDZtbGlzdDQKMTIgaW5zaWRlICQkJ3MKNTNEaXNwbGF5cyBjYW4gdXNlIHNwZWNpYWwgYWxpZ25tZW50cyAobGlrZSBcZXFhbGlnbm5vKQo1N29ubHkgaWYgbm90aGluZyBidXQgdGhlIGFsaWdubWVudCBpdHNlbGYgaXMgYmV0d2VlbiAkJCdzLgo1OFNvIEkndmUgZGVsZXRlZCB0aGUgZm9ybXVsYXMgdGhhdCBwcmVjZWRlZCB0aGlzIGFsaWdubWVudC4KMDRzcGFuCjAyY3IKMDRjcmNyCjExZW5kdGVtcGxhdGUKMjRhbGlnbm1lbnQgdGFiIGNoYXJhY3RlciAKNDBNaXNzaW5nICMgaW5zZXJ0ZWQgaW4gYWxpZ25tZW50IHByZWFtYmxlCjUwVGhlcmUgc2hvdWxkIGJlIGV4YWN0bHkgb25lICMgYmV0d2VlbiAmJ3MsIHdoZW4gYW4KNTZcaGFsaWduIG9yIFx2YWxpZ24gaXMgYmVpbmcgc2V0IHVwLiBJbiB0aGlzIGNhc2UgeW91IGhhZAo0N25vbmUsIHNvIEkndmUgcHV0IG9uZSBpbjsgbWF5YmUgdGhhdCB3aWxsIHdvcmsuCjI5T25seSBvbmUgIyBpcyBhbGxvd2VkIHBlciB0YWIKNDltb3JlIHRoYW4gb25lLCBzbyBJJ20gaWdub3JpbmcgYWxsIGJ1dCB0aGUgZmlyc3QuCjA0ZW5kdgo0MEV4dHJhIGFsaWdubWVudCB0YWIgaGFzIGJlZW4gY2hhbmdlZCB0byAKNTJZb3UgaGF2ZSBnaXZlbiBtb3JlIFxzcGFuIG9yICYgbWFya3MgdGhhbiB0aGVyZSB3ZXJlCjU4aW4gdGhlIHByZWFtYmxlIHRvIHRoZSBcaGFsaWduIG9yIFx2YWxpZ24gbm93IGluIHByb2dyZXNzLgo1MFNvIEknbGwgYXNzdW1lIHRoYXQgeW91IG1lYW50IHRvIHR5cGUgXGNyIGluc3RlYWQuCjA5MjU2IHNwYW5zCjA2YWxpZ24xCjA2YWxpZ24wCjQ0SW5maW5pdGUgZ2x1ZSBzaHJpbmthZ2UgZm91bmQgaW4gYSBwYXJhZ3JhcGgKNTJUaGUgcGFyYWdyYXBoIGp1c3QgZW5kZWQgaW5jbHVkZXMgc29tZSBnbHVlIHRoYXQgaGFzCjU0aW5maW5pdGUgc2hyaW5rYWJpbGl0eSwgZS5nLiwgYFxoc2tpcCAwcHQgbWludXMgMWZpbCcuCjU0U3VjaCBnbHVlIGRvZXNuJ3QgYmVsb25nIHRoZXJlLS0taXQgYWxsb3dzIGEgcGFyYWdyYXBoCjU5b2YgYW55IGxlbmd0aCB0byBmaXQgb24gb25lIGxpbmUuIEJ1dCBpdCdzIHNhZmUgdG8gcHJvY2VlZCwKNTVzaW5jZSB0aGUgb2ZmZW5zaXZlIHNocmlua2FiaWxpdHkgaGFzIGJlZW4gbWFkZSBmaW5pdGUuCjA1ZGlzYzEKMDVkaXNjMgowMkBACjA3OiBsaW5lIAowMyB0PQowNiAtPiBAQAowNyB2aWEgQEAKMDMgYj0KMDMgcD0KMDMgZD0KMTBAZmlyc3RwYXNzCjExQHNlY29uZHBhc3MKMTRAZW1lcmdlbmN5cGFzcwowOXBhcmFncmFwaAowNWRpc2MzCjA1ZGlzYzQKMTNsaW5lIGJyZWFraW5nCjA1SFlQSCgKMTFoeXBoZW5hdGlvbgoxNiB3aWxsIGJlIGZsdXNoZWQKNDhIeXBoZW5hdGlvbiBleGNlcHRpb25zIG11c3QgY29udGFpbiBvbmx5IGxldHRlcnMKNTFhbmQgaHlwaGVucy4gQnV0IGNvbnRpbnVlOyBJJ2xsIGZvcmdpdmUgYW5kIGZvcmdldC4KMTJOb3QgYSBsZXR0ZXIKNTBMZXR0ZXJzIGluIFxoeXBoZW5hdGlvbiB3b3JkcyBtdXN0IGhhdmUgXGxjY29kZT4wLgo0N1Byb2NlZWQ7IEknbGwgaWdub3JlIHRoZSBjaGFyYWN0ZXIgSSBqdXN0IHJlYWQuCjIwZXhjZXB0aW9uIGRpY3Rpb25hcnkKMThwYXR0ZXJuIG1lbW9yeSBvcHMKMzFwYXR0ZXJuIG1lbW9yeSBvcHMgcGVyIGxhbmd1YWdlCjE0cGF0dGVybiBtZW1vcnkKMTNUb28gbGF0ZSBmb3IgCjA4cGF0dGVybnMKNTNBbGwgcGF0dGVybnMgbXVzdCBiZSBnaXZlbiBiZWZvcmUgdHlwZXNldHRpbmcgYmVnaW5zLgowNEJhZCAKMTcoU2VlIEFwcGVuZGl4IEguKQowOU5vbmxldHRlcgoxN0R1cGxpY2F0ZSBwYXR0ZXJuCjA3cHJ1bmluZwowOXZlcnRicmVhawo0OEluZmluaXRlIGdsdWUgc2hyaW5rYWdlIGZvdW5kIGluIGJveCBiZWluZyBzcGxpdAo1MlRoZSBib3ggeW91IGFyZSBcdnNwbGl0dGluZyBjb250YWlucyBzb21lIGluZmluaXRlbHkKNTdzaHJpbmthYmxlIGdsdWUsIGUuZy4sIGBcdnNzJyBvciBgXHZza2lwIDBwdCBtaW51cyAxZmlsJy4KNTlTdWNoIGdsdWUgZG9lc24ndCBiZWxvbmcgdGhlcmU7IGJ1dCB5b3UgY2FuIHNhZmVseSBwcm9jZWVkLAowNnZzcGxpdAowOSBuZWVkcyBhIAowNHZib3gKNDRUaGUgYm94IHlvdSBhcmUgdHJ5aW5nIHRvIHNwbGl0IGlzIGFuIFxoYm94Lgo0OUkgY2FuJ3Qgc3BsaXQgc3VjaCBhIGJveCwgc28gSSdsbCBsZWF2ZSBpdCBhbG9uZS4KMDhwYWdlZ29hbAowOXBhZ2V0b3RhbAoxMXBhZ2VzdHJldGNoCjE0cGFnZWZpbHN0cmV0Y2gKMTVwYWdlZmlsbHN0cmV0Y2gKMTZwYWdlZmlsbGxzdHJldGNoCjEwcGFnZXNocmluawowOXBhZ2VkZXB0aAowNGZpbGwKMDVmaWxsbAoxNyMjIyBjdXJyZW50IHBhZ2U6CjI4IChoZWxkIG92ZXIgZm9yIG5leHQgb3V0cHV0KQoxM3RvdGFsIGhlaWdodCAKMTMgZ29hbCBoZWlnaHQgCjA2IGFkZHMgCjAzLCAjCjEyIG1pZ2h0IHNwbGl0CjE1JSUgZ29hbCBoZWlnaHQ9CjEyLCBtYXggZGVwdGg9CjM4SW5zZXJ0aW9ucyBjYW4gb25seSBiZSBhZGRlZCB0byBhIHZib3gKNDBUdXQgdHV0OiBZb3UncmUgdHJ5aW5nIHRvIFxpbnNlcnQgaW50byBhCjQxXGJveCByZWdpc3RlciB0aGF0IG5vdyBjb250YWlucyBhbiBcaGJveC4KNDdQcm9jZWVkLCBhbmQgSSdsbCBkaXNjYXJkIGl0cyBwcmVzZW50IGNvbnRlbnRzLgowNHBhZ2UKNDVJbmZpbml0ZSBnbHVlIHNocmlua2FnZSBmb3VuZCBvbiBjdXJyZW50IHBhZ2UKNTJUaGUgcGFnZSBhYm91dCB0byBiZSBvdXRwdXQgY29udGFpbnMgc29tZSBpbmZpbml0ZWx5CjAzIGc9CjAzIGM9CjM4SW5maW5pdGUgZ2x1ZSBzaHJpbmthZ2UgaW5zZXJ0ZWQgZnJvbSAKNTNUaGUgY29ycmVjdGlvbiBnbHVlIGZvciBwYWdlIGJyZWFraW5nIHdpdGggaW5zZXJ0aW9ucwo1Mm11c3QgaGF2ZSBmaW5pdGUgc2hyaW5rYWJpbGl0eS4gQnV0IHlvdSBtYXkgcHJvY2VlZCwKMDclIHNwbGl0CjA0IHRvIAoxNTI1NSBpcyBub3Qgdm9pZAo1M1lvdSBzaG91bGRuJ3QgdXNlIFxib3gyNTUgZXhjZXB0IGluIFxvdXRwdXQgcm91dGluZXMuCjE0T3V0cHV0IGxvb3AtLS0KMjQgY29uc2VjdXRpdmUgZGVhZCBjeWNsZXMKNTdJJ3ZlIGNvbmNsdWRlZCB0aGF0IHlvdXIgXG91dHB1dCBpcyBhd3J5OyBpdCBuZXZlciBkb2VzIGEKNTVcc2hpcG91dCwgc28gSSdtIHNoaXBwaW5nIFxib3gyNTUgb3V0IG15c2VsZi4gTmV4dCB0aW1lCjU4aW5jcmVhc2UgXG1heGRlYWRjeWNsZXMgaWYgeW91IHdhbnQgbWUgdG8gYmUgbW9yZSBwYXRpZW50IQoyNVVuYmFsYW5jZWQgb3V0cHV0IHJvdXRpbmUKNThZb3VyIHNuZWFreSBvdXRwdXQgcm91dGluZSBoYXMgcHJvYmxlbWF0aWMgeydzIGFuZC9vciB9J3MuCjQxSSBjYW4ndCBoYW5kbGUgdGhhdCB2ZXJ5IHdlbGw7IGdvb2QgbHVjay4KMzNPdXRwdXQgcm91dGluZSBkaWRuJ3QgdXNlIGFsbCBvZiAKNDNZb3VyIFxvdXRwdXQgY29tbWFuZHMgc2hvdWxkIGVtcHR5IFxib3gyNTUsCjM0ZS5nLiwgYnkgc2F5aW5nIGBcc2hpcG91dFxib3gyNTUnLgo0M1Byb2NlZWQ7IEknbGwgZGlzY2FyZCBpdHMgcHJlc2VudCBjb250ZW50cy4KMThNaXNzaW5nICQgaW5zZXJ0ZWQKNTZJJ3ZlIGluc2VydGVkIGEgYmVnaW4tbWF0aC9lbmQtbWF0aCBzeW1ib2wgc2luY2UgSSB0aGluawo0OHlvdSBsZWZ0IG9uZSBvdXQuIFByb2NlZWQsIHdpdGggZmluZ2VycyBjcm9zc2VkLgowNScgaW4gCjUwU29ycnksIGJ1dCBJJ20gbm90IHByb2dyYW1tZWQgdG8gaGFuZGxlIHRoaXMgY2FzZTsKNDVJJ2xsIGp1c3QgcHJldGVuZCB0aGF0IHlvdSBkaWRuJ3QgYXNrIGZvciBpdC4KNDlJZiB5b3UncmUgaW4gdGhlIHdyb25nIG1vZGUsIHlvdSBtaWdodCBiZSBhYmxlIHRvCjU4cmV0dXJuIHRvIHRoZSByaWdodCBvbmUgYnkgdHlwaW5nIGBJfScgb3IgYEkkJyBvciBgSVxwYXInLgowNGR1bXAKMDVoc2tpcAowNGhmaWwKMDVoZmlsbAowM2hzcwowN2hmaWxuZWcKMDV2c2tpcAowNHZmaWwKMDV2ZmlsbAowM3ZzcwowN3ZmaWxuZWcKNTJJJ3ZlIGluc2VydGVkIHNvbWV0aGluZyB0aGF0IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4uCjMyKFNlZSB0aGUgPGluc2VydGVkIHRleHQ+IGFib3ZlLikKNDhXaXRoIGx1Y2ssIHRoaXMgd2lsbCBnZXQgbWUgdW53ZWRnZWQuIEJ1dCBpZiB5b3UKNTVyZWFsbHkgZGlkbid0IGZvcmdldCBhbnl0aGluZywgdHJ5IHR5cGluZyBgMicgbm93OyB0aGVuCjU2bXkgaW5zZXJ0aW9uIGFuZCBteSBjdXJyZW50IGRpbGVtbWEgd2lsbCBib3RoIGRpc2FwcGVhci4KMDZyaWdodC4KNThUaGluZ3MgYXJlIHByZXR0eSBtaXhlZCB1cCwgYnV0IEkgdGhpbmsgdGhlIHdvcnN0IGlzIG92ZXIuCjEyVG9vIG1hbnkgfSdzCjQyWW91J3ZlIGNsb3NlZCBtb3JlIGdyb3VwcyB0aGFuIHlvdSBvcGVuZWQuCjUxU3VjaCBib29ib29zIGFyZSBnZW5lcmFsbHkgaGFybWxlc3MsIHNvIGtlZXAgZ29pbmcuCjEwcmlnaHRicmFjZQoyMkV4dHJhIH0sIG9yIGZvcmdvdHRlbiAKNThJJ3ZlIGRlbGV0ZWQgYSBncm91cC1jbG9zaW5nIHN5bWJvbCBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlCjU5c3B1cmlvdXMsIGFzIGluIGAkeH0kJy4gQnV0IHBlcmhhcHMgdGhlIH0gaXMgbGVnaXRpbWF0ZSBhbmQKNTl5b3UgZm9yZ290IHNvbWV0aGluZyBlbHNlLCBhcyBpbiBgXGhib3h7JHh9Jy4gSW4gc3VjaCBjYXNlcwo1OHRoZSB3YXkgdG8gcmVjb3ZlciBpcyB0byBpbnNlcnQgYm90aCB0aGUgZm9yZ290dGVuIGFuZCB0aGUKNDBkZWxldGVkIG1hdGVyaWFsLCBlLmcuLCBieSB0eXBpbmcgYEkkfScuCjA4bW92ZWxlZnQKMDltb3ZlcmlnaHQKMDVyYWlzZQowNWxvd2VyCjA0Y29weQowN2xhc3Rib3gKMDR2dG9wCjA0aGJveAowN3NoaXBvdXQKMDdsZWFkZXJzCjA4Y2xlYWRlcnMKMDh4bGVhZGVycwozNUxlYWRlcnMgbm90IGZvbGxvd2VkIGJ5IHByb3BlciBnbHVlCjU2WW91IHNob3VsZCBzYXkgYFxsZWFkZXJzIDxib3ggb3IgcnVsZT48aHNraXAgb3IgdnNraXA+Jy4KNTBJIGZvdW5kIHRoZSA8Ym94IG9yIHJ1bGU+LCBidXQgdGhlcmUncyBubyBzdWl0YWJsZQo0ODxoc2tpcCBvciB2c2tpcD4sIHNvIEknbSBpZ25vcmluZyB0aGVzZSBsZWFkZXJzLgowNXRhaWwxCjM0U29ycnk7IHRoaXMgXGxhc3Rib3ggd2lsbCBiZSB2b2lkLgo1OFNvcnJ5Li4uSSB1c3VhbGx5IGNhbid0IHRha2UgdGhpbmdzIGZyb20gdGhlIGN1cnJlbnQgcGFnZS4KMzdUaGlzIFxsYXN0Ym94IHdpbGwgdGhlcmVmb3JlIGJlIHZvaWQuCjIxTWlzc2luZyBgdG8nIGluc2VydGVkCjQ4SSdtIHdvcmtpbmcgb24gYFx2c3BsaXQ8Ym94IG51bWJlcj4gdG8gPGRpbWVuPic7CjMxd2lsbCBsb29rIGZvciB0aGUgPGRpbWVuPiBuZXh0LgozMUEgPGJveD4gd2FzIHN1cHBvc2VkIHRvIGJlIGhlcmUKNTdJIHdhcyBleHBlY3RpbmcgdG8gc2VlIFxoYm94IG9yIFx2Ym94IG9yIFxjb3B5IG9yIFxib3ggb3IKNTlzb21ldGhpbmcgbGlrZSB0aGF0LiBTbyB5b3UgbWlnaHQgZmluZCBzb21ldGhpbmcgbWlzc2luZyBpbgo1M3lvdXIgb3V0cHV0LiBCdXQga2VlcCB0cnlpbmc7IHlvdSBjYW4gZml4IHRoaXMgbGF0ZXIuCjA2aW5kZW50CjA4bm9pbmRlbnQKMjYnIGhlcmUgZXhjZXB0IHdpdGggbGVhZGVycwo1MlRvIHB1dCBhIGhvcml6b250YWwgcnVsZSBpbiBhbiBoYm94IG9yIGFuIGFsaWdubWVudCwKNTZ5b3Ugc2hvdWxkIHVzZSBcbGVhZGVycyBvciBcaHJ1bGVmaWxsIChzZWUgVGhlIFRlWGJvb2spLgoxMFlvdSBjYW4ndCAKNDVJJ20gY2hhbmdpbmcgdG8gXGluc2VydDA7IGJveCAyNTUgaXMgc3BlY2lhbC4KMzJUcnkgYElcdnNraXAtXGxhc3Rza2lwJyBpbnN0ZWFkLgozMVRyeSBgSVxrZXJuLVxsYXN0a2VybicgaW5zdGVhZC4KNDZQZXJoYXBzIHlvdSBjYW4gbWFrZSB0aGUgb3V0cHV0IHJvdXRpbmUgZG8gaXQuCjA5dW5wZW5hbHR5CjA2dW5rZXJuCjA2dW5za2lwCjA2dW5oYm94CjA3dW5oY29weQowNnVudmJveAowN3VudmNvcHkKMzRJbmNvbXBhdGlibGUgbGlzdCBjYW4ndCBiZSB1bmJveGVkCjM1U29ycnksIFBhbmRvcmEuIChZb3Ugc25lYWt5IGRldmlsLikKNThJIHJlZnVzZSB0byB1bmJveCBhbiBcaGJveCBpbiB2ZXJ0aWNhbCBtb2RlIG9yIHZpY2UgdmVyc2EuCjQwQW5kIEkgY2FuJ3Qgb3BlbiBhbnkgYm94ZXMgaW4gbWF0aCBtb2RlLgoxM0lsbGVnYWwgbWF0aCAKNTRTb3JyeTogVGhlIHRoaXJkIHBhcnQgb2YgYSBkaXNjcmV0aW9uYXJ5IGJyZWFrIG11c3QgYmUKNTdlbXB0eSwgaW4gbWF0aCBmb3JtdWxhcy4gSSBoYWQgdG8gZGVsZXRlIHlvdXIgdGhpcmQgcGFydC4KMzBEaXNjcmV0aW9uYXJ5IGxpc3QgaXMgdG9vIGxvbmcKNTBXb3ctLS1JIG5ldmVyIHRob3VnaHQgYW55Ym9keSB3b3VsZCB0d2VhayBtZSBoZXJlLgo1NllvdSBjYW4ndCBzZXJpb3VzbHkgbmVlZCBzdWNoIGEgaHVnZSBkaXNjcmV0aW9uYXJ5IGxpc3Q/CjI3SW1wcm9wZXIgZGlzY3JldGlvbmFyeSBsaXN0CjU0RGlzY3JldGlvbmFyeSBsaXN0cyBtdXN0IGNvbnRhaW4gb25seSBib3hlcyBhbmQga2VybnMuCjUzVGhlIGZvbGxvd2luZyBkaXNjcmV0aW9uYXJ5IHN1Ymxpc3QgaGFzIGJlZW4gZGVsZXRlZDoKMThNaXNzaW5nIH0gaW5zZXJ0ZWQKNDVJJ3ZlIHB1dCBpbiB3aGF0IHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSB0byBmaXgKNDR0aGUgY3VycmVudCBjb2x1bW4gb2YgdGhlIGN1cnJlbnQgYWxpZ25tZW50Lgo0M1RyeSB0byBnbyBvbiwgc2luY2UgdGhpcyBtaWdodCBhbG1vc3Qgd29yay4KMTBNaXNwbGFjZWQgCjU1SSBjYW4ndCBmaWd1cmUgb3V0IHdoeSB5b3Ugd291bGQgd2FudCB0byB1c2UgYSB0YWIgbWFyawo1MGhlcmUuIElmIHlvdSBqdXN0IHdhbnQgYW4gYW1wZXJzYW5kLCB0aGUgcmVtZWR5IGlzCjUyc2ltcGxlOiBKdXN0IHR5cGUgYElcJicgbm93LiBCdXQgaWYgc29tZSByaWdodCBicmFjZQo1MnVwIGFib3ZlIGhhcyBlbmRlZCBhIHByZXZpb3VzIGFsaWdubWVudCBwcmVtYXR1cmVseSwKNTJ5b3UncmUgcHJvYmFibHkgZHVlIGZvciBtb3JlIGVycm9yIG1lc3NhZ2VzLCBhbmQgeW91CjU3bWlnaHQgdHJ5IHR5cGluZyBgUycgbm93IGp1c3QgdG8gc2VlIHdoYXQgaXMgc2FsdmFnZWFibGUuCjU3b3IgXGNyIG9yIFxzcGFuIGp1c3Qgbm93LiBJZiBzb21ldGhpbmcgbGlrZSBhIHJpZ2h0IGJyYWNlCjQ2SSBleHBlY3QgdG8gc2VlIFxub2FsaWduIG9ubHkgYWZ0ZXIgdGhlIFxjciBvZgo0OWFuIGFsaWdubWVudC4gUHJvY2VlZCwgYW5kIEknbGwgaWdub3JlIHRoaXMgY2FzZS4KNTZJIGV4cGVjdCB0byBzZWUgXG9taXQgb25seSBhZnRlciB0YWIgbWFya3Mgb3IgdGhlIFxjciBvZgo1M0knbSBndWVzc2luZyB0aGF0IHlvdSBtZWFudCB0byBlbmQgYW4gYWxpZ25tZW50IGhlcmUuCjUwSSdtIGlnbm9yaW5nIHRoaXMsIHNpbmNlIEkgd2Fzbid0IGRvaW5nIGEgXGNzbmFtZS4KMDRlcW5vCjA1bGVxbm8KMTNkaXNwbGF5bGltaXRzCjQyTGltaXQgY29udHJvbHMgbXVzdCBmb2xsb3cgYSBtYXRoIG9wZXJhdG9yCjU3SSdtIGlnbm9yaW5nIHRoaXMgbWlzcGxhY2VkIFxsaW1pdHMgb3IgXG5vbGltaXRzIGNvbW1hbmQuCjMwTWlzc2luZyBkZWxpbWl0ZXIgKC4gaW5zZXJ0ZWQpCjUySSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBzb21ldGhpbmcgbGlrZSBgKCcgb3IgYFx7JyBvcgo1NWBcfScgaGVyZS4gSWYgeW91IHR5cGVkLCBlLmcuLCBgeycgaW5zdGVhZCBvZiBgXHsnLCB5b3UKNTdzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBgeycgYnkgdHlwaW5nIGAxJyBub3csIHNvIHRoYXQKNTJicmFjZXMgZG9uJ3QgZ2V0IHVuYmFsYW5jZWQuIE90aGVyd2lzZSBqdXN0IHByb2NlZWQuCjU0QWNjZXB0YWJsZSBkZWxpbWl0ZXJzIGFyZSBjaGFyYWN0ZXJzIHdob3NlIFxkZWxjb2RlIGlzCjU4bm9ubmVnYXRpdmUsIG9yIHlvdSBjYW4gdXNlIGBcZGVsaW1pdGVyIDxkZWxpbWl0ZXIgY29kZT4nLgoxMVBsZWFzZSB1c2UgCjI1IGZvciBhY2NlbnRzIGluIG1hdGggbW9kZQo1NUknbSBjaGFuZ2luZyBcYWNjZW50IHRvIFxtYXRoYWNjZW50IGhlcmU7IHdpc2ggbWUgbHVjay4KNTkoQWNjZW50cyBhcmUgbm90IHRoZSBzYW1lIGluIGZvcm11bGFzIGFzIHRoZXkgYXJlIGluIHRleHQuKQoxOERvdWJsZSBzdXBlcnNjcmlwdAo0M0kgdHJlYXQgYHheMV4yJyBlc3NlbnRpYWxseSBsaWtlIGB4XjF7fV4yJy4KMTZEb3VibGUgc3Vic2NyaXB0CjQzSSB0cmVhdCBgeF8xXzInIGVzc2VudGlhbGx5IGxpa2UgYHhfMXt9XzInLgowNWFib3ZlCjA0b3ZlcgowNGF0b3AKMTVhYm92ZXdpdGhkZWxpbXMKMTRvdmVyd2l0aGRlbGltcwoxNGF0b3B3aXRoZGVsaW1zCjM1QW1iaWd1b3VzOyB5b3UgbmVlZCBhbm90aGVyIHsgYW5kIH0KNTVJJ20gaWdub3JpbmcgdGhpcyBmcmFjdGlvbiBzcGVjaWZpY2F0aW9uLCBzaW5jZSBJIGRvbid0CjUya25vdyB3aGV0aGVyIGEgY29uc3RydWN0aW9uIGxpa2UgYHggXG92ZXIgeSBcb3ZlciB6Jwo1M21lYW5zIGB7eCBcb3ZlciB5fSBcb3ZlciB6JyBvciBgeCBcb3ZlciB7eSBcb3ZlciB6fScuCjUwSSdtIGlnbm9yaW5nIGEgXG1pZGRsZSB0aGF0IGhhZCBubyBtYXRjaGluZyBcbGVmdC4KNDlJJ20gaWdub3JpbmcgYSBccmlnaHQgdGhhdCBoYWQgbm8gbWF0Y2hpbmcgXGxlZnQuCjQ3TWF0aCBmb3JtdWxhIGRlbGV0ZWQ6IEluc3VmZmljaWVudCBzeW1ib2wgZm9udHMKNTBTb3JyeSwgYnV0IEkgY2FuJ3QgdHlwZXNldCBtYXRoIHVubGVzcyBcdGV4dGZvbnQgMgo1MGFuZCBcc2NyaXB0Zm9udCAyIGFuZCBcc2NyaXB0c2NyaXB0Zm9udCAyIGhhdmUgYWxsCjUwdGhlIFxmb250ZGltZW4gdmFsdWVzIG5lZWRlZCBpbiBtYXRoIHN5bWJvbCBmb250cy4KNTBNYXRoIGZvcm11bGEgZGVsZXRlZDogSW5zdWZmaWNpZW50IGV4dGVuc2lvbiBmb250cwo1MFNvcnJ5LCBidXQgSSBjYW4ndCB0eXBlc2V0IG1hdGggdW5sZXNzIFx0ZXh0Zm9udCAzCjUwYW5kIFxzY3JpcHRmb250IDMgYW5kIFxzY3JpcHRzY3JpcHRmb250IDMgaGF2ZSBhbGwKNTN0aGUgXGZvbnRkaW1lbiB2YWx1ZXMgbmVlZGVkIGluIG1hdGggZXh0ZW5zaW9uIGZvbnRzLgozMURpc3BsYXkgbWF0aCBzaG91bGQgZW5kIHdpdGggJCQKNTlUaGUgYCQnIHRoYXQgSSBqdXN0IHNhdyBzdXBwb3NlZGx5IG1hdGNoZXMgYSBwcmV2aW91cyBgJCQnLgo0OVNvIEkgc2hhbGwgYXNzdW1lIHRoYXQgeW91IHR5cGVkIGAkJCcgYm90aCB0aW1lcy4KMDdkaXNwbGF5CjE5TWlzc2luZyAkJCBpbnNlcnRlZAowNGxvbmcKMDVvdXRlcgowNmdsb2JhbAowM2RlZgowNGdkZWYKMDRlZGVmCjA0eGRlZgowNnByZWZpeAoyOVlvdSBjYW4ndCB1c2UgYSBwcmVmaXggd2l0aCBgCjU1SSdsbCBwcmV0ZW5kIHlvdSBkaWRuJ3Qgc2F5IFxsb25nIG9yIFxvdXRlciBvciBcZ2xvYmFsLgo2OUknbGwgcHJldGVuZCB5b3UgZGlkbid0IHNheSBcbG9uZyBvciBcb3V0ZXIgb3IgXGdsb2JhbCBvciBccHJvdGVjdGVkLgowNicgb3IgYAo0OUknbGwgcHJldGVuZCB5b3UgZGlkbid0IHNheSBcbG9uZyBvciBcb3V0ZXIgaGVyZS4KNjNJJ2xsIHByZXRlbmQgeW91IGRpZG4ndCBzYXkgXGxvbmcgb3IgXG91dGVyIG9yIFxwcm90ZWN0ZWQgaGVyZS4KMDlwcm90ZWN0ZWQKMDgnIHdpdGggYAozM01pc3NpbmcgY29udHJvbCBzZXF1ZW5jZSBpbnNlcnRlZAo1MlBsZWFzZSBkb24ndCBzYXkgYFxkZWYgY3N7Li4ufScsIHNheSBgXGRlZlxjc3suLi59Jy4KNTlJJ3ZlIGluc2VydGVkIGFuIGluYWNjZXNzaWJsZSBjb250cm9sIHNlcXVlbmNlIHNvIHRoYXQgeW91cgo2MGRlZmluaXRpb24gd2lsbCBiZSBjb21wbGV0ZWQgd2l0aG91dCBtaXhpbmcgbWUgdXAgdG9vIGJhZGx5Lgo1M1lvdSBjYW4gcmVjb3ZlciBncmFjaW91c2x5IGZyb20gdGhpcyBlcnJvciwgaWYgeW91J3JlCjQyY2FyZWZ1bDsgc2VlIGV4ZXJjaXNlIDI3LjIgaW4gVGhlIFRlWGJvb2suCjEyaW5hY2Nlc3NpYmxlCjAzbGV0CjA5ZnV0dXJlbGV0CjA3Y2hhcmRlZgoxMW1hdGhjaGFyZGVmCjA4Y291bnRkZWYKMDhkaW1lbmRlZgowN3NraXBkZWYKMDltdXNraXBkZWYKMDd0b2tzZGVmCjQ0WW91IHNob3VsZCBoYXZlIHNhaWQgYFxyZWFkPG51bWJlcj4gdG8gXGNzJy4KMzRJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIFxjcyBub3cuCjE0SW52YWxpZCBjb2RlICgKMjkpLCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDAuLgoyMSksIHNob3VsZCBiZSBhdCBtb3N0IAo1NEknbSBnb2luZyB0byB1c2UgMCBpbnN0ZWFkIG9mIHRoYXQgaWxsZWdhbCBjb2RlIHZhbHVlLgowMmJ5CjE5QXJpdGhtZXRpYyBvdmVyZmxvdwo1MEkgY2FuJ3QgY2Fycnkgb3V0IHRoYXQgbXVsdGlwbGljYXRpb24gb3IgZGl2aXNpb24sCjMzc2luY2UgdGhlIHJlc3VsdCBpcyBvdXQgb2YgcmFuZ2UuCjU1SSdtIGZvcmdldHRpbmcgd2hhdCB5b3Ugc2FpZCBhbmQgbm90IGNoYW5naW5nIGFueXRoaW5nLgo1N1NvcnJ5LCBcc2V0Ym94IGlzIG5vdCBhbGxvd2VkIGFmdGVyIFxoYWxpZ24gaW4gYSBkaXNwbGF5LAo0NW9yIGJldHdlZW4gXGFjY2VudCBhbmQgYW4gYWNjZW50ZWQgY2hhcmFjdGVyLgoxNkJhZCBzcGFjZSBmYWN0b3IKNDdJIGFsbG93IG9ubHkgdmFsdWVzIGluIHRoZSByYW5nZSAxLi4zMjc2NyBoZXJlLgozN0kgYWxsb3cgb25seSBub25uZWdhdGl2ZSB2YWx1ZXMgaGVyZS4KMzdQYXR0ZXJucyBjYW4gYmUgbG9hZGVkIG9ubHkgYnkgSU5JVEVYCjEwaHlwaGVuY2hhcgowOHNrZXdjaGFyCjA0Rk9OVAowMmF0CjA2c2NhbGVkCjIwSW1wcm9wZXIgYGF0JyBzaXplICgKMjFwdCksIHJlcGxhY2VkIGJ5IDEwcHQKNTBJIGNhbiBvbmx5IGhhbmRsZSBmb250cyBhdCBwb3NpdGl2ZSBzaXplcyB0aGF0IGFyZQo1Nmxlc3MgdGhhbiAyMDQ4cHQsIHNvIEkndmUgY2hhbmdlZCB3aGF0IHlvdSBzYWlkIHRvIDEwcHQuCjEyc2VsZWN0IGZvbnQgCjEzZXJyb3JzdG9wbW9kZQowNm9wZW5pbgowN2Nsb3NlaW4KMDdtZXNzYWdlCjEwZXJybWVzc2FnZQozMShUaGF0IHdhcyBhbm90aGVyIFxlcnJtZXNzYWdlLikKNTBUaGlzIGVycm9yIG1lc3NhZ2Ugd2FzIGdlbmVyYXRlZCBieSBhbiBcZXJybWVzc2FnZQo0M2NvbW1hbmQsIHNvIEkgY2FuJ3QgZ2l2ZSBhbnkgZXhwbGljaXQgaGVscC4KNTRQcmV0ZW5kIHRoYXQgeW91J3JlIEhlcmN1bGUgUG9pcm90OiBFeGFtaW5lIGFsbCBjbHVlcywKNDFhbmQgZGVkdWNlIHRoZSB0cnV0aCBieSBvcmRlciBhbmQgbWV0aG9kLgowOWxvd2VyY2FzZQowOXVwcGVyY2FzZQowNHNob3cKMDdzaG93Ym94CjA3c2hvd3RoZQowOXNob3dsaXN0cwo1N1RoaXMgaXNuJ3QgYW4gZXJyb3IgbWVzc2FnZTsgSSdtIGp1c3QgXHNob3dpbmcgc29tZXRoaW5nLgo0NlR5cGUgYElcc2hvdy4uLicgdG8gc2hvdyBtb3JlIChlLmcuLCBcc2hvd1xjcywKNDNcc2hvd3RoZVxjb3VudDEwLCBcc2hvd2JveDI1NSwgXHNob3dsaXN0cykuCjU0QW5kIHR5cGUgYElcdHJhY2luZ29ubGluZT0xXHNob3cuLi4nIHRvIHNob3cgYm94ZXMgYW5kCjU3bGlzdHMgb24geW91ciB0ZXJtaW5hbCBhcyB3ZWxsIGFzIGluIHRoZSB0cmFuc2NyaXB0IGZpbGUuCjAyPiAKMDl1bmRlZmluZWQKMDVtYWNybwoxN291dGVyIGVuZHRlbXBsYXRlCjA2PiBcYm94CjAyT0sKMjYgKHNlZSB0aGUgdHJhbnNjcmlwdCBmaWxlKQowOSAoSU5JVEVYKQoyOVlvdSBjYW4ndCBkdW1wIGluc2lkZSBhIGdyb3VwCjI0YHsuLi5cZHVtcH0nIGlzIGEgbm8tbm8uCjI1IHN0cmluZ3Mgb2YgdG90YWwgbGVuZ3RoIAo0MyBtZW1vcnkgbG9jYXRpb25zIGR1bXBlZDsgY3VycmVudCB1c2FnZSBpcyAKMzAgbXVsdGlsZXR0ZXIgY29udHJvbCBzZXF1ZW5jZXMKMjQgd29yZHMgb2YgZm9udCBpbmZvIGZvciAKMTUgcHJlbG9hZGVkIGZvbnQKMDVcZm9udAoyMiBoeXBoZW5hdGlvbiBleGNlcHRpb24KMjdIeXBoZW5hdGlvbiB0cmllIG9mIGxlbmd0aCAKMDUgaGFzIAowMyBvcAowOCBvdXQgb2YgCjE0IGZvciBsYW5ndWFnZSAKMTkgKHByZWxvYWRlZCBmb3JtYXQ9CjE2Zm9ybWF0IGZpbGUgbmFtZQoyNkJlZ2lubmluZyB0byBkdW1wIG9uIGZpbGUgCjIyVHJhbnNjcmlwdCB3cml0dGVuIG9uIAowMiApCjEzZW5kIG9jY3VycmVkIAoyNGluc2lkZSBhIGdyb3VwIGF0IGxldmVsIAowNXdoZW4gCjA5IG9uIGxpbmUgCjE2IHdhcyBpbmNvbXBsZXRlKQo1MihzZWUgdGhlIHRyYW5zY3JpcHQgZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbikKMzUoXGR1bXAgaXMgcGVyZm9ybWVkIG9ubHkgYnkgSU5JVEVYKQoyMWRlYnVnICMgKC0xIHRvIGV4aXQpOgowN29wZW5vdXQKMDhjbG9zZW91dAowN3NwZWNpYWwKMDlpbW1lZGlhdGUKMTFzZXRsYW5ndWFnZQoyMFt1bmtub3duIGV4dGVuc2lvbiFdCjA0ZXh0MQoxMiAoaHlwaGVubWluIAowOHdoYXRzaXQ/CjA0ZXh0MgowNGV4dDMKMDhlbmR3cml0ZQoyNFVuYmFsYW5jZWQgd3JpdGUgY29tbWFuZAo1OU9uIHRoaXMgcGFnZSB0aGVyZSdzIGEgXHdyaXRlIHdpdGggZmV3ZXIgcmVhbCB7J3MgdGhhbiB9J3MuCjA0ZXh0NAoxNm91dHB1dCBmaWxlIG5hbWUKMTJsYXN0bm9kZXR5cGUKMTFlVGVYdmVyc2lvbgo1M1NvcnJ5LCB0aGlzIG9wdGlvbmFsIGUtVGVYIGZlYXR1cmUgaGFzIGJlZW4gZGlzYWJsZWQuCjA4ZXZlcnllb2YKMTR0cmFjaW5nYXNzaWducwoxM3RyYWNpbmdncm91cHMKMTB0cmFjaW5naWZzCjE3dHJhY2luZ3NjYW50b2tlbnMKMTR0cmFjaW5nbmVzdGluZwoxOXByZWRpc3BsYXlkaXJlY3Rpb24KMTFsYXN0bGluZWZpdAoxNXNhdmluZ3ZkaXNjYXJkcwoxNXNhdmluZ2h5cGhjb2RlcwoxMmJvdHRvbSBsZXZlbAowNXNlbWkgCjA2c2ltcGxlCjA5YWRqdXN0ZWQgCjAzbm8gCjA1YWxpZ24KMDRkaXNjCjA3IGNob2ljZQowNiBzaGlmdAowNSBsZWZ0CjE0IGdyb3VwIChsZXZlbCAKMDhsZWF2aW5nIAowOWVudGVyaW5nIAoxN2N1cnJlbnRncm91cGxldmVsCjE2Y3VycmVudGdyb3VwdHlwZQoxNGN1cnJlbnRpZmxldmVsCjEzY3VycmVudGlmdHlwZQoxNWN1cnJlbnRpZmJyYW5jaAoxMGZvbnRjaGFyd2QKMTBmb250Y2hhcmh0CjEwZm9udGNoYXJkcAoxMGZvbnRjaGFyaWMKMTRwYXJzaGFwZWxlbmd0aAoxNHBhcnNoYXBlaW5kZW50CjEzcGFyc2hhcGVkaW1lbgoxMHNob3dncm91cHMKMTFhbGlnbiBlbnRyeQoxMHNob3d0b2tlbnMKMTB1bmV4cGFuZGVkCjEwZGV0b2tlbml6ZQowN3Nob3dpZnMKMTcgZW50ZXJlZCBvbiBsaW5lIAoyMm5vIGFjdGl2ZSBjb25kaXRpb25hbHMKMTAjIyMgbGV2ZWwgCjE1aW50ZXJhY3Rpb25tb2RlCjIwQmFkIGludGVyYWN0aW9uIG1vZGUKNDNNb2RlcyBhcmUgMD1iYXRjaCwgMT1ub25zdG9wLCAyPXNjcm9sbCwgYW5kCjQ4Mz1lcnJvcnN0b3AuIFByb2NlZWQsIGFuZCBJJ2xsIGlnbm9yZSB0aGlzIGNhc2UuCjExVGVYWGVUc3RhdGUKMDZiZWdpbkwKMDRlbmRMCjA2YmVnaW5SCjA0ZW5kUgowOSwgZGlzcGxheQowM0xSMQoyNFxlbmRMIG9yIFxlbmRSIHByb2JsZW0gKAoxMCBtaXNzaW5nLCAKMDYgZXh0cmEKMDNMUjIKMDNMUjMKMDNMUjQKMTBzY2FudG9rZW5zCjAyKCAKMDhyZWFkbGluZQowOWlmZGVmaW5lZAowOGlmY3NuYW1lCjEwaWZmb250Y2hhcgoxMCcgYmVmb3JlIGAKMTZXYXJuaW5nOiBlbmQgb2YgCjIwIG9mIGEgZGlmZmVyZW50IGZpbGUKMjZXYXJuaW5nOiBlbmQgb2YgZmlsZSB3aGVuIAoxNCBpcyBpbmNvbXBsZXRlCjA3bnVtZXhwcgowN2RpbWV4cHIKMDhnbHVlZXhwcgowNm11ZXhwcgozM0kgY2FuJ3QgZXZhbHVhdGUgdGhpcyBleHByZXNzaW9uLAozM01pc3NpbmcgKSBpbnNlcnRlZCBmb3IgZXhwcmVzc2lvbgo1OEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYCsnLCBgLScsIGAqJywgYC8nLCBvciBgKScuIERpZG4ndC4KMTZnbHVlc3RyZXRjaG9yZGVyCjE1Z2x1ZXNocmlua29yZGVyCjExZ2x1ZXN0cmV0Y2gKMTBnbHVlc2hyaW5rCjA4bXV0b2dsdWUKMDhnbHVldG9tdQowNW1hcmtzCjA4dG9wbWFya3MKMTBmaXJzdG1hcmtzCjA4Ym90bWFya3MKMTVzcGxpdGZpcnN0bWFya3MKMTNzcGxpdGJvdG1hcmtzCjQ2QSByZWdpc3RlciBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDMyNzY3LgowMyBzPQowMyBhPQoxMnBhZ2VkaXNjYXJkcwoxM3NwbGl0ZGlzY2FyZHMKMThpbnRlcmxpbmVwZW5hbHRpZXMKMTNjbHVicGVuYWx0aWVzCjE0d2lkb3dwZW5hbHRpZXMKMjFkaXNwbGF5d2lkb3dwZW5hbHRpZXMKKjI2ODgwNzg3NQo="};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/index.js":
|
|
/*!**********************!*\
|
|
!*** ./src/index.js ***!
|
|
\**********************/
|
|
/*! no exports provided */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony import */ var dvi2html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dvi2html */ "../dvi2html/lib/index.js");
|
|
/* harmony import */ var dvi2html__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dvi2html__WEBPACK_IMPORTED_MODULE_0__);
|
|
/* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! stream */ "./node_modules/stream-browserify/index.js");
|
|
/* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(stream__WEBPACK_IMPORTED_MODULE_1__);
|
|
/* harmony import */ var _library__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./library */ "./src/library.js");
|
|
/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! pako */ "./node_modules/pako/index.js");
|
|
/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(pako__WEBPACK_IMPORTED_MODULE_3__);
|
|
/* harmony import */ var web_streams_polyfill__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! web-streams-polyfill */ "./node_modules/web-streams-polyfill/dist/polyfill.min.js");
|
|
/* harmony import */ var web_streams_polyfill__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(web_streams_polyfill__WEBPACK_IMPORTED_MODULE_4__);
|
|
/* harmony import */ var fetch_readablestream__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! fetch-readablestream */ "./node_modules/fetch-readablestream/lib/entry.js");
|
|
/* harmony import */ var fetch_readablestream__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(fetch_readablestream__WEBPACK_IMPORTED_MODULE_5__);
|
|
|
|
|
|
|
|
|
|
|
|
// document.currentScript polyfill
|
|
|
|
if (document.currentScript === undefined) {
|
|
var scripts = document.getElementsByTagName('script');
|
|
document.currentScript = scripts[scripts.length - 1];
|
|
} // Determine where we were loaded from; we'll use that to find a
|
|
// tikzwolke server that can handle our POSTing tikz code
|
|
|
|
|
|
var url = new URL(document.currentScript.src); // host includes the port
|
|
|
|
var host = url.host;
|
|
var urlRoot = url.protocol + '//' + host;
|
|
let pages = 1000;
|
|
var coredump;
|
|
var code;
|
|
|
|
async function load() {
|
|
let tex = await fetch(urlRoot + '/ef253ef29e2f057334f77ead7f06ed8f22607d38.wasm');
|
|
code = await tex.arrayBuffer();
|
|
let response = await fetch_readablestream__WEBPACK_IMPORTED_MODULE_5___default()(urlRoot + '/7620f557a41f2bf40820e76ba1fd4d89a484859d.gz');
|
|
const reader = response.body.getReader();
|
|
const inf = new pako__WEBPACK_IMPORTED_MODULE_3___default.a.Inflate();
|
|
|
|
try {
|
|
while (true) {
|
|
const {
|
|
done,
|
|
value
|
|
} = await reader.read();
|
|
inf.push(value, done);
|
|
if (done) break;
|
|
}
|
|
} finally {
|
|
reader.releaseLock();
|
|
}
|
|
|
|
coredump = new Uint8Array(inf.result, 0, pages * 65536);
|
|
}
|
|
|
|
function copy(src) {
|
|
var dst = new Uint8Array(src.length);
|
|
dst.set(src);
|
|
return dst;
|
|
}
|
|
|
|
async function tex(input) {
|
|
if (input.match('\\\\begin *{document}') === null) {
|
|
input = '\\begin{document}\n' + input;
|
|
}
|
|
|
|
input = input + '\n\\end{document}\n';
|
|
_library__WEBPACK_IMPORTED_MODULE_2__["deleteEverything"]();
|
|
_library__WEBPACK_IMPORTED_MODULE_2__["writeFileSync"]("sample.tex", Buffer.from(input));
|
|
let memory = new WebAssembly.Memory({
|
|
initial: pages,
|
|
maximum: pages
|
|
});
|
|
let buffer = new Uint8Array(memory.buffer, 0, pages * 65536);
|
|
buffer.set(copy(coredump));
|
|
_library__WEBPACK_IMPORTED_MODULE_2__["setMemory"](memory.buffer);
|
|
_library__WEBPACK_IMPORTED_MODULE_2__["setInput"](" sample.tex \n\\end\n");
|
|
let results = await WebAssembly.instantiate(code, {
|
|
library: _library__WEBPACK_IMPORTED_MODULE_2__,
|
|
env: {
|
|
memory: memory
|
|
}
|
|
});
|
|
return _library__WEBPACK_IMPORTED_MODULE_2__["readFileSync"]("sample.dvi");
|
|
}
|
|
|
|
window.onload = async function () {
|
|
await load();
|
|
|
|
async function process(elt) {
|
|
var text = elt.childNodes[0].nodeValue;
|
|
var div = document.createElement('div');
|
|
let dvi = await tex(text);
|
|
let html = "";
|
|
const page = new stream__WEBPACK_IMPORTED_MODULE_1__["Writable"]({
|
|
write(chunk, encoding, callback) {
|
|
html = html + chunk.toString();
|
|
callback();
|
|
}
|
|
|
|
});
|
|
|
|
async function* streamBuffer() {
|
|
yield Buffer.from(dvi);
|
|
return;
|
|
}
|
|
|
|
let machine = await Object(dvi2html__WEBPACK_IMPORTED_MODULE_0__["dvi2html"])(streamBuffer(), page);
|
|
div.style.display = 'flex';
|
|
div.style.width = machine.paperwidth.toString() + "pt";
|
|
div.style.height = machine.paperheight.toString() + "pt";
|
|
div.style['align-items'] = 'center';
|
|
div.style['justify-content'] = 'center';
|
|
div.innerHTML = html;
|
|
let svg = div.getElementsByTagName('svg');
|
|
svg[0].setAttribute("width", machine.paperwidth.toString() + "pt");
|
|
svg[0].setAttribute("height", machine.paperheight.toString() + "pt");
|
|
svg[0].setAttribute("viewBox", `-72 -72 ${machine.paperwidth} ${machine.paperheight}`);
|
|
elt.parentNode.replaceChild(div, elt);
|
|
}
|
|
|
|
;
|
|
var scripts = document.getElementsByTagName('script');
|
|
var tikzScripts = Array.prototype.slice.call(scripts).filter(e => e.getAttribute('type') === 'text/tikz');
|
|
tikzScripts.reduce(async (promise, element) => {
|
|
await promise;
|
|
return process(element);
|
|
}, Promise.resolve());
|
|
};
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/buffer/index.js */ "./node_modules/buffer/index.js").Buffer))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/library.js":
|
|
/*!************************!*\
|
|
!*** ./src/library.js ***!
|
|
\************************/
|
|
/*! exports provided: deleteEverything, writeFileSync, readFileSync, setMemory, setInput, getCurrentMinutes, getCurrentDay, getCurrentMonth, getCurrentYear, printString, printBoolean, printChar, printInteger, printFloat, printNewline, reset, rewrite, close, eof, erstat, eoln, get, put */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteEverything", function() { return deleteEverything; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeFileSync", function() { return writeFileSync; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "readFileSync", function() { return readFileSync; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setMemory", function() { return setMemory; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setInput", function() { return setInput; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentMinutes", function() { return getCurrentMinutes; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentDay", function() { return getCurrentDay; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentMonth", function() { return getCurrentMonth; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentYear", function() { return getCurrentYear; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "printString", function() { return printString; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "printBoolean", function() { return printBoolean; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "printChar", function() { return printChar; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "printInteger", function() { return printInteger; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "printFloat", function() { return printFloat; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "printNewline", function() { return printNewline; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return reset; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rewrite", function() { return rewrite; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "close", function() { return close; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eof", function() { return eof; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "erstat", function() { return erstat; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eoln", function() { return eoln; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return get; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "put", function() { return put; });
|
|
/* harmony import */ var dvi2html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dvi2html */ "../dvi2html/lib/index.js");
|
|
/* harmony import */ var dvi2html__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dvi2html__WEBPACK_IMPORTED_MODULE_0__);
|
|
/* harmony import */ var _filesystem_json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./filesystem.json */ "./src/filesystem.json");
|
|
var _filesystem_json__WEBPACK_IMPORTED_MODULE_1___namespace = /*#__PURE__*/__webpack_require__.t(/*! ./filesystem.json */ "./src/filesystem.json", 1);
|
|
|
|
/****************************************************************/
|
|
// fake files
|
|
|
|
|
|
var files = [];
|
|
function deleteEverything() {
|
|
files = [];
|
|
}
|
|
function writeFileSync(filename, buffer) {
|
|
_filesystem_json__WEBPACK_IMPORTED_MODULE_1__[filename] = btoa(buffer);
|
|
}
|
|
function readFileSync(filename) {
|
|
for (let f of files) {
|
|
if (f.filename == filename) {
|
|
return f.buffer.slice(0, f.position);
|
|
}
|
|
}
|
|
|
|
throw Error(`Could not find file ${filename}`);
|
|
}
|
|
|
|
function openSync(filename, mode) {
|
|
let buffer = new Uint8Array();
|
|
|
|
if (_filesystem_json__WEBPACK_IMPORTED_MODULE_1__[filename]) {
|
|
buffer = Uint8Array.from(Buffer.from(_filesystem_json__WEBPACK_IMPORTED_MODULE_1__[filename], 'base64'));
|
|
}
|
|
|
|
if (filename.match(/\.tfm$/)) {
|
|
buffer = Uint8Array.from(Object(dvi2html__WEBPACK_IMPORTED_MODULE_0__["tfmData"])(filename.replace(/\.tfm$/, '')));
|
|
}
|
|
|
|
files.push({
|
|
filename: filename,
|
|
position: 0,
|
|
erstat: 0,
|
|
buffer: buffer,
|
|
descriptor: files.length
|
|
});
|
|
return files.length - 1;
|
|
}
|
|
|
|
function closeSync(fd) {// ignore this.
|
|
}
|
|
|
|
function writeSync(file, buffer, pointer, length) {
|
|
if (pointer === undefined) pointer = 0;
|
|
if (length === undefined) length = buffer.length - pointer;
|
|
|
|
while (length > file.buffer.length - file.position) {
|
|
let b = new Uint8Array(1 + file.buffer.length * 2);
|
|
b.set(file.buffer);
|
|
file.buffer = b;
|
|
}
|
|
|
|
file.buffer.subarray(file.position).set(buffer.subarray(pointer, pointer + length));
|
|
file.position += length;
|
|
}
|
|
|
|
function readSync(file, buffer, pointer, length, seek) {
|
|
if (pointer === undefined) pointer = 0;
|
|
if (length === undefined) length = buffer.length - pointer;
|
|
if (length > file.buffer.length - seek) length = file.buffer.length - seek;
|
|
buffer.subarray(pointer).set(file.buffer.subarray(seek, seek + length));
|
|
return length;
|
|
}
|
|
/****************************************************************/
|
|
// fake process.write.stdout
|
|
|
|
|
|
var consoleBuffer = "";
|
|
|
|
function writeToConsole(x) {
|
|
consoleBuffer = consoleBuffer + x;
|
|
|
|
if (consoleBuffer.indexOf("\n") >= 0) {
|
|
let lines = consoleBuffer.split("\n");
|
|
consoleBuffer = lines.pop();
|
|
|
|
for (let line of lines) {
|
|
console.log(line);
|
|
}
|
|
}
|
|
}
|
|
|
|
var process = {
|
|
stdout: {
|
|
write: writeToConsole
|
|
}
|
|
};
|
|
/****************************************************************/
|
|
// setup
|
|
|
|
var memory = undefined;
|
|
var inputBuffer = undefined;
|
|
var callback = undefined;
|
|
function setMemory(m) {
|
|
memory = m;
|
|
}
|
|
function setInput(input, cb) {
|
|
inputBuffer = input;
|
|
if (cb) callback = cb;
|
|
}
|
|
/****************************************************************/
|
|
// provide time back to tex
|
|
|
|
function getCurrentMinutes() {
|
|
var d = new Date();
|
|
return 60 * d.getHours() + d.getMinutes();
|
|
}
|
|
function getCurrentDay() {
|
|
return new Date().getDate();
|
|
}
|
|
function getCurrentMonth() {
|
|
return new Date().getMonth() + 1;
|
|
}
|
|
function getCurrentYear() {
|
|
return new Date().getFullYear();
|
|
}
|
|
/****************************************************************/
|
|
// print
|
|
|
|
function printString(descriptor, x) {
|
|
var file = descriptor < 0 ? {
|
|
stdout: true
|
|
} : files[descriptor];
|
|
var length = new Uint8Array(memory, x, 1)[0];
|
|
var buffer = new Uint8Array(memory, x + 1, length);
|
|
var string = String.fromCharCode.apply(null, buffer);
|
|
|
|
if (file.stdout) {
|
|
process.stdout.write(string);
|
|
return;
|
|
}
|
|
|
|
writeSync(file, Buffer.from(string));
|
|
}
|
|
function printBoolean(descriptor, x) {
|
|
var file = descriptor < 0 ? {
|
|
stdout: true
|
|
} : files[descriptor];
|
|
var result = x ? "TRUE" : "FALSE";
|
|
|
|
if (file.stdout) {
|
|
process.stdout.write(result);
|
|
return;
|
|
}
|
|
|
|
writeSync(file, Buffer.from(result));
|
|
}
|
|
function printChar(descriptor, x) {
|
|
var file = descriptor < 0 ? {
|
|
stdout: true
|
|
} : files[descriptor];
|
|
|
|
if (file.stdout) {
|
|
process.stdout.write(String.fromCharCode(x));
|
|
return;
|
|
}
|
|
|
|
var b = Buffer.alloc(1);
|
|
b[0] = x;
|
|
writeSync(file, b);
|
|
}
|
|
function printInteger(descriptor, x) {
|
|
var file = descriptor < 0 ? {
|
|
stdout: true
|
|
} : files[descriptor];
|
|
|
|
if (file.stdout) {
|
|
process.stdout.write(x.toString());
|
|
return;
|
|
}
|
|
|
|
writeSync(file, Buffer.from(x.toString()));
|
|
}
|
|
function printFloat(descriptor, x) {
|
|
var file = descriptor < 0 ? {
|
|
stdout: true
|
|
} : files[descriptor];
|
|
|
|
if (file.stdout) {
|
|
process.stdout.write(x.toString());
|
|
return;
|
|
}
|
|
|
|
writeSync(file, Buffer.from(x.toString()));
|
|
}
|
|
function printNewline(descriptor, x) {
|
|
var file = descriptor < 0 ? {
|
|
stdout: true
|
|
} : files[descriptor];
|
|
|
|
if (file.stdout) {
|
|
process.stdout.write("\n");
|
|
return;
|
|
}
|
|
|
|
writeSync(file, Buffer.from("\n"));
|
|
}
|
|
function reset(length, pointer) {
|
|
var buffer = new Uint8Array(memory, pointer, length);
|
|
var filename = String.fromCharCode.apply(null, buffer);
|
|
filename = filename.replace(/ +$/g, '');
|
|
filename = filename.replace(/^\*/, '');
|
|
filename = filename.replace(/^TeXfonts:/, '');
|
|
if (filename == 'TeXformats:TEX.POOL') filename = "tex.pool";
|
|
|
|
if (filename == "TTY:") {
|
|
files.push({
|
|
filename: "stdin",
|
|
stdin: true,
|
|
position: 0,
|
|
erstat: 0
|
|
});
|
|
return files.length - 1;
|
|
}
|
|
|
|
return openSync(filename, 'r');
|
|
}
|
|
function rewrite(length, pointer) {
|
|
var buffer = new Uint8Array(memory, pointer, length);
|
|
var filename = String.fromCharCode.apply(null, buffer);
|
|
filename = filename.replace(/ +$/g, '');
|
|
|
|
if (filename == "TTY:") {
|
|
files.push({
|
|
filename: "stdout",
|
|
stdout: true,
|
|
erstat: 0
|
|
});
|
|
return files.length - 1;
|
|
}
|
|
|
|
return openSync(filename, 'w');
|
|
}
|
|
function close(descriptor) {
|
|
var file = files[descriptor];
|
|
if (file.descriptor) closeSync(file.descriptor);
|
|
}
|
|
function eof(descriptor) {
|
|
var file = files[descriptor];
|
|
if (file.eof) return 1;else return 0;
|
|
}
|
|
function erstat(descriptor) {
|
|
var file = files[descriptor];
|
|
return file.erstat;
|
|
}
|
|
function eoln(descriptor) {
|
|
var file = files[descriptor];
|
|
if (file.eoln) return 1;else return 0;
|
|
}
|
|
function get(descriptor, pointer, length) {
|
|
var file = files[descriptor];
|
|
var buffer = new Uint8Array(memory);
|
|
|
|
if (file.stdin) {
|
|
if (file.position >= inputBuffer.length) {
|
|
buffer[pointer] = 13;
|
|
file.eof = true;
|
|
file.eoln = true;
|
|
if (callback) callback();
|
|
} else buffer[pointer] = inputBuffer[file.position].charCodeAt(0);
|
|
} else {
|
|
if (file.descriptor) {
|
|
if (readSync(file, buffer, pointer, length, file.position) == 0) {
|
|
buffer[pointer] = 0;
|
|
file.eof = true;
|
|
file.eoln = true;
|
|
return;
|
|
}
|
|
} else {
|
|
file.eof = true;
|
|
file.eoln = true;
|
|
return;
|
|
}
|
|
}
|
|
|
|
file.eoln = false;
|
|
if (buffer[pointer] == 10) file.eoln = true;
|
|
if (buffer[pointer] == 13) file.eoln = true;
|
|
file.position = file.position + length;
|
|
}
|
|
function put(descriptor, pointer, length) {
|
|
var file = files[descriptor];
|
|
var buffer = new Uint8Array(memory);
|
|
writeSync(file, buffer, pointer, length);
|
|
}
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/buffer/index.js */ "./node_modules/buffer/index.js").Buffer))
|
|
|
|
/***/ }),
|
|
|
|
/***/ 0:
|
|
/*!**********************!*\
|
|
!*** util (ignored) ***!
|
|
\**********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
/* (ignored) */
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1:
|
|
/*!**********************!*\
|
|
!*** util (ignored) ***!
|
|
\**********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
/* (ignored) */
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
//# sourceMappingURL=tikzjax.js.map
|